AWS CDKを使用してAWS構成をデプロイする

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

AWS CDKはPythonやTypeScriptで記述できるAWSの各サービスを構築からデプロイまで行えるツール。

つまり、CloudFormationのテンプレートをプログラム言語で記述できる。というツール。

cdkはnpmパッケージとして提供されています。


cdkからAWSプロジェクトの作成

コマンド実行したディレクトリ名がプロジェクト名となります。

$ npx cdk init app --language=typescript


必ず中身が空のディレクトリで操作を行う。中身が空でない場合、以下のメッセージが表示されinitに失敗します。

`cdk init` cannot be run in a non-empty directory!


デプロイ用S3バケットの作成

$ npm run cdk bootstrap


CloudFormation スタック定義を記述

ライブラリのインストール

スタック定義はcdk init時に指定した言語で記述します。

スタックに定義する各AWSサービスに依存するライブラリをインストールします。

$ npm install @aws-cdk/aws-apigateway
$ npm install @aws-cdk/aws-lambda
$ npm install @aws-cdk/aws-dynamodb
$ npm install @aws-cdk/aws-logs
$ npm install @aws-cdk/aws-ssm
$ npm install http-method-enum

languageをPythonにした場合、多分、pip3になる。と思う。


スタック定義ファイル

lib/projectName-stack.tsにCloudFormationのスタック定義を記述します。

以下はgoのランタイムを使用するLambda関数作成のコード例。

const personFunc = new Function(this, 'funcName', {
    code: Code.fromAsset('./src'),
    handler: 'handlername',
    runtime: Runtime.GO_1_X,
    logRetention: RetentionDays.TWO_WEEKS,
});
//IAMロールの作成、Lambda関数に付与
const personsInteg = new LambdaIntegration(personFunc);

詳細:

aws-for-everyone/backend-stack.ts at master · letitride/aws-for-everyone · GitHub


デプロイする成果物の作成

goはコンパイルした成果物をLambdaに上げる為、npmのrun scriptにビルドコマンドを定義します。

package.json

  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk",
    "build:backend": "GO111MODULE=off go get -v -t -d ./src/... && GOOS=linux GOARCH=amd64 go build -o ./src/build ./src/**.go",
    "deploy": "npm run --silent build && npm run --silent build:backend && npm run --silent deploy:backend",
    "deploy:backend": "cdk deploy ProjrectNameStack"
  },


AWSへの構成のデプロイ

$ npm run deploy