概要
CDKを使ってAWS環境を作成するときの方法についてまとめていこうと思います。
今回は作成するプロジェクトを分割しての作成例になります。
前回ではまとめて作成していたので分割してみました。
準備
- 前回の転記部分もあります。詳細は前回を参照
- AWS SummitのCDKハンズオンを見て準備をしましょう。
- こちらでも簡単に準備手順を
- AWS CLIのインストール
- AWS Configureの設定
- アカウントはCDKで作成するリソースにアクセスできる権限を付与しましょう。(お試しでやる場合はAdministrator権限の方がいいかもしれません)
- node.jsのインストール
-
npm install -g aws-cdk
のコマンドでcdkをインストール
プロジェクトの準備
- TypeScriptでの例となります。
- 空のディレクトリを用意する。
- ディレクトリに移動して以下のコマンドを実行する
cdk init --language typescript
- 初期ディレクトリなどが作成されるのを待ちます。
ライブラリのインストール
- 必要に応じて npm コマンドでライブラリをインストールします。以下のようなコマンドです。
npm install @aws-cdk/aws-ecs
npm install @aws-cdk/aws-batch
npm install @aws-cdk/aws-ec2
npm install @aws-cdk/aws-iam
npm install @aws-cdk/aws-ecr
-
注意点
- ライブラリのバージョンが一致していないとコンパイルエラーやdeploy時にエラーになるので
package.json
のバージョンを合わせて、package-lock.json
とnode_modules
配下を削除してnpm install
を実施しましょう。
- ライブラリのバージョンが一致していないとコンパイルエラーやdeploy時にエラーになるので
コンパイルの準備
- ライブラリインストール後にプロジェクトを作成したディレクトリに移動して以下のコマンドを実行します。windowsの場合はライブラリのインストール時には停止する必要があるので注意を
npm run watch
各モジュールの説明
- モジュールはgithubで公開しています。
- /vpc
- VPCの設定をまとめています。
- こちらでVPC周りを先に作成して他の部分を作成していく流れになっています。
- こちらのデプロイを先に実施しないとRDSの方で使用するVPCIDがとれずに失敗します。
- /rds-s3
-
RDS,S3の設定をまとめています。
-
RDS用S3用それぞれソースを分けているため変更があった時も修正するべきソースをわかりやすいかなと思います。
-
./bin/rds-s3.ts
の方で以下のように設定することで複数のソースの定義を使えるようにしています。対象が増えた場合はさらに追記していきます。import { RdsS3Stack } from '../lib/rds-s3-stack'; import { CdkRdsStack } from '../lib/cdk-rds-stack'; import { CdkS3Stack } from '../lib/cdk-s3-stack'; import { env } from 'process'; const app = new cdk.App(); new RdsS3Stack(app,'RdsS3Stack',{ env: { region: 'ap-northeast-1', account: env.AWS_ACCOUNT, }}); new CdkRdsStack(app,'CdkRdsStack',{ env: { region: 'ap-northeast-1', account: env.AWS_ACCOUNT, }}); new CdkS3Stack(app,'CdkS3Stack',{ env: { region: 'ap-northeast-1', account: env.AWS_ACCOUNT, }});
-
デプロイするときはStack名を指定して実施します。ワイルドカードの指定も可能です。
-
cdk deploy *
またはcdk deploy CdkRdsStack
の用に指定します。
-
-
CDKの定義
-
VPC
- 今回はpublicとprivateのサブネット2種類、S3用のエンドポイントを作成する形にしています。
- VPCのIDをパラメータストアに格納して他のモジュールで参照するときに使えるようにしています。
-
S3
- Bucketの作成とライフサイクルで30日でオブジェクトを削除するようにしています。
- prefix で削除対象を絞っています。
const sdfDataBucket = new s3.Bucket(this, 's3-bucket-data-1', { bucketName: `s3-bucket-data-1-${this.region}-${this.account}`, blockPublicAccess:s3.BlockPublicAccess.BLOCK_ALL, lifecycleRules:[ { expiration:cdk.Duration.days(30), prefix:'data', id:'delete for data' } ] });
- Bucketの作成とライフサイクルで30日でオブジェクトを削除するようにしています。
-
RDS
- セキュリティグループの設定をこちらで実施しています。
- master のユーザID,パスワードはパラメータストアに設定しています。