ちょっと話題の記事

Docker ComposeによるAmazon ECS対応がGAに!コンテナをローカル環境と同じノリでECS環境で起動できるぞ!!

DockerがAmazon ECSに対応し、Docker Composeを用いてECSクラスター上でコンテナを起動できるようになりました。以前から対応が進んでいましたが、今回晴れてGAに! これでAmazon ECSを用いたアプリケーション開発や動作確認が簡単にできる!
2020.11.30

コンサル部のtobachi(@toda_kk)です。

先日、Docker ComposeによるAmazon ECS対応がGAになりました!

  • AWSによるアナウンス

  • Dockerによるアナウンス

本ブログでも過去に記事がでていましたが、Dockerでは以前からAmazon ECS対応が進んでおりdocker ecsというコマンドがベータ版として提供されていました。

何ができるのか

今回は装いを新たにdocker composeというコマンドで、Amazon ECSでクラスターを作成しコンテナを実行できるようになったようです。

$ docker context create ecs ${context-name}
$ docker context use ${context-name}
$ docker compose up

これだけです。もちろん事前にAWSアカウントの認証情報を用意しておく必要はありますが、たったこれだけでECSクラスターが作成されコンテナイメージがFargateで立ち上がります。意味がわからん。

作成されたクラスターを落とすときもdocker compose downでOKです。どういうことなの……。

何が起こっているのか

さて、docker compose upを実行したとき、AWSリソース上ではいったい何が起こっているのでしょうか? 公式のドキュメントを確認してみましょう。

This is what happened behind the scenes:

- You docker compose up and Docker reads the docker-compose.yaml

- Docker converts the original compose file on the fly into an AWS CloudFormation template

- Docker deploys the CloudFormation template on AWS

実態としては、CloudFormationのスタックを作成しています。 "docker-compose.yml" の内容を元にDockerが良い感じに変換し、テンプレートを作成しているようです。便利すぎる!

何に使えるのか

AWSの公式アナウンスにもあるように、コンテナをFargateでサッと立ち上げてEFSやSQSといった他のAWSリソースと連携させることができます。Fargateを軽いノリで立ち上げられるので、ちょっとした処理を動かすのにもAmazon ECSで実行するという選択肢も出てくるでしょう。

また、こうなるとローカル環境でdocker-composeを使ってコンテナを立ち上げるのと同じノリで、ECS環境で立ち上げることができます。

例えば、アプリケーション開発において動作確認の際にAWSリソース上でコンテナを動かしてみたい、というシーンもあるかと思います。そういった、アプリケーション開発者が自分でAmazon ECS環境を構築し、サッとコンテナを動かす、ということが簡単にできるようになるのではないでしょうか。

AWSおよびDockerの公式ドキュメントによれば、 "docker-compose.yml" のパラメーターとしてx-aws-*を記述しておくと、利用するAWSリソースを指定することもできるようです。

Roadmapも公開されており、今後も開発が進んでいきそうです。より細かい設定ができるようになり、さまざまなユースケースに応用が効くようになることを期待しています。

他のデプロイツールとの組み合わせ

すでに投稿した記事でも紹介しましたが、実はほぼ同じタイミングで、AWS CopilotというAmazon ECSの新たなデプロイツールがGAになりました。

詳細はこちらの記事を参照していただきたいのですが、AWS Copilotを使うことでECS環境を簡単に構築できます。 "Environment" という形で複数の環境を簡単に構築できるので、Production環境の他に、開発のフェーズに合わせたECS環境を気軽に作成することができます。

AWS Copilotをはじめ、他のデプロイツールと組み合わせることでDocker Composeをより便利に使うことができるのではないでしょうか。

例えば、AWS Copilotを用いて開発時の動作確認用の環境(Environment)を作成することでVPC/Subnetといったネットワーク環境やECSクラスターを用意しておき、アプリケーション開発者は "docker-compose.yml" でデプロイ先を指定することで開発中のアプリケーションのコンテナをECS環境で動作確認できるようにする、といった運用も考えられるでしょう。

これができたらかなりアツい。AWSリソースの管理者にとっても、アプリケーション開発者にとっても、楽しい未来が実現できそうですね!

コンテナオーケストレーションのツールとしてKubernetesも面白いですが、Amazon ECSも引き続きどんどん面白くなっていきそうです。

以上、コンサル部のtobachi(@toda_kk)でした。