[AWS CDK] スタック名に本番環境と開発環境の名前を含めて、それぞれデプロイしてみた

デプロイ先のAWSアカウントが同じでも異なる場合でも、スタック名に環境名を入れたいです。

  • 本番環境: xxx-stack-prod
  • 開発環境: xxx-stack-dev

AWS CDK(Cloud Development Kit)を使って、さっそく試してみました!!

目次

環境

  • 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)を使うよりも、お手軽にできる印象です。嬉しいですね。

参考