事の発端
先日(2020年9月某日)、新しく作成したAWSのCloud9の開発環境(platform=AmazonLinux)でsam(ServerlessApplicationModel)のhello worldテンプレート(ランタイムはpython3.8)を出力し、buildやdeployを試そうと"sam build --use-container"コマンドでビルドをしてみたところ、下記のエラーに遭遇しました。
作成したばかりの素の環境でエラー(RuntimeError: Container does not exist)になったので「え??」となりました。
(↓はご参考までに、hello_worldテンプレートを出力するまで)
ec2-user:~/environment $ sam init --runtime python3.8 -n sam-py38
SAM CLI now collects telemetry to better understand customer needs.
You can OPT OUT and disable telemetry collection by setting the
environment variable SAM_CLI_TELEMETRY=0 in your shell.
Thanks for your help!
Learn More: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-telemetry.html
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Allow SAM CLI to download AWS-provided quick start templates from Github [Y/n]: Y
AWS quick start application templates:
1 - Hello World Example
2 - EventBridge Hello World
3 - EventBridge App from scratch (100+ Event Schemas)
4 - Step Functions Sample App (Stock Trader)
5 - Elastic File System Sample App
Template selection: 1
-----------------------
Generating application:
-----------------------
Name: sam-py38
Runtime: python3.8
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Next steps can be found in the README file at ./sam-py38/README.md
ec2-user:~/environment $ cd sam-py38/
(↓が出力したhello_worldのsam buildコマンドがRuntimeErrorになったところ)
ec2-user:~/environment/sam-py38 $ sam build --use-container
Starting Build inside a container
Building resource 'HelloWorldFunction'
Fetching lambci/lambda:build-python3.8 Docker container image.....................................................................................................................................................................................................................................................
Mounting /home/ec2-user/environment/sam-py38/hello_world as /tmp/samcli/source:ro,delegated inside runtime container
Traceback (most recent call last):
File "/usr/local/bin/sam", line 11, in <module>
sys.exit(cli())
File "/usr/local/lib64/python3.6/site-packages/click/core.py", line 764, in __call__
~(省略)~
File "/usr/local/lib/python3.6/site-packages/samcli/local/docker/container.py", line 197, in wait_for_logs
raise RuntimeError("Container does not exist. Cannot get logs for this container")
RuntimeError: Container does not exist. Cannot get logs for this container
※ Cloud9については↓をご覧ください。
https://aws.amazon.com/jp/cloud9/
原因と解決法
エラーメッセージから直感的に原因がわからなかったのでAWSサポートに問い合わせたところ、
Cloud9環境のEC2インスタンスに関連付けられているEBSボリュームの容量不足が原因
との回答を頂きました。
下記のドキュメントを参考にEBSボリュームの容量を20Gに拡張することで解決しました。
Resize an Amazon EBS volume used by an environment
https://docs.aws.amazon.com/cloud9/latest/user-guide/move-environment.html#move-environment-resize
この方法でのサイズ拡張はこちら様↓の記事でも紹介されており、とても簡単に拡張することができます。
AWS Cloud9のディスクサイズを増やす
https://qiita.com/Keisuke69/items/af87eb8629ad4249bd22
初期状態のボリュームサイズだと、特にdockerに関連する作業をCloud9上でする場合などはすぐに足りなくなりますので、resize.shを使って必要に応じて簡単にボリュームを拡張する方法は覚えておくと便利だと思います。
簡単ですが以上です。
同じ問題で困る方が減ることを願って。