この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
テントの中から失礼します、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 を作ろうとしてみます。
lib/vpc-subnet-sample-stack.ts
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
なので、スタックを作成する際に、アカウントとリージョンを指定してあげます。
bin/vpc-subnet-sample.ts
#!/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 が作成されるようになりました。やったぜ。
おわりに
困った時はちゃんとドキュメントを読みましょうね案件でした。
今回は以上になります。最後まで読んで頂きありがとうございました!