何がしたいか
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のドキュメントしか読んでいなかったこと
-
HealthCheckConfig
やHealthCheckCustomConfig
のRequired: No
だったから、書いていなかった - 書かなくても、Service Discoveryの設定が行えたので問題ないと思ってしまった
-
参考URLなど