@@ -16,6 +16,9 @@ import { RawAwsSubnet } from '../subnet/data'
1616import { RawAwsEcsContainer } from '../ecsContainer/data'
1717import { RawAwsSystemsManagerInstance } from '../systemsManagerInstance/data'
1818import { ssmManagedInstanceArn } from '../../utils/generateArns'
19+ import { RawAwsElasticBeanstalkEnv } from '../elasticBeanstalkEnvironment/data'
20+ import { RawAwsEksCluster } from '../eksCluster/data'
21+ import { getEksClusterName , getElasticBeanstalkEnvId } from './utils'
1922
2023/**
2124 * EC2
@@ -44,6 +47,7 @@ export default ({
4447 SecurityGroups : instanceSecurityGroups = [ ] ,
4548 NetworkInterfaces : instanceNetworkInterfaces = [ ] ,
4649 SubnetId : subnetId ,
50+ Tags : tags ,
4751 } = instance
4852
4953 /**
@@ -189,17 +193,37 @@ export default ({
189193 id : subnet . SubnetId ,
190194 resourceType : services . subnet ,
191195 relation : 'child' ,
192- field : 'subnet ' ,
196+ field : 'subnets ' ,
193197 } )
194198 }
195199 }
196200 }
197201
198202 /**
199- * Find EKS
203+ * Find EKS cluster
200204 * related to this EC2
201205 */
202- // TODO: Implement when eks service is ready
206+ const eksClusterName = getEksClusterName ( tags )
207+ const eksClusters : {
208+ name : string
209+ data : { [ property : string ] : any [ ] }
210+ } = data . find ( ( { name } ) => name === services . eksCluster )
211+ if ( eksClusters ?. data ?. [ region ] ) {
212+ const eksClustersInRegion : RawAwsEksCluster [ ] = eksClusters . data [
213+ region
214+ ] . filter ( ( { name } : RawAwsEksCluster ) => name === eksClusterName )
215+
216+ if ( ! isEmpty ( eksClustersInRegion ) ) {
217+ for ( const eksCluster of eksClustersInRegion ) {
218+ connections . push ( {
219+ id : eksCluster . arn ,
220+ resourceType : services . eksCluster ,
221+ relation : 'child' ,
222+ field : 'eksCluster' ,
223+ } )
224+ }
225+ }
226+ }
203227
204228 /**
205229 * Find ECS Container
@@ -210,9 +234,9 @@ export default ({
210234 data : { [ property : string ] : any [ ] }
211235 } = data . find ( ( { name } ) => name === services . ecsContainer )
212236 if ( ecsContainers ?. data ?. [ region ] ) {
213- const containersInRegion : RawAwsEcsContainer [ ] = ecsContainers . data [ region ] . filter (
214- ( { ec2InstanceId } ) => ec2InstanceId === id
215- )
237+ const containersInRegion : RawAwsEcsContainer [ ] = ecsContainers . data [
238+ region
239+ ] . filter ( ( { ec2InstanceId } ) => ec2InstanceId === id )
216240
217241 if ( ! isEmpty ( containersInRegion ) ) {
218242 for ( const container of containersInRegion ) {
@@ -230,18 +254,24 @@ export default ({
230254 * Find SSM managed instances
231255 * related to this EC2 instance
232256 */
233- const instances : {
257+ const instances : {
234258 name : string
235259 data : { [ property : string ] : any [ ] }
236260 } = data . find ( ( { name } ) => name === services . systemsManagerInstance )
237261 if ( instances ?. data ?. [ region ] ) {
238- const dataInRegion : RawAwsSystemsManagerInstance [ ] = instances . data [ region ] . filter (
262+ const dataInRegion : RawAwsSystemsManagerInstance [ ] = instances . data [
263+ region
264+ ] . filter (
239265 ( { InstanceId } : RawAwsSystemsManagerInstance ) => InstanceId === id
240266 )
241267
242268 if ( ! isEmpty ( dataInRegion ) ) {
243269 for ( const ssmInstance of dataInRegion ) {
244- const arn = ssmManagedInstanceArn ( { region, account, name : ssmInstance . InstanceId } )
270+ const arn = ssmManagedInstanceArn ( {
271+ region,
272+ account,
273+ name : ssmInstance . InstanceId ,
274+ } )
245275 connections . push ( {
246276 id : arn ,
247277 resourceType : services . systemsManagerInstance ,
@@ -254,9 +284,31 @@ export default ({
254284
255285 /**
256286 * Find Elastic Beanstalk
257- * related to this EC2 loadbalancer
287+ * related to this EC2 instance
258288 */
259- // TODO: Implement when eb service is ready
289+ const elasticBeanstalkEnvId = getElasticBeanstalkEnvId ( tags )
290+ const elasticBeanstalkEnvs : {
291+ name : string
292+ data : { [ property : string ] : any [ ] }
293+ } = data . find ( ( { name } ) => name === services . elasticBeanstalkEnv )
294+ if ( elasticBeanstalkEnvs ?. data ?. [ region ] ) {
295+ const elasticBeanstalkEnvsInRegion : RawAwsElasticBeanstalkEnv [ ] =
296+ elasticBeanstalkEnvs . data [ region ] . filter (
297+ ( { EnvironmentId } : RawAwsElasticBeanstalkEnv ) =>
298+ elasticBeanstalkEnvId === EnvironmentId
299+ )
300+
301+ if ( ! isEmpty ( elasticBeanstalkEnvsInRegion ) ) {
302+ for ( const elasticBeanstalkEnv of elasticBeanstalkEnvsInRegion ) {
303+ connections . push ( {
304+ id : elasticBeanstalkEnv . EnvironmentId ,
305+ resourceType : services . elasticBeanstalkEnv ,
306+ relation : 'child' ,
307+ field : 'elasticBeanstalkEnv' ,
308+ } )
309+ }
310+ }
311+ }
260312
261313 const ec2Result = {
262314 [ id ] : connections ,
0 commit comments