[AWS CDK] スタック名に本番環境と開発環境の名前を含めて、それぞれデプロイしてみた
デプロイ先のAWSアカウントが同じでも異なる場合でも、スタック名に環境名を入れたいです。
- 本番環境: xxx-stack-prod
- 開発環境: xxx-stack-dev
AWS CDK(Cloud Development Kit)を使って、さっそく試してみました!!
目次
- 環境
- AWS CDKのインストール
- AWS CDKで適当にWebAPIを作る
- WebAPIの仕様
- AWS CDKプロジェクトの構築
- Lambdaコードを書く!
- インフラをコードで書く!!!
- スタック名に環境名を反映させる
- ビルドする
- デプロイする
- bootstrapの実行
- 開発環境にデプロイする
- 本番環境にデプロイする
- 動作確認
- 開発環境
- 本番環境
- AWSの様子
- CloudFormation
- API Gateway
- Lambda
- さいごに
- 参考
環境
- Mac
- macOS Mojave 10.14.6
- ほか
- AWS CDK 1.4.0 (build 175471f)
- npm 6.9.0
- node 10.16.1
AWS CDKのインストール
インストール済みの場合はSkipしてください。
$ npm install -g aws-cdk
AWS CDKで適当にWebAPIを作る
WebAPIの仕様
Method | Path |
---|---|
GET | /message/:id |
/message/hoge
に対してアクセスしたとき、下記のJSONを取得します。
{ "env": "dev", "message": "your request message id is hoge" }
env
の値は、開発環境ならdev
で、本番環境ならprod
とします。
AWS CDKプロジェクトの構築
$ mkdir AWSCDK-MultiStackSample $ cd AWSCDK-MultiStackSample $ cdk init app --language=typescript
必要なライブラリをインストールします。
$ npm install --save @aws-cdk/aws-lambda $ npm install --save @aws-cdk/aws-apigateway
Lambdaコードを書く!
まずはファイルを作ります。
$ mkdir -p src/lambda/ $ touch src/lambda/app.ts
続いてコードを下記にします。
インフラをコードで書く!!!
lib/awscdk-multi_stack_sample-stack.ts
を下記にします。
スタック名に環境名を反映させる
bin/awscdk-multi_stack_sample.ts
を下記にします。
環境変数から「環境名」を取得し、スタック名に含めています。
ビルドする
$ npm run build
デプロイする
bootstrapの実行
Lambdaコード格納用のS3バケットを作るcdk bootstrap
は、最初の1回だけでOKです。
$ cdk bootstrap
開発環境にデプロイする
$ SYSTEM_ENV=dev cdk deploy
スタック作成が完了すると、エンドポイント(WebAPIのアドレス)が表示されるので、メモしておきます。
Outputs: AwscdkMultiStackSampleStack-dev.multisampleapiEndpointxxxxx = https://aaaa.execute-api.ap-northeast-1.amazonaws.com/prod/
本番環境にデプロイする
$ SYSTEM_ENV=prod cdk deploy
スタック作成が完了すると、エンドポイント(WebAPIのアドレス)が表示されるので、メモしておきます。
Outputs: AwscdkMultiStackSampleStack-prod.multisampleapiEndpointyyyyy = https://bbbb.execute-api.ap-northeast-1.amazonaws.com/prod/
動作確認
開発環境
開発環境にデプロイした際のエンドポイントを叩きます。
$ curl https://aaaa.execute-api.ap-northeast-1.amazonaws.com/prod/message/hoge {"env":"dev","message":"your request message id is hoge"}
開発環境のLambdaが動いています!
本番環境
本番環境にデプロイした際のエンドポイントを叩きます。
$ curl https://bbbb.execute-api.ap-northeast-1.amazonaws.com/prod/message/fuga {"env":"prod","message":"your request message id is fuga"}
本番環境のLambdaが動いています!
AWSの様子
ブラウザでログインして、それぞれの様子を確認しました。バッチリです!
CloudFormation
API Gateway
Lambda
さいごに
bin
フォルダ配下のファイルがStack本体の名前を定義しているため、ソレを変更すればできました!
AWS SAM(CloudFormation)を使うよりも、お手軽にできる印象です。嬉しいですね。