概要
cdk v2でsam-beta-cdkが動くか試してみる。
構成
- cdk
- bin
- cdk.ts
- lib
- cdk-stack.ts
- cdk.json
- src
- handler
- api
- hello.ts
スタック・Lambdaファイル抜粋
import { Stack, StackProps } from 'aws-cdk-lib';
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import { Construct } from 'constructs';
import { LambdaIntegration, RestApi } from 'aws-cdk-lib/aws-apigateway';
export class CdkStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const helloLambda = new NodejsFunction(this, 'test', {
runtime: lambda.Runtime.NODEJS_14_X,
entry: `../src/handler/api/hello.ts`,
});
const api = new RestApi(this, 'ServerlessRestApi', { cloudWatchRole: false });
api.root.addResource('hello').addMethod('GET', new LambdaIntegration(helloLambda));
}
}
import { APIGatewayProxyHandler } from 'aws-lambda';
export const handler: APIGatewayProxyHandler = async (event) => {
return {
'statusCode': 200,
'body': JSON.stringify({
message: 'hello world',
})
};
};
インストール
直接windowsに入れることにした。
Getting started with AWS SAM and the AWS CDKからmsiのインストーラを使ってインストール。
gitbashを使ってコマンドを確認したかったので、インストール先のbinフォルダに以下のファイルを作成
#!/bin/bash
current_dir=$(cd $(dirname $0) && pwd)
$current_dir/../runtime/python.exe -m samcli "$@"
確認できた。
$sam-beta-cdk --version
SAM CLI, version 1.29.0.dev202108311500
最初はDockerとかVagrantでやろうとしたがエラーになったので断念
直接windowsに入れるのは憚られた。
dockerにsam-beta-cdkを入れようとも思ったが、sam-beta-cdkがdockerを立ち上げるので断念(dockerからdockerは立ち上がらない)。
throw new Error(Failed to bundle asset ${this.node.path}, bundle output is located at ${bundleErrorDir}: ${err});
ソースコード
Vagrant上で行おうと思ったが、すでにwindows上でnode_modulesが作成されていたからか、以下のようなエラーが発生。
Error: The package "esbuild-linux-64" could not be found, and is needed by esbuild.
エラーの対応
cdkリポジトリで動作確認をしようとしたら以下のエラー。
KeyError:
issueが出ていたので、その通りに対応.
core:newStyleStackSynthesis
はtrueにすると、CDK Pipelinesが動作するために必要な、新しい(1.46.0 以降の)ものに切り替えられるらしい(参考)。sam-beta-cdkが未対応のようなので、false
にする。
{
"app": "npx ts-node --prefer-ts-exts bin/cdk.ts",
"context": {
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
"@aws-cdk/core:stackRelativeExports": true,
"@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
"@aws-cdk/aws-lambda:recognizeVersionProps": true,
"@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true,
+ "@aws-cdk/core:newStyleStackSynthesis": false
}
}
動作確認
GET http://127.0.0.1:3000/hello HTTP/1.1
参考
Docker で十全に gcloud や aws コマンドなどを使う方法
cdk getting started
sam-beta-cdkのlambdaのローカル実行をWindows10+Vagrant+VirtualBox+Ubuntuで試してみたメモ
issue