AWS
CloudFormation
route53
ECS

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 CoreNamespace.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