【AWS Re:Inventレポート】CON208-R1 - [REPEAT 1] Build your microservices application on AWS Fargate
Build your microservices application on AWS Fargate
Fargateの初心者向けセッションです。
選ぶときに興味のあるトピックであれば、レベル関係なく受けようと思っていたのが良くなかったです。このセッションが4日間で受けたWorkshopのどれよりも簡単で少し物足りない感じがありました。それと疲れが非常に溜まっており体力的に限界だったのもあり、全て終わらせて途中で抜けてきました。
導入
ECS、特にFargateを使う上でどんな利点があるかを説明してくれました。EC2インスタンスを意識する必要が無いとかそんなような説明だったと思います。後は、AWSのプロダクトなので、完全に他のAWSサービスと統合されていてそれが強みとも言っていました。
資料は下記リンクです。
業務で使っているのはawsコマンドですが、Workshopではecs-cliを利用しました。そういえばECS CLIのv2が出るってコンテナワークロードに出てきていたような…?
CloudFormationでクラスターとALB(+TargetGroup)を作成するところからスタートです。
完成したあとの構成は下記。

Workshopの流れ
まずFrontendのRailsのアプリからデプロイしていきます。docker-composeの構文に少し似てますよね。envsubstってなんだろ?って思ったんですが、テンプレートエンジンみたいで、環境変数を埋め込んでくれるようです。普通に使っていきたい。
通常CloudFormationで埋め込むパラメーター周りをecs-cli使うと、コマンド引数に持たせる感じになるようです。ファイルに持たせることも出来るんでしょうか?宣言的じゃないと使うのには躊躇があります。Fargateだと、aws-vpcモードがデフォルトだからか、vpcも指定が必要になってくるようです。自分が注目したのは、--private-dns-namespaceと--enable-service-discoveryです。
cd ~/environment/ecsdemo-frontend
envsubst < ecs-params.yml.template >ecs-params.yml
ecs-cli compose --project-name ecsdemo-frontend service up \
--create-log-groups \
--target-group-arn $target_group_arn \
--private-dns-namespace service \
--enable-service-discovery \
--container-name ecsdemo-frontend \
--container-port 3000 \
--cluster-config container-demo \
--vpc $vpc
ServiceDiscoveryがEnableです。確かECSはRoute53で実現されていたはずと思ってRoute53を見てみます。
Private Hosted Zoneが作成されて、それが--private-dns-namespaceの引数に渡されているものと対応しています。そして、それぞれのタスクがAレコードで入ってきていますね。DNSラウンドロビンで振り分けられる形になるわけです(おそらく…)。ヘルスチェックもRoute53から行われる形になりますね。

恐ろしいことにあとこの作業をただただ2回繰り返します。
最後にローカルでのテスト方法を行います。明快でタスク定義をdocker-compose.yamlにtranlateするコマンドがあるので、それを変換してdocker-composeを起動させるだけです。なんだか物足りない…。
感想
このWorkshopは出なくても良かったかも知れません。結局4日間でExpo行けていないので、もっと早めに切り上げてExpo行くなど柔軟に行動すべきでした。