Edited at

ECSのService DiscoveryをCloudformationで組んだときに躓いた


何がしたいか

AWSのECSでRoute53 Auto namingを利用したService Discoveryの設定を、Cloudfromationで組みたい

Service DiscoveryのHosted zoneにはPrivate DNSを使いたい


躓いたポイント

ECS Serviceでコンテナ(Task)が起動し続けてくれなかった

そのため、いつまで経ってもCloudformationのStatusがCREATE_COMPLETEにならなかった


どう解決したか

Route53のTemplateにHealthCheckCustomConfigが必要だった

これがなくともAWS::ServiceDiscovery::PrivateDnsNamespaceは作成できてしまうので、すぐに気づけなかった

といっても、コンテナが起動し続けなかったのでHealthCheckに失敗しているんだろうな、とは薄々感じていた

以下、サンプル。

これで作成された"AWS::ServiceDiscovery::Service"のARNを、ECS Serviceで使用する

AWSTemplateFormatVersion: 2010-09-09

Resources:
Namespace:
Type: "AWS::ServiceDiscovery::PrivateDnsNamespace"
Properties:
Vpc: xxxxxxxxxx
Name: private.example.

ServiceDiscovery:
Type: "AWS::ServiceDiscovery::Service"
Properties:
HealthCheckCustomConfig:
FailureThreshold: 1
DnsConfig:
DnsRecords:
- Type: A
TTL: 60
NamespaceId: !GetAtt Namespace.Id
Name: hoge


反省点



  • Cloudformationのドキュメントしか読んでいなかったこと



    • HealthCheckConfigHealthCheckCustomConfigRequired: Noだったから、書いていなかった

    • 書かなくても、Service Discoveryの設定が行えたので問題ないと思ってしまった




参考URLなど

https://medium.com/pablo-perez/ecs-service-discovery-to-work-around-lack-of-user-defined-bridge-network-ecs-limitation-6fa6b9672d84