インフラ

CDKでNATGatewayのEIPをOutput・Prefixlistに登録する

cdk

こんにちは、ちゃりおです。

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」とか使えばいけるみたいです。

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

ECR
CDKで作成したECRをスタック削除時に同時に削除されるようにするこんにちは、ちゃりおです。 デフォルトではCDKでECRを作成して、「cdk destroy」で削除したときにECRのリポジトリが残り...
ECS
AWS CDKでECS Fargateに必要なVPCエンドポイントを作成するこんにちは、ちゃりおです。 ECSのデプロイ時のPullはNATGWを通すと通信量が高額になることがあると思います。 VPCエンドポイ...
awsロゴ
AWS資格の勉強に公式のデジタルトレーニングがおすすめ(無料・日本語対応あり)こんにちは、ちゃりおです。 AWS認定の勉強をしていて、このコンテンツいいなと思ったのでシェアします。 (存在自体は知っていたんですが...