AWS CDKで、既存のVPCとサブネットを使ってNLBを構築したいが、SubnetSelectionの設定がうまく行かない
やりたいこと
AWS CDKで、既存のVPC内のSubnetを利用してNLBを構築したいのですが、 cdk runの段階で Exception in thread "main" software.amazon.jsii.JsiiException: There are no subnets named 'PrivateSubnet1' in this VPC. Use a different VPC subnet selection.
と表示されてしまい、Subnetが参照できません。
試したこと
以下のテンプレートでCDKを利用しようとしています。Kotlinで記述しています。
fun main() {
val app = App()
val stack = Stack(app, "infrastructure", StackProps.builder().withEnv(Environment.builder().withRegion("ap-northeast-1").withAccount("******").build()).build())
val myVpc = Vpc.fromLookup(stack, "MyVpc", VpcLookupOptions.builder().withVpcId("vpc-******").build())
val subnetName = myVpc.privateSubnets[0].node.id
println(subnetName) // PrivateSubnet1
val nlbProps = NetworkLoadBalancerProps.
builder().
withInternetFacing(false).
withLoadBalancerName("MyNlb").
withVpc(myVpc).
withVpcSubnets(
SubnetSelection.builder().withSubnetName(subnetName).build()).
build()
val nlb = NetworkLoadBalancer(stack, "MyNlb", nlbProps)
app.synth()
}
次のようなエラーが表示されます。
Exception in thread "main" software.amazon.jsii.JsiiException: There are no subnets named 'PrivateSubnet1' in this VPC. Use a different VPC subnet selection.
気になっていること
withSubnetName
関数で参照される値として何を指定すべきなのかがわかっていません。ドキュメントを読む限りは(This is the name supplied in subnetConfiguration).
とのことですが、既存のリソースだとそれが何に当たるのか...PrivateSubnet1という名前をつけた覚えはないのですが...
そもそも
withSubnetName
だと複数のSubnetを指定できない気がするのですが、それはAPIとしてOKなのでしょうか?
参考:
https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.SubnetSelection.html