@@ -7,6 +7,10 @@ import EC2, {
77 DescribeTransitGatewayAttachmentsResult ,
88 TransitGatewayAttachmentList ,
99 TransitGatewayAttachment ,
10+ DescribeTransitGatewayVpcAttachmentsResult ,
11+ TransitGatewayVpcAttachmentList ,
12+ TransitGatewayVpcAttachment ,
13+ DescribeTransitGatewayVpcAttachmentsRequest ,
1014} from 'aws-sdk/clients/ec2'
1115
1216import { Config } from 'aws-sdk/lib/config'
@@ -52,7 +56,6 @@ const listTransitGatewayAttachmentsData = async ({
5256 err,
5357 } )
5458 }
55-
5659 if ( ! isEmpty ( data ) ) {
5760 const {
5861 NextToken : nextToken ,
@@ -84,6 +87,67 @@ const listTransitGatewayAttachmentsData = async ({
8487 )
8588 } )
8689
90+ const listTransitGatewayVpcAttachmentsData = async ( {
91+ ec2,
92+ region,
93+ nextToken : NextToken = '' ,
94+ } : {
95+ ec2 : EC2
96+ region : string
97+ nextToken ?: string
98+ } ) : Promise < ( TransitGatewayVpcAttachment & { region : string } ) [ ] > =>
99+ new Promise < ( TransitGatewayVpcAttachment & { region : string } ) [ ] > ( resolve => {
100+ let transitGatewayVpcAttachmentData : ( TransitGatewayVpcAttachment & {
101+ region : string
102+ } ) [ ] = [ ]
103+ const transitGatewayVpcAttachmentList : TransitGatewayVpcAttachmentList = [ ]
104+ let args : DescribeTransitGatewayVpcAttachmentsRequest = { }
105+
106+ if ( NextToken ) {
107+ args = { ...args , NextToken }
108+ }
109+
110+ ec2 . describeTransitGatewayVpcAttachments (
111+ args ,
112+ ( err : AWSError , data : DescribeTransitGatewayVpcAttachmentsResult ) => {
113+ if ( err ) {
114+ errorLog . generateAwsErrorLog ( {
115+ functionName : 'ec2:describeTransitGatewayVpcAttachments' ,
116+ err,
117+ } )
118+ }
119+
120+ if ( ! isEmpty ( data ) ) {
121+ const {
122+ NextToken : nextToken ,
123+ TransitGatewayVpcAttachments : transitGatewayVpcAttachments = [ ] ,
124+ } = data
125+
126+ transitGatewayVpcAttachmentList . push ( ...transitGatewayVpcAttachments )
127+
128+ logger . debug (
129+ lt . fetchedTransitGatewayVpcAttachments (
130+ transitGatewayVpcAttachments . length
131+ )
132+ )
133+
134+ if ( nextToken ) {
135+ listTransitGatewayVpcAttachmentsData ( { ec2, region, nextToken } )
136+ }
137+
138+ transitGatewayVpcAttachmentData = transitGatewayVpcAttachmentList . map (
139+ vpcAttachment => ( {
140+ ...vpcAttachment ,
141+ region,
142+ } )
143+ )
144+ }
145+
146+ resolve ( transitGatewayVpcAttachmentData )
147+ }
148+ )
149+ } )
150+
87151/**
88152 * Transit Gateway Attachment
89153 */
@@ -92,6 +156,7 @@ export interface RawAwsTransitGatewayAttachment
92156 extends Omit < TransitGatewayAttachment , 'Tags' > {
93157 region : string
94158 Tags ?: TagMap
159+ SubnetIds ?: string [ ]
95160}
96161
97162export default async ( {
@@ -118,11 +183,24 @@ export default async ({
118183 } )
119184
120185 if ( ! isEmpty ( transitGatewayAttachments ) ) {
186+ // Get Transit Gateway Vpc Attachment Data
187+ const transitGatewayVpcAttachments =
188+ await listTransitGatewayVpcAttachmentsData ( {
189+ ec2,
190+ region,
191+ } )
192+
121193 for ( const attachment of transitGatewayAttachments ) {
122194 transitGatewayAttachmentsResult . push ( {
123195 ...attachment ,
124196 region,
125197 Tags : convertAwsTagsToTagMap ( attachment . Tags as AwsTag [ ] ) ,
198+ SubnetIds :
199+ transitGatewayVpcAttachments ?. find (
200+ a =>
201+ a . TransitGatewayAttachmentId ===
202+ attachment . TransitGatewayAttachmentId
203+ ) ?. SubnetIds || [ ] ,
126204 } )
127205 }
128206 }
0 commit comments