投稿

7月, 2021の投稿を表示しています

AWS CDKで生成されるCloudformationリソースの一部を削除したいとき

発生した課題  AWS CDKのL2 ConstructのSubnet( ドキュメント )を利用してSubnetを生成している。ConstructはCloudformationの AWS::EC2::Subnet , AWS::EC2::RouteTable , AWS::EC2::SubnetRouteTableAssociation を生成する。SubnetとRouteTableを生成し、その二つのアタッチまでやってくれる。 しかし、今の環境ではRouteTableを別途生成されたものを利用する必要があり、生成されたRouteTableを手で削除してテンプレートを修正しようとすると、RouteTableがないとエラーになり、修正ができなくなってしまった…。   解決策  すぐ思いつく方法としては、L1 ConstructのCfnSubnetで生成する方法である。ただ、今回はL2 Subnetのipv4CidrBlockを別のリソースで利用していて、広い範囲でコードを修正しないといけなかった。 (なんで、 AWS::EC2::Subnet はgetAttでipv4CidrBlockをゲットできないのか…ipv6はできるのに…?)  他の方法はないかと検索してみたら、githubのAWS CDKに同じ問題のissueがあり、そこで方法を探すことができた( https://github.com/aws/aws-cdk/issues/4308 )。 subnetA.node.tryRemoveChild('RouteTableAssociation') subnetA.node.tryRemoveChild('RouteTable')  上記のコードを追加し、再度デプロイを試したら、無事Subnetのみをデプロイすることができた。   コメント  AWS CDKのL2 Constructは、今回のRouteTableとAssociationやIAMの権限など普段使うことには便利ではある。しかし、実際の業務ではいろんな制約があるので、それをCDKに取り入れようとするとややこしくなる場合が多い。今回の場合も、無理やり削除している感があったり、最初にこのことに気づいたらL1 Constructを利用していただろう。L1 Co