🤔
AWS と SAM を掛け合わせて開発する方法について検討してみる
※ SAM はインストールされている前提になります
公式に CDK から吐き出した template を使用して SAM で開発を行う方法が記載されています。
今回はこれを試してみようと思います。
とりあえず CDK の土台作る
$ npx cdk init app --language typescript
template を吐き出して実行してみる
CDK でデプロイする lambda の template を cdk.out フォルダに吐き出します。
$ npx cdk synth --no-staging
そのまま実行するとテレメトリーを収集することの警告が表示されます。
実行するため無効にする場合は環境変数を設定します。
$ export SAM_CLI_TELEMETRY=0
sam 実行すると
$ sam local invoke MyFunction --no-event -t ./cdk.out/SamTemplateStack.template.json
Error: Running AWS SAM projects locally requires Docker. Have you got it installed and running?
のエラーが出るので docker のリンクを修正。
$ sudo ln -s "$HOME/.docker/run/docker.sock" /var/run/docker.sock
実行リベンジ!
$ sam local invoke MyFunction --no-event -t ./cdk.out/SamTemplateStack.template.json
Error: Error building docker image: pull access denied for public.ecr.aws/lambda/nodejs, repository does not exist or may require 'docker login': denied: Your authorization token has expired. Reauthenticate and try again.
古いセッションが残りっぱなしになることがあるみたいなので、ログアウトする。
$ docker logout public.ecr.aws
もう一回実行!
$ sam local invoke MyFunction --no-event -t ./cdk.out/SamTemplateStack.template.json
INFO Hello, world! {}
正常終了やっとしました。
まとめ
端末固有の問題も含まれていそうですが、そのまま写経してもうまくいかないところがいくつかありました。
CDK と SAM を掛け合わせて開発する一歩踏み出せたので、Typescript のビルドとか含めて SAM いけるのか今後の模索していきたいです。
Discussion