page_adsence

2020年6月7日日曜日

AWS CDK と AWS SAM CLI を利用して、API Gateway + Lambda をローカル実行しようとしたらハマった件

AWS CDK が使えるのかどうか試してみようと思ってハマった内容をメモとして残しておきます。

前提

MacOSX         10.14.6(Mojave)
AWS CLI        1.16.155
AWS SAM CLI    0.15.0 -> 0.52.0(バグの回避のためにバージョン上げた時のバージョン)
AWS CDK        1.44.0
Docker for Mac 2.3.0.3

この記事のゴール

下記のエラーを回避し、ローカル環境で Lambda が実行できていること。

発生したエラー

$ sam local start-api -t template.yaml --docker-network bridge
2020-06-07 10:52:59 Found credentials in shared credentials file: ~/.aws/credentials
Error: Template does not have any APIs connected to Lambda functions

やったこと

brew 経由で AWS SAM CLI をインストール

brew install aws-sam-cli

AWS CDK をインストール(AWSの公式を参考に)

npm install -g aws-cdk

クラメソさんの記事を参考に、API Gateway + Lambda をローカルで動かす準備をした。

直すためにやったこと

// pip 経由でインストールした aws-sam-cli を削除
$ pip uninstall aws-sam-cli

// シェル再起動
$ exec $SHELL -l

// sam コマンドがあるか確認。brew でインストールしたものが残っていそうなことは確認できた
$ which sam
/usr/local/bin/sam

// sam cli のバージョン確認
$ sam --version
SAM CLI, version 0.52.0

// 一応 brew 側のバージョンも確認
$ brew info aws-sam-cli
aws/tap/aws-sam-cli: stable 0.52.0 (bottled), HEAD
AWS SAM CLI 🐿 is a tool for local development and testing of Serverless applications

原因

AWS SAM CLI のバージョンが古かったことが原因だったっぽい。
最新のバージョンに上げたことで解消できた。

はっきりとした原因が発見できたわけではなく、いろんな記事を渡り歩いたらこの結論に至ったという形。

気づけたのは sam start-api ではなく sam local invoke を実行してみたら、nodejs12.X 系のランタイムはサポートしてないとか言われたので、aws-sam-cli のバージョン確認してみたらやたら古かった。
どうやらはるか昔に pip 経由でインストールした aws-sam-cli があり、そっちのパスが通っていたらしく、今回brew 経由でインストールした方は利用されなかった。

今回の反省点

インストールしたことに満足せず、きちんとバージョン確認します・・・。