ツリー構造の概念図
//S3バケットを作成
const bucket = new s3.Buket(this,"MyBucket");
//IAM Userを作成
const user = new iam.User(this,"MyUser");
//作成したIAMユーザに対してS3バケットの読込権限を付与
buket.grantRead(user);
ただし、L2コンストラクタでは抽象化されている分、L2からは設定できないパラメータが存在する。その場合はL1に一度、型変換を行い設定値を上書きするなどの手段をとる必要がある。
以下の一例では、L2でVPCを作成した後、各サブネットをL1として再定義して、cidrを上書きしている。
※このように抽象化のレベルを変えて、ニーズに合った形でカスタマイズすることをCDKの世界ではエスケープハッチと呼ぶ。
VPCのL2コンストラクタを利用した型変換の一例
//L2コンストラクタを利用してVpcを作成
const Vpc = new ec2.Vpc(this, 'Vpc', {
cidr: '10.10.0.0/16',
maxAzs: 1,
natGateways: 2,
subnetConfiguration: [
{
//細かいcidrの指定はできない
cidrMask: 24,
name: 'Public',
subnetType: ec2.SubnetType.PUBLIC,
},
{
//細かいcidrの指定はできない
cidrMask: 20,
name: 'Private',
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
},
],
});
//L1として再定義
// パブリックサブネット
//Vpcオブジェクトの中からサブネット取り出して、L1として再定義する
const L1PublicSubnet = Vpc.publicSubnets[0].node.defaultChild as ec2.CfnSubnet;
//L1として再定義した上でcidrのプロパティを再設定する
L1PublicSubnet.cidrBlock = "10.10.100.0/24";
// プライベートサブネット
//Vpcオブジェクトの中からサブネット取り出して、L1として再定義する
const L1PrivateSubnet = Vpc.privateSubnets[0].node.defaultChild as ec2.CfnSubnet;
//L1として再定義した上でcidrのプロパティを再設定する
L1PrivateSubnet.cidrBlock = "10.10.200.0/24";
}
名称 | L1 | L2 | L3 |
---|---|---|---|
概要 |
L1
|
L2
|
L3
|
ユースケース |
L1
|
L2
|
L3
|
メリット |
L1
|
L2
|
L3
|
デメリット |
L1
|
L2
|
L3
|