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
リンク