AWSTemplateFormatVersion: 2010-09-09
Resources:
  CloudMap:
    Properties:
      Description: Service Map for Docker Compose project TestSimpleConvert
      Name: TestSimpleConvert.local
      Vpc: vpc-123
    Type: AWS::ServiceDiscovery::PrivateDnsNamespace
  Cluster:
    Properties:
      ClusterName: TestSimpleConvert
      Tags:
      - Key: com.docker.compose.project
        Value: TestSimpleConvert
    Type: AWS::ECS::Cluster
  Default80Ingress:
    Properties:
      CidrIp: 0.0.0.0/0
      Description: simple:80/tcp on default network
      FromPort: 80
      GroupId:
        Ref: DefaultNetwork
      IpProtocol: TCP
      ToPort: 80
    Type: AWS::EC2::SecurityGroupIngress
  DefaultNetwork:
    Properties:
      GroupDescription: TestSimpleConvert Security Group for default network
      Tags:
      - Key: com.docker.compose.project
        Value: TestSimpleConvert
      - Key: com.docker.compose.network
        Value: TestSimpleConvert_default
      VpcId: vpc-123
    Type: AWS::EC2::SecurityGroup
  DefaultNetworkIngress:
    Properties:
      Description: Allow communication within network default
      GroupId:
        Ref: DefaultNetwork
      IpProtocol: "-1"
      SourceSecurityGroupId:
        Ref: DefaultNetwork
    Type: AWS::EC2::SecurityGroupIngress
  LoadBalancer:
    Properties:
      Scheme: internet-facing
      SecurityGroups:
      - Ref: DefaultNetwork
      Subnets:
      - subnet1
      - subnet2
      Tags:
      - Key: com.docker.compose.project
        Value: TestSimpleConvert
      Type: application
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
  LogGroup:
    Properties:
      LogGroupName: /docker-compose/TestSimpleConvert
    Type: AWS::Logs::LogGroup
  SimpleService:
    DependsOn:
    - SimpleTCP80Listener
    Properties:
      Cluster:
        Fn::GetAtt:
        - Cluster
        - Arn
      DeploymentConfiguration:
        MaximumPercent: 200
        MinimumHealthyPercent: 100
      DeploymentController:
        Type: ECS
      DesiredCount: 1
      LaunchType: FARGATE
      LoadBalancers:
      - ContainerName: simple
        ContainerPort: 80
        TargetGroupArn:
          Ref: SimpleTCP80TargetGroup
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED
          SecurityGroups:
          - Ref: DefaultNetwork
          Subnets:
          - subnet1
          - subnet2
      PlatformVersion: 1.4.0
      PropagateTags: SERVICE
      SchedulingStrategy: REPLICA
      ServiceRegistries:
      - RegistryArn:
          Fn::GetAtt:
          - SimpleServiceDiscoveryEntry
          - Arn
      Tags:
      - Key: com.docker.compose.project
        Value: TestSimpleConvert
      - Key: com.docker.compose.service
        Value: simple
      TaskDefinition:
        Ref: SimpleTaskDefinition
    Type: AWS::ECS::Service
  SimpleServiceDiscoveryEntry:
    Properties:
      Description: '"simple" service discovery entry in Cloud Map'
      DnsConfig:
        DnsRecords:
        - TTL: 60
          Type: A
        RoutingPolicy: MULTIVALUE
      HealthCheckCustomConfig:
        FailureThreshold: 1
      Name: simple
      NamespaceId:
        Ref: CloudMap
    Type: AWS::ServiceDiscovery::Service
  SimpleTCP80Listener:
    Properties:
      DefaultActions:
      - ForwardConfig:
          TargetGroups:
          - TargetGroupArn:
              Ref: SimpleTCP80TargetGroup
        Type: forward
      LoadBalancerArn:
        Ref: LoadBalancer
      Port: 80
      Protocol: HTTP
    Type: AWS::ElasticLoadBalancingV2::Listener
  SimpleTCP80TargetGroup:
    Properties:
      Port: 80
      Protocol: HTTP
      Tags:
      - Key: com.docker.compose.project
        Value: TestSimpleConvert
      TargetType: ip
      VpcId: vpc-123
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
  SimpleTaskDefinition:
    Properties:
      ContainerDefinitions:
      - Command:
        - .compute.internal
        - TestSimpleConvert.local
        Essential: false
        Image: docker/ecs-searchdomain-sidecar:1.0
        LogConfiguration:
          LogDriver: awslogs
          Options:
            awslogs-group:
              Ref: LogGroup
            awslogs-region:
              Ref: AWS::Region
            awslogs-stream-prefix: TestSimpleConvert
        Name: Simple_ResolvConf_InitContainer
      - DependsOn:
        - Condition: SUCCESS
          ContainerName: Simple_ResolvConf_InitContainer
        Essential: true
        Image: nginx
        LinuxParameters: {}
        LogConfiguration:
          LogDriver: awslogs
          Options:
            awslogs-group:
              Ref: LogGroup
            awslogs-region:
              Ref: AWS::Region
            awslogs-stream-prefix: TestSimpleConvert
        Name: simple
        PortMappings:
        - ContainerPort: 80
          HostPort: 80
          Protocol: tcp
      Cpu: "256"
      ExecutionRoleArn:
        Ref: SimpleTaskExecutionRole
      Family: TestSimpleConvert-simple
      Memory: "512"
      NetworkMode: awsvpc
      RequiresCompatibilities:
      - FARGATE
    Type: AWS::ECS::TaskDefinition
  SimpleTaskExecutionRole:
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Action:
          - sts:AssumeRole
          Condition: {}
          Effect: Allow
          Principal:
            Service: ecs-tasks.amazonaws.com
        Version: 2012-10-17
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
      - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
      Tags:
      - Key: com.docker.compose.project
        Value: TestSimpleConvert
      - Key: com.docker.compose.service
        Value: simple
    Type: AWS::IAM::Role

