omuronの備忘録

個人的な備忘録

docker ecs コマンドを試す

docker ecs なるものが発表されて話題になってたので試してみたときの備忘録です。

aws.amazon.com

www.docker.com

GitHub にサンプルがあるので、まずは fork して試してみました。

github.com

Docker Edge

hub.docker.com

Get Edge を取得してインストールします。
これ説明をちゃんと読まずに入れた後に気がついたのですが、ローカルのコンテナイメージが全部消えてしまいます。
別の作業をしようとしたときに、「あれ、イメージがない...」となって気が付きました。

サンプル試す

GitHub サンプルローカル起動

GitHub のサンプルを試してみます。

$ git clone git@github.com:omuron/ecs-plugin.git
$ cd ecs-plugin/example/
$ docker-compose up
ERROR: no such image: <<<your docker hub user name>>>/timestamper: invalid reference format

とりあえず、サンプルをローカルで起動しようとすると、上記のエラーが発生します。
そのため docker-compose.yml の 5,6行目をコメントアウトして起動を確認しました。 無事に起動できれば、以下の URL で「Hello, Docker Folks!」という画面が確認できます。
http://localhost:5000/

f:id:omron:20200727203337p:plain

docker ecs コマンド思考錯誤

引き続き、 docker ecs コマンドを試しました。

$ docker ecs setup
Enter context name: aws
✔ docker-ecs-user
? Enter region: ap-northeast-1
? Enter credentials? [y/N] N
this tool requires the "new ARN resource ID format"

上記のエラーが発生...
ここでどう直せばいいかわからず解決できなかったところ、ハマコーさんブログで解説記事がでました!

dev.classmethod.jp

上記のブログより、以下のコマンドで解決ができることがわかりました。

aws ecs put-account-setting-default --name awsvpcTrunking --value enabled
aws ecs put-account-setting-default --name containerInsights --value enabled
aws ecs put-account-setting-default --name containerInstanceLongArnFormat --value enabled
aws ecs put-account-setting-default --name serviceLongArnFormat --value enabled
aws ecs put-account-setting-default --name taskLongArnFormat --value enabled

上記設定後、無事 docker ecs setup が完了し、 context に追加されていることが確認できます。

$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
aws                 aws                                                                                                               
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm

ここからは、ハマコーさんの神記事があるので、真似して 参考にして進めました。

docker hub アカウント設定

以下のコマンドでログイン。

$ docker login --username omuron

README も読みながら、アクセストークンの設定を aws シークレットマネージャーに行う。

$ docker ecs secret create dockerhubAccessToken --username omuron --password XXXXX
can't use "default" with ECS command because it is not an AWS context

コンテキストを切り替えないとダメでしたので、切り替えて設定。

$ docker context use aws
aws

$ docker ecs secret create dockerhubAccessToken --username omuron --password XXXXX
arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:dockerhubAccessToken-45Y3pu

上記の arndocker-compose.yml の 5行目に設定を行う。
6行目は、docker hub のアカウント omuron を設定。

ここで作成したリソースは以下の URL に当たるマネジメントコンソールで確認可能です。
https://ap-northeast-1.console.aws.amazon.com/secretsmanager/home?region=ap-northeast-1#/listSecrets

起動確認

事前準備が完了したので、以下のコマンドで起動可能。

$ docker ecs compose up

CloudFormation を確認すると example という名前のスタックが作成されて、関係リソースが構築されているのが確認できる。
EC2 内のロードバランサーメニューを確認すると、新たにロードバランサーが作成されているので、ロードバランサーDNS 名をコピーして、ポート 5000 にアクセスすると、ローカル起動と同様のサイトが確認できました。
http://exampleloadbalancer-999999999999.elb.ap-northeast-1.amazonaws.com:5000/

後始末

docker compose を落とすと削除できます。

$ docker ecs compose down

所感

最後までたどり着けたのは、ハマコーさんブログのおかげです。 本当に、ECS 含め参考になることが多いので助かります。

先日出た aws copilot に続き、 ECS を簡単に試す手段が増えてきていいですね。
CoudFormation 含め、ECS 全般を理解してないと難しい部分もありますが、ある程度把握した上で利用するととても助かるツールになりそうです。

あと、アプリを入れるときには英語でもちゃんと説明を読みましょう。 読まずに入れると、環境を壊します... 環境を壊すのがいやで、Docker 上に構築するのを基本にしてたのに、Docker 環境をふっとばしてしまいました。