AWS CDK で3つ以上の AZ に Subnet を作成するにはアカウントとリージョンを必ず指定する必要があります
はじめに
テントの中から失礼します、CX事業本部のてんとタカハシです!
CDK で3つ以上の AZ に Subnet を作成しようと思ったら上手くいかず、少しハマりました。その時の解決方法について、記事にしていこうと思います。答えは CDK の公式ドキュメントに書いてありました。
環境
環境は下記の通りです。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H2 $ cdk --version 1.85.0 (build 5f44668)
スタックの実装
まず CDK のプロジェクトを作ってから、単純に3つの AZ に Subnet を作ろうとしてみます。
import * as cdk from '@aws-cdk/core'; import { Vpc, SubnetType } from '@aws-cdk/aws-ec2'; export class VpcSubnetSampleStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new Vpc(this, 'Vpc', { cidr: '10.0.0.0/16', enableDnsHostnames: true, enableDnsSupport: true, subnetConfiguration: [ { cidrMask: 24, name: 'PublicSubnet', subnetType: SubnetType.PUBLIC, }, ], // 3つの AZ に Subnet 作っちゃうぞ、てへ maxAzs: 3, }); } }
デプロイしてから作成された Subnet を確認してみると、あれれ〜おかしいぞ〜? Subnet が2つしか作られていないじゃないかあ。
解決方法
公式のドキュメントに、「2つ以上の AZ を使用するには、アカウントとリージョンを必ず指定してね」って書いてありました。
Be aware that environment-agnostic stacks will be created with access to only 2 AZs, so to use more than 2 AZs, be sure to specify the account and region on your stack.
AWS CDK Reference Documentation
なので、スタックを作成する際に、アカウントとリージョンを指定してあげます。
#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from '@aws-cdk/core'; import { VpcSubnetSampleStack } from '../lib/vpc-subnet-sample-stack'; const app = new cdk.App(); new VpcSubnetSampleStack(app, 'VpcSubnetSampleStack', { // これを追加してあげる env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION, }, });
これでデプロイすると、3つの AZ に1つずつ Subnet が作成されるようになりました。やったぜ。
おわりに
困った時はちゃんとドキュメントを読みましょうね案件でした。
今回は以上になります。最後まで読んで頂きありがとうございました!