こんにちは、ちゃりおです。
CDKで作成したVPCのNAT GatewayのEIPを他のスタックで使ったり、プレフィックスリストに登録したいことがありました。
方法探すのに少し時間がかかったので記事にします。
以下を参考にしました。
Get EIP as output from aws-cdk generated VPC definition
CDKで作成したNATGatewayのEIPを取得したい
例えば、CDKでこんな感じにVPCを作成したとします。
const vpc = new ec2.Vpc(this, 'VPC', { maxAzs: 2 })
生成されるCloudformationを見てみると、NATGatewayのEIPも作成されています。
"VPCPublicSubnet1EIP6AD938E8": {
"Type": "AWS::EC2::EIP",
"Properties": {
"Domain": "vpc",
"Tags": [
{
"Key": "Name",
"Value": "CdkVpcNatEipStack/VPC/PublicSubnet1"
}
]
},
"Metadata": {
"aws:cdk:path": "CdkVpcNatEipStack/VPC/PublicSubnet1/EIP"
}
},
このEIPを取得して、Outputしたりしたいわけですが、vpcから参照した感じではそれっぽいプロパティがないです。(vpc.publicSubnetsみたいな感じでは取れない)
EIPのIPアドレス自体は、EIPオブジェクトのrefから取れそうです。
AWS CDK class CfnEIP (construct)
CloudFormation AWS::EC2::EIP
取得してOutputに出力・PrefixList作成
こんな感じで取得できました。
IPアドレス使って、PrefixListへの登録もしてみました。
(もっと良い書き方もありそうですが、、)
const vpc = new ec2.Vpc(this, 'VPC', {
maxAzs: 2,
})
const eips: string[] = []
vpc.publicSubnets.forEach((subnet, index) => {
const eip = subnet.node.tryFindChild('EIP') as ec2.CfnEIP
new cdk.CfnOutput(this, `output-eip-${index}`, { value: eip.ref })
eips.push(eip.ref)
})
new ec2.CfnPrefixList(this, "natgw-prefixlist", {
addressFamily: "IPv4",
maxEntries: 5,
prefixListName: "natgw-ip-list",
entries: [
{
cidr: `${eips[0]}/32`,
},
{
cidr: `${eips}/32`,
}
]
})
Outputs:
CdkVpcNatEipStack.outputeip0 = 35.74.194.86
CdkVpcNatEipStack.outputeip1 = 54.64.174.31
まとめ
NATGatewayのEIPの取得方法についてでした。
「tryFindChild」とか使えばいけるみたいです。
CDKで作成したECRをスタック削除時に同時に削除されるようにするこんにちは、ちゃりおです。
デフォルトではCDKでECRを作成して、「cdk destroy」で削除したときにECRのリポジトリが残り...
AWS CDKでECS Fargateに必要なVPCエンドポイントを作成するこんにちは、ちゃりおです。
ECSのデプロイ時のPullはNATGWを通すと通信量が高額になることがあると思います。
VPCエンドポイ...
AWS資格の勉強に公式のデジタルトレーニングがおすすめ(無料・日本語対応あり)こんにちは、ちゃりおです。
AWS認定の勉強をしていて、このコンテンツいいなと思ったのでシェアします。
(存在自体は知っていたんですが...