AWS サーバーレスアプリケーションモデル ~ チュートリアル: Hello World アプリケーションのデプロイの実施
今回のお題は「AWS サーバーレスアプリケーションモデル ~ チュートリアル: Hello World アプリケーションのデプロイの実施」。
記事からの引用だが、前提条件はこれ。
次の3つのステップを実施する。
動作環境はWSLで、OSはubuntu。
#Step 1 - Download a sample application
sam init#Step 2 - Build your application
cd sam-app
sam build#Step 3 - Deploy your application
sam deploy --guided
ここまでは特に問題なし。詳細は記事参照。
問題は「ステップ 4: アプリケーションをローカルでテストする (オプション)」。
ドキュメントに従って、API をローカルでホストする。
$sam local start-api
Error: Running AWS SAM projects locally requires Docker. Have you got it installed?
おかしい。。。WSLにもdockerをインストールしたのだが、Dockerが必要だと言われる。
ぐぐったら、次の記事に原因が書いてあった。
qiita.com
記事から引用させていただくと、原因は「WSL内のDockerはホストにはなれず、WSLはあくまでもクライアント」だから、利用できないようです。
したがって、WindowsにインストールしたDockerを、WSLから使う必要がある。
そのために、下記設定を行う(これも記事から引用)。
設定を行うと起動成功。
user@host:~/workspace/sam-app$ sam local start-api
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2020-04-14 15:32:44 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
しかし、いくら待ってもAWSのマニュアル通りの出力にならない。
Docker イメージが読み込まれない。。。
気にせず、curlで「curl http://127.0.0.1:3000/hello」もしくはブラウザで「http://127.0.0.1:3000/hello」を実行すると、Dockerイメージは読み込まれたが、502エラー。
Lambda returned empty body!
Invalid API Gateway Response Keys: {'errorMessage', 'errorType'} in {'errorType': 'Runtime.ImportModuleError', 'errorMessage': "Unable to import module 'app': No module named 'app'"}
2020-04-14 06:39:34 127.0.0.1 - - [14/Apr/2020 06:39:34] "GET /hello HTTP/1.1" 502 -
2020-04-14 06:39:34 127.0.0.1 - - [14/Apr/2020 06:39:34] "GET /favicon.ico HTTP/1.1" 403 -
1 回限りの呼び出しを実行してみるとDockerイメージの読み込みが行われたが、エラー。。。
user@host:~/workspace/sam-app$ sam local invoke HelloWorldFunction --event ./events/event.json
Invoking app.lambda_handler (python3.7)Fetching lambci/lambda:python3.7 Docker container image......
Mounting /home/user/workspace/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: 143cbc71-xxb3-114b-b44c-ba4d31cda5fc Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'app'END RequestId: 111xxxbc1272-aab3-114b-b84c-ba8d31cda9fc
REPORT RequestId: 7aera91cbc72-aaeraeraab3-1aera14b-b8aewra4c-baaera8d31arecda9fc Init Duration: 97.00 ms Duration: 2.98 ms
Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 23 MB{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module 'app': No module named 'app'"}