##エラー内容
Docker ComposeのAmazon ECSデプロイを試してみた
上の記事を参考にAWSのコンテナ基盤であるECSの概要を理解しようとぽちぽち触っていたところ、contextを作成するために下のコードを実行すると記事にはない選択項目が出現。
$ docker context create ecs myecscontext
↓
> AWS secret and token credentials
AWS environment variables
挙動を確認するためと軽い気持ちで2つめのAWS environment variablesを選択したところ,
contextの作成に成功したようですが記事のように内容の入力が求められませんでした。
Successfully created ecs context "myecscontext"
気にせず作成したcontextをuseするために下のコードを実行すると悲劇が起きました。
$ docker context use myecscontext
docker compose upすると
$ docker compose up
↓
context requires credentials to be passed as environment variables
当然何も入力していないcontextなのでこういう挙動なのだなと確認してcontextをdefaultに戻そうとすると
$ docker context ls
↓
context requires credentials to be passed as environment variables
contextが確認できません。
確認はできなくてもdefaultに戻せれば...と思って実行するも
$ docker context use default
↓
context requires credentials to be passed as environment variables
完全にハマってしまいました。コマンド操作をするために元に戻す操作自体ができなくなってしまったのです。
しかしエラー文であるcontext requires credentials to be passed as environment variablesで検索しても全然情報が出てきません。
日本語の情報だけでは解決策がなかったのでついに愛用のMacを詰ませてしまったかと覚悟しましたが、英語のstackoverflowにて同じ悩みを抱えている人を発見。その方も情報が少ないことに悩んでいるようでしたが、回答者の1人が解決策を提示していました。。
[Passing environment variables to docker-compose
when using ecs context]
(https://stackoverflow.com/questions/67813708/passing-environment-variables-to-docker-compose-when-using-ecs-context)
解決策
$ AWS_SECRET_ACCESS_KEY=dummy AWS_ACCESS_KEY_ID=dummy AWS_DEFAULT_REGION=dummy docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
myecscontext * ecs credentials read from environment
$ AWS_SECRET_ACCESS_KEY=dummy AWS_ACCESS_KEY_ID=dummy AWS_DEFAULT_REGION=dummy docker context use default
default
$ docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
myecscontext ecs credentials read from environment
$ docker context rm myecscontext
myecscontext
##まとめ
どうやらAWS environment variablesは文字通りAWSの環境変数を直接ターミナルに打ち込んでデプロイ できる仕組みのようでデタラメでも何かしらを環境変数に代入して実行する必要があったようです。
もちろん何がわからないかもわからない状態で操作してしまった私に非がありますが、どう言ったテンプレートで入力するべき状況で起きているエラーなのかを最低限エラーメッセージとして書いていて欲しかったなと感じました。
今の私には自力でこの解決方法にたどり着くことは不可能だったので、私のように時間を取られる人が1人でも減るように共有したいと思います。