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