AWS CDKで気をつけること
個人的に引っかかったところのメモです。
コード例はいずれもTypescript版になります。
EC2インスタンスのディスク容量の指定の仕方
何も指定せずに作成するとストレージは8GBで作成される。
EBSストレージを作成してルートボリューム(/dev/xvda
)にアタッチしても駄目でした。
Instance.instance.blockDeviceMappings
で設定してやると上手くいきました。
import {Instance} from '@aws-cdk/aws-ec2';
import {Construct, Stack, StackProps} from '@aws-cdk/core';
export default class Ec2Stack extends Stack {
constructor(scope: Construct, id: string, props: StackProps) {
const instance: Instance = new Instance(this, 'Ec2', {
/* 省略 */
});
this.instance.instance.creditSpecification = {
cpuCredits: 'standard' // T3 Unlimitedを無効化
};
this.instance.instance.blockDeviceMappings = [{
deviceName: '/dev/xvda',
ebs: {volumeSize: 100} // ストレージ容量を設定(単位はGB)
}];
}
}
RDSのVPCサブネット
RDSのインスタンスやAuroraクラスターはPublicサブネットには配置できません。
かといってPrivateサブネットに配置すると勝手にNATゲートウェイが作成され、コイツが意外と金食いです。
Isolatedというのにしたらいい感じになりました。
import {SubnetType} from '@aws-cdk/aws-ec2';
import {DatabaseCluster, DatabaseInstance} from '@aws-cdk/aws-rds';
import {Construct, Stack, StackProps} from '@aws-cdk/core';
export default class RdsStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps) {
if (props.env === 'production') {
// 本番環境
const cluster: DatabaseCluster = new DatabaseCluster(this, 'Rds', {
︙
instanceProps: {
︙
vpcSubnets: {subetType: SubnetType.ISOLATED}
}
});
} else {
// ステージング
const instance: DatabaseInstance = new DatabaseInstance(this, 'Rds', {
︙
vpcPlacement: {subnetType: SubnetType.ISOLATED}
});
}
}
}