# 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}
            });
        }
    }
}