3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Cloud MapをCloudFormationで構築する

Posted at

概要

最近CloudFormationでCloud Mapを構築する機会があったので備忘録。

Cloud Map とは

参考:AWS クラウドマップとは何ですか?

AWS Cloud Map は、アプリケーションが依存するバックエンドサービスとリソースに論理名をマッピングできるフルマネージドソリューションです。また、AWS SDK、RESTful API コール、DNS クエリのいずれかを使用してアプリケーションがリソースを検出する際にも役立ちます。AWS Cloud Map は、Amazon DynamoDB (DynamoDB) テーブル、Amazon Simple Queue Service (Amazon SQS) キュー、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは Amazon Elastic Container Service (Amazon ECS) タスクを使用して構築された高レベルアプリケーションサービスなど、正常なリソースのみを提供します。

とりあえず以下のBlack Beltを見ておけばOK。
AWS Cloud Map 入門【AWS Black Belt】

また、以下の記事でも分かりやすく解説されている。
【AWS】マイクロサービスを支える2つのサービス(AWS Cloud Map編)

CFnテンプレート

cloudmap.ymlでは、AWS::ServiceDiscovery::PrivateDnsNamespaceとAWS::ServiceDiscovery::Serviceを作成する。AWS::ServiceDiscovery::PrivateDnsNamespaceはRoute 53のプライベートホストゾーンが作成される。

ecs.yml側ではAWS::ECS::ServiceでServiceRegistriesを設定する。

cloudmap.yml
AWSTemplateFormatVersion: 2010-09-09
Description: Template for Cloud Map

Parameters:
  ProjectName:
    Type: String
  Env:
    Type: String
  DomainName:
    Type: String

Resources:
  # Route53 ホストゾーンが作られる
  PrivateDnsNamespace:
    Type: AWS::ServiceDiscovery::PrivateDnsNamespace
    Properties:
      Name: !Sub ${DomainName}
      Description: !Sub ${ProjectName}-${Env}-servicediscovery-private-namespace
      Vpc:
        Fn::ImportValue: !Sub ${ProjectName}-${Env}-vpc-id
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${Env}-ecs-service-db
        - Key: ProjectName
          Value: !Sub ${ProjectName}
        - Key: Env
          Value: !Sub ${Env}

  ServiceDB:
    Type: AWS::ServiceDiscovery::Service
    Properties:
      Name: db # 本プロパティ+ドメイン名でレコード登録される
      DnsConfig:
        DnsRecords:
          - Type: A
            TTL: 60
        NamespaceId: !Sub ${PrivateDnsNamespace.Id}

Outputs:
  ServiceDBArn:
    Value: !Sub ${ServiceDB.Arn}
    Export:
      Name: !Sub ${ProjectName}-${Env}-servicediscovery-service-db-arn

ecs.yml
  # ECS Service
  ECSService:
    Type: AWS::ECS::Service
    Properties:
      ServiceName: !Sub ${ProjectName}-${Env}-ecs-service-db
      Cluster:
        Fn::ImportValue: !Sub ${ProjectName}-${Env}-ecs-cluster-name
      TaskDefinition: !Sub ${ECSTaskDefinition}
      DesiredCount: !Sub ${ECSTaskDesiredCount}
      DeploymentController:
        Type: ECS
      LaunchType: FARGATE
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: DISABLED
          SecurityGroups:
            - Fn::ImportValue: !Sub ${ProjectName}-${Env}-sg-ecs-db-id
          Subnets:
            - Fn::ImportValue: !Sub ${ProjectName}-${Env}-subnet-private-a1-id
      ServiceRegistries: # ここにAWS::ServiceDiscovery::ServiceのARNを指定する
        - RegistryArn:
            Fn::ImportValue: !Sub ${ProjectName}-${Env}-servicediscovery-service-db-arn
      EnableExecuteCommand: !Sub ${IsEnableExecuteCommand}
      PropagateTags: TASK_DEFINITION
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${Env}-ecs-service-db
        - Key: ProjectName
          Value: !Sub ${ProjectName}
        - Key: Env
          Value: !Sub ${Env}

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?