1
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?

More than 5 years have passed since last update.

AWS Cloud Development Kitをためしてみる (Typescript)

Last updated at Posted at 2018-11-23

AWS Cloud Development Kitを試してみます。ここではgithubに用意されたサンプルを動かしてみます。
サンプルにある、aws-cdk/examples/cdk-examples-typescript/hello-cdk-ecs/index.tsが39行なのに対して、テンプレートに変換すると798行なのでかなりコード量が少なくて住むことは確かですね。

参考

https://github.com/awslabs/aws-cdk
https://awslabs.github.io/aws-cdk/

Getting started
https://awslabs.github.io/aws-cdk/getting-started.html

コードの書き方
https://awslabs.github.io/aws-cdk/reference.html

前提

$ node -v
v10.0.0

事前

aws-cdkインストール

$ npm install -g aws-cdk
/Users/atsum/.nodebrew/node/v10.0.0/bin/cdk -> /Users/atsum/.nodebrew/node/v10.0.0/lib/node_modules/aws-cdk/bin/cdk
+ aws-cdk@0.18.1
updated 1 package in 17.502s
$ cdk --version
0.18.1 (build 9f7af21)

プロジェクト作成

$ mkdir hello-world
$ cd hello-world/
$ git init
Initialized empty Git repository in /Users/atsum/Work/cdk/hello-cdk/hello-world/.git/
$ npm init -y
Wrote to /Users/atsum/Work/cdk/hello-cdk/hello-world/package.json:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
$ emacs tsconfig.json
$ cat tsconfig.json 
{
    "compilerOptions": {
        "target": "es2018",
        "module": "commonjs"
    }
}
$ emacs package.json 
{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
        "build": "tsc",
        "watch": "tsc -w"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-cdk/cdk": "^0.18.1",
    "@aws-cdk/aws-ec2": "^0.18.1",
    "@aws-cdk/aws-ecs": "^0.18.1"
  }
}
$ npm install
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN hello-world@1.0.0 No description
npm WARN hello-world@1.0.0 No repository field.

added 36 packages in 6.235s
$ emacs cdk.json 
{
  "app": "node index.js"
}

exampleを動かす

$ git clone https://github.com/awslabs/aws-cdk.git
Cloning into 'aws-cdk'...
remote: Enumerating objects: 366, done.
remote: Counting objects: 100% (366/36

内容

$ cat aws-cdk/examples/cdk-examples-typescript/hello-cdk-ecs/index.ts 

import ec2 = require('@aws-cdk/aws-ec2');
import { InstanceType } from '@aws-cdk/aws-ec2';
import ecs = require('@aws-cdk/aws-ecs');
import cdk = require('@aws-cdk/cdk');

class BonjourECS extends cdk.Stack {
  constructor(parent: cdk.App, name: string, props?: cdk.StackProps) {
    super(parent, name, props);

    // For better iteration speed, it might make sense to put this VPC into
    // a separate stack and import it here. We then have two stacks to
    // deploy, but VPC creation is slow so we'll only have to do that once
    // and can iterate quickly on consuming stacks. Not doing that for now.
    const vpc = new ec2.VpcNetwork(this, 'MyVpc', { maxAZs: 2 });
    const cluster = new ecs.Cluster(this, 'Ec2Cluster', { vpc });
    cluster.addDefaultAutoScalingGroupCapacity({
      instanceType: new InstanceType("t2.xlarge"),
      instanceCount: 3,
    });

    // Instantiate ECS Service with just cluster and image
    const ecsService = new ecs.LoadBalancedEc2Service(this, "Ec2Service", {
      cluster,
      memoryLimitMiB: 512,
      image: ecs.ContainerImage.fromDockerHub("amazon/amazon-ecs-sample"),
    });

    // ecsService.addTracing

    // Output the DNS where you can access your service
    new cdk.Output(this, 'LoadBalancerDNS', { value: ecsService.loadBalancer.dnsName });
  }
}

const app = new cdk.App();

new BonjourECS(app, 'Bonjour');

app.run();
cp aws-cdk/examples/cdk-examples-typescript/hello-cdk-ecs/index.ts .

ビルド

$ npm run build

> hello-world@1.0.0 build /Users/atsum/Work/cdk/hello-cdk/hello-world
> tsc

テンプレートを作成してみる

$ cdk list
Bonjour
$ cdk synth Bonjour
Resources:
  MyVpcF9F0CA6F:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/Resource
  MyVpcPublicSubnet1SubnetF6608456:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.0.0/18
      VpcId:
        Ref: MyVpcF9F0CA6F
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PublicSubnet1
        - Key: aws-cdk:subnet-name
          Value: Public
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet1/Subnet
  MyVpcPublicSubnet1RouteTableC46AB2F4:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: MyVpcF9F0CA6F
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PublicSubnet1
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet1/RouteTable
  MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: MyVpcPublicSubnet1RouteTableC46AB2F4
      SubnetId:
        Ref: MyVpcPublicSubnet1SubnetF6608456
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet1/RouteTableAssociation
  MyVpcPublicSubnet1DefaultRoute95FDF9EB:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: MyVpcPublicSubnet1RouteTableC46AB2F4
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: MyVpcIGW5C4A4F63
    DependsOn:
      - MyVpcVPCGW488ACE0D
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet1/DefaultRoute
  MyVpcPublicSubnet1EIP096967CB:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet1/EIP
  MyVpcPublicSubnet1NATGatewayAD3400C1:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - MyVpcPublicSubnet1EIP096967CB
          - AllocationId
      SubnetId:
        Ref: MyVpcPublicSubnet1SubnetF6608456
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PublicSubnet1
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet1/NATGateway
  MyVpcPublicSubnet2Subnet492B6BFB:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.64.0/18
      VpcId:
        Ref: MyVpcF9F0CA6F
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PublicSubnet2
        - Key: aws-cdk:subnet-name
          Value: Public
        - Key: aws-cdk:subnet-type
          Value: Public
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet2/Subnet
  MyVpcPublicSubnet2RouteTable1DF17386:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: MyVpcF9F0CA6F
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PublicSubnet2
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet2/RouteTable
  MyVpcPublicSubnet2RouteTableAssociation227DE78D:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: MyVpcPublicSubnet2RouteTable1DF17386
      SubnetId:
        Ref: MyVpcPublicSubnet2Subnet492B6BFB
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet2/RouteTableAssociation
  MyVpcPublicSubnet2DefaultRoute052936F6:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: MyVpcPublicSubnet2RouteTable1DF17386
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: MyVpcIGW5C4A4F63
    DependsOn:
      - MyVpcVPCGW488ACE0D
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet2/DefaultRoute
  MyVpcPublicSubnet2EIP8CCBA239:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet2/EIP
  MyVpcPublicSubnet2NATGateway91BFBEC9:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId:
        Fn::GetAtt:
          - MyVpcPublicSubnet2EIP8CCBA239
          - AllocationId
      SubnetId:
        Ref: MyVpcPublicSubnet2Subnet492B6BFB
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PublicSubnet2
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PublicSubnet2/NATGateway
  MyVpcPrivateSubnet1Subnet5057CF7E:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.128.0/18
      VpcId:
        Ref: MyVpcF9F0CA6F
      AvailabilityZone: ap-northeast-1a
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PrivateSubnet1
        - Key: aws-cdk:subnet-name
          Value: Private
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet1/Subnet
  MyVpcPrivateSubnet1RouteTable8819E6E2:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: MyVpcF9F0CA6F
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PrivateSubnet1
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet1/RouteTable
  MyVpcPrivateSubnet1RouteTableAssociation56D38C7E:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: MyVpcPrivateSubnet1RouteTable8819E6E2
      SubnetId:
        Ref: MyVpcPrivateSubnet1Subnet5057CF7E
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet1/RouteTableAssociation
  MyVpcPrivateSubnet1DefaultRouteA8CDE2FA:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: MyVpcPrivateSubnet1RouteTable8819E6E2
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: MyVpcPublicSubnet1NATGatewayAD3400C1
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet1/DefaultRoute
  MyVpcPrivateSubnet2Subnet0040C983:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.192.0/18
      VpcId:
        Ref: MyVpcF9F0CA6F
      AvailabilityZone: ap-northeast-1c
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PrivateSubnet2
        - Key: aws-cdk:subnet-name
          Value: Private
        - Key: aws-cdk:subnet-type
          Value: Private
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet2/Subnet
  MyVpcPrivateSubnet2RouteTableCEDCEECE:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId:
        Ref: MyVpcF9F0CA6F
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc/PrivateSubnet2
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet2/RouteTable
  MyVpcPrivateSubnet2RouteTableAssociation86A610DA:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId:
        Ref: MyVpcPrivateSubnet2RouteTableCEDCEECE
      SubnetId:
        Ref: MyVpcPrivateSubnet2Subnet0040C983
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet2/RouteTableAssociation
  MyVpcPrivateSubnet2DefaultRoute9CE96294:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId:
        Ref: MyVpcPrivateSubnet2RouteTableCEDCEECE
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: MyVpcPublicSubnet2NATGateway91BFBEC9
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/PrivateSubnet2/DefaultRoute
  MyVpcIGW5C4A4F63:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: Bonjour/MyVpc
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/IGW
  MyVpcVPCGW488ACE0D:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId:
        Ref: MyVpcF9F0CA6F
      InternetGatewayId:
        Ref: MyVpcIGW5C4A4F63
    Metadata:
      aws:cdk:path: Bonjour/MyVpc/VPCGW
  Ec2ClusterEE43E89D:
    Type: AWS::ECS::Cluster
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/Resource
  Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup
      SecurityGroupEgress:
        - CidrIp: 0.0.0.0/0
          Description: Allow all outbound traffic by default
          IpProtocol: "-1"
      SecurityGroupIngress:
        []
      Tags:
        - Key: Name
          Value: Bonjour/Ec2Cluster/DefaultAutoScalingGroup
      VpcId:
        Ref: MyVpcF9F0CA6F
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup/Resource
  Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroupfromBonjourEc2ServiceLBSecurityGroup2185A60D3276865535EC4EE766:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      IpProtocol: tcp
      Description: Load balancer to target
      FromPort: 32768
      GroupId:
        Fn::GetAtt:
          - Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E
          - GroupId
      SourceSecurityGroupId:
        Fn::GetAtt:
          - Ec2ServiceLBSecurityGroup45FED6DF
          - GroupId
      ToPort: 65535
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup/from
        BonjourEc2ServiceLBSecurityGroup2185A60D:32768-65535
  Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
        Version: "2012-10-17"
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/InstanceRole/Resource
  Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - ecs:CreateCluster
              - ecs:DeregisterContainerInstance
              - ecs:DiscoverPollEndpoint
              - ecs:Poll
              - ecs:RegisterContainerInstance
              - ecs:StartTelemetrySession
              - ecs:Submit*
              - ecr:GetAuthorizationToken
              - logs:CreateLogStream
              - logs:PutLogEvents
            Effect: Allow
            Resource: "*"
        Version: "2012-10-17"
      PolicyName: Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD
      Roles:
        - Ref: Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/InstanceRole/DefaultPolicy/Resource
  Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
        - Ref: Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/InstanceProfile
  Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A:
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      ImageId: ami-05b296a384694dfa4
      InstanceType: t2.xlarge
      IamInstanceProfile:
        Ref: Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471
      SecurityGroups:
        - Fn::GetAtt:
            - Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E
            - GroupId
      UserData:
        Fn::Base64:
          Fn::Join:
            - ""
            - - |-
                #!/bin/bash
                echo ECS_CLUSTER=
              - Ref: Ec2ClusterEE43E89D
              - >-2
                 >> /etc/ecs/ecs.config
                sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

                sudo service iptables save

                echo ECS_AWSVPC_BLOCK_IMDS=true >> /etc/ecs/ecs.config
    DependsOn:
      - Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898
      - Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/LaunchConfig
  Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      MaxSize: "3"
      MinSize: "1"
      DesiredCapacity: "3"
      LaunchConfigurationName:
        Ref: Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A
      Tags:
        - Key: Name
          PropagateAtLaunch: true
          Value: Bonjour/Ec2Cluster/DefaultAutoScalingGroup
      VPCZoneIdentifier:
        - Ref: MyVpcPrivateSubnet1Subnet5057CF7E
        - Ref: MyVpcPrivateSubnet2Subnet0040C983
    UpdatePolicy:
      AutoScalingReplacingUpdate:
        WillReplace: true
      AutoScalingScheduledAction:
        IgnoreUnmodifiedGroupSizeProperties: true
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/ASG
  Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F:
    Type: AWS::SNS::Topic
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic/Resource
  Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopicFunctionSubscription5FABD83E:
    Type: AWS::SNS::Subscription
    Properties:
      Endpoint:
        Fn::GetAtt:
          - Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31
          - Arn
      Protocol: lambda
      TopicArn:
        Ref: Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic/FunctionSubscription/Resource
  Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
        Version: "2012-10-17"
      ManagedPolicyArns:
        - Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - :iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole/Resource
  Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - autoscaling:CompleteLifecycleAction
              - ec2:DescribeInstances
              - ec2:DescribeInstanceAttribute
              - ec2:DescribeInstanceStatus
              - ec2:DescribeHosts
            Effect: Allow
            Resource: "*"
          - Action:
              - ecs:ListContainerInstances
              - ecs:SubmitContainerStateChange
              - ecs:SubmitTaskStateChange
              - ecs:DescribeContainerInstances
              - ecs:UpdateContainerInstancesState
              - ecs:ListTasks
              - ecs:DescribeTasks
            Effect: Allow
            Resource: "*"
        Version: "2012-10-17"
      PolicyName: Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33
      Roles:
        - Ref: Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole/DefaultPolicy/Resource
  Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        ZipFile: >
          import boto3, json, os, time


          ecs = boto3.client('ecs')

          autoscaling = boto3.client('autoscaling')



          def lambda_handler(event, context):
            print(json.dumps(event))
            cluster = os.environ['CLUSTER']
            snsTopicArn = event['Records'][0]['Sns']['TopicArn']
            lifecycle_event = json.loads(event['Records'][0]['Sns']['Message'])
            instance_id = lifecycle_event.get('EC2InstanceId')
            if not instance_id:
              print('Got event without EC2InstanceId: %s', json.dumps(event))
              return

            instance_arn = container_instance_arn(cluster, instance_id)
            print('Instance %s has container instance ARN %s' % (lifecycle_event['EC2InstanceId'], instance_arn))

            if not instance_arn:
              return

            while has_tasks(cluster, instance_arn):
              time.sleep(10)

            try:
              print('Terminating instance %s' % instance_id)
              autoscaling.complete_lifecycle_action(
                  LifecycleActionResult='CONTINUE',
                  **pick(lifecycle_event, 'LifecycleHookName', 'LifecycleActionToken', 'AutoScalingGroupName'))
            except Exception as e:
              # Lifecycle action may have already completed.
              print(str(e))


          def container_instance_arn(cluster, instance_id):
            """Turn an instance ID into a container instance ARN."""
            arns = ecs.list_container_instances(cluster=cluster, filter='ec2InstanceId==' + instance_id)['containerInstanceArns']
            if not arns:
              return None
            return arns[0]


          def has_tasks(cluster, instance_arn):
            """Return True if the instance is running tasks for the given cluster."""
            instances = ecs.describe_container_instances(cluster=cluster, containerInstances=[instance_arn])['containerInstances']
            if not instances:
              return False
            instance = instances[0]

            if instance['status'] == 'ACTIVE':
              # Start draining, then try again later
              set_container_instance_to_draining(cluster, instance_arn)
              return True

            tasks = instance['runningTasksCount'] + instance['pendingTasksCount']
            print('Instance %s has %s tasks' % (instance_arn, tasks))

            return tasks > 0


          def set_container_instance_to_draining(cluster, instance_arn):
            ecs.update_container_instances_state(
                cluster=cluster,
                containerInstances=[instance_arn], status='DRAINING')


          def pick(dct, *keys):
            """Pick a subset of a dict."""
            return {k: v for k, v in dct.items() if k in keys}
      Handler: index.lambda_handler
      Role:
        Fn::GetAtt:
          - Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3
          - Arn
      Runtime: python3.6
      Environment:
        Variables:
          CLUSTER:
            Ref: Ec2ClusterEE43E89D
      Timeout: 310
    DependsOn:
      - Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3
      - Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/Resource
  Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic6C30136B:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName:
        Ref: Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31
      Principal: sns.amazonaws.com
      SourceArn:
        Ref: Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/Topic
  Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: autoscaling.amazonaws.com
        Version: "2012-10-17"
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role/Resource
  Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Statement:
          - Action: sns:Publish
            Effect: Allow
            Resource:
              Ref: Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F
        Version: "2012-10-17"
      PolicyName: Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B
      Roles:
        - Ref: Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role/DefaultPolicy/Resource
  Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName:
        Ref: Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      DefaultResult: CONTINUE
      HeartbeatTimeout: 300
      NotificationTargetARN:
        Ref: Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F
      RoleARN:
        Fn::GetAtt:
          - Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7
          - Arn
    DependsOn:
      - Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7
      - Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B
    Metadata:
      aws:cdk:path: Bonjour/Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Resource
  Ec2ServiceTaskDefTaskRole27A5D642:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: ecs-tasks.amazonaws.com
        Version: "2012-10-17"
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/TaskDef/TaskRole/Resource
  Ec2ServiceTaskDef8D94BAA3:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ContainerDefinitions:
        - Essential: true
          Image: amazon/amazon-ecs-sample
          Links:
            []
          LinuxParameters:
            Capabilities:
              Add:
                []
              Drop:
                []
            Devices:
              []
            Tmpfs:
              []
          Memory: 512
          MountPoints:
            []
          Name: web
          PortMappings:
            - ContainerPort: 80
              HostPort: 0
              Protocol: tcp
          Ulimits:
            []
          VolumesFrom:
            []
      Family: BonjourEc2ServiceTaskDef2C3EE7C1
      NetworkMode: bridge
      PlacementConstraints:
        []
      RequiresCompatibilities:
        - EC2
      TaskRoleArn:
        Fn::GetAtt:
          - Ec2ServiceTaskDefTaskRole27A5D642
          - Arn
      Volumes:
        []
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/TaskDef/Resource
  Ec2Service398F0E46:
    Type: AWS::ECS::Service
    Properties:
      TaskDefinition:
        Ref: Ec2ServiceTaskDef8D94BAA3
      Cluster:
        Ref: Ec2ClusterEE43E89D
      DeploymentConfiguration:
        MaximumPercent: 200
        MinimumHealthyPercent: 50
      DesiredCount: 1
      LaunchType: EC2
      LoadBalancers:
        - ContainerName: web
          ContainerPort: 80
          TargetGroupArn:
            Ref: Ec2ServiceLBPublicListenerECSGroup3DC8690E
      PlacementConstraints:
        []
      PlacementStrategies:
        []
      SchedulingStrategy: REPLICA
    DependsOn:
      - Ec2ServiceLBPublicListenerA941070C
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/Service/Service
  Ec2ServiceLB381329CE:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      LoadBalancerAttributes:
        []
      Scheme: internet-facing
      SecurityGroups:
        - Fn::GetAtt:
            - Ec2ServiceLBSecurityGroup45FED6DF
            - GroupId
      Subnets:
        - Ref: MyVpcPublicSubnet1SubnetF6608456
        - Ref: MyVpcPublicSubnet2Subnet492B6BFB
      Type: application
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/LB/Resource
  Ec2ServiceLBSecurityGroup45FED6DF:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Automatically created Security Group for ELB BonjourEc2ServiceLB066AC4BC
      SecurityGroupEgress:
        []
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          Description: Allow from anyone on port 80
          FromPort: 80
          IpProtocol: tcp
          ToPort: 80
      VpcId:
        Ref: MyVpcF9F0CA6F
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/LB/SecurityGroup/Resource
  Ec2ServiceLBSecurityGrouptoBonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF53276865535AC4204BB:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId:
        Fn::GetAtt:
          - Ec2ServiceLBSecurityGroup45FED6DF
          - GroupId
      IpProtocol: tcp
      Description: Load balancer to target
      DestinationSecurityGroupId:
        Fn::GetAtt:
          - Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E
          - GroupId
      FromPort: 32768
      ToPort: 65535
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/LB/SecurityGroup/to
        BonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF5:32768-65535
  Ec2ServiceLBPublicListenerA941070C:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
        - TargetGroupArn:
            Ref: Ec2ServiceLBPublicListenerECSGroup3DC8690E
          Type: forward
      LoadBalancerArn:
        Ref: Ec2ServiceLB381329CE
      Port: 80
      Protocol: HTTP
      Certificates:
        []
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/LB/PublicListener/Resource
  Ec2ServiceLBPublicListenerECSGroup3DC8690E:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      Port: 80
      Protocol: HTTP
      VpcId:
        Ref: MyVpcF9F0CA6F
      TargetGroupAttributes:
        []
      Targets:
        []
      TargetType: instance
    Metadata:
      aws:cdk:path: Bonjour/Ec2Service/LB/PublicListener/ECSGroup/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: "@aws-cdk/assets=0.18.1,@aws-cdk/aws-applicationautoscaling=0.18.1,@aws\
        -cdk/aws-autoscaling=0.18.1,@aws-cdk/aws-autoscaling-common=0.18.1,@aws\
        -cdk/aws-certificatemanager=0.18.1,@aws-cdk/aws-cloudformation=0.18.1,@\
        aws-cdk/aws-cloudwatch=0.18.1,@aws-cdk/aws-codedeploy-api=0.18.1,@aws-c\
        dk/aws-codepipeline-api=0.18.1,@aws-cdk/aws-ec2=0.18.1,@aws-cdk/aws-ecr\
        =0.18.1,@aws-cdk/aws-ecs=0.18.1,@aws-cdk/aws-elasticloadbalancingv2=0.1\
        8.1,@aws-cdk/aws-events=0.18.1,@aws-cdk/aws-iam=0.18.1,@aws-cdk/aws-kms\
        =0.18.1,@aws-cdk/aws-lambda=0.18.1,@aws-cdk/aws-logs=0.18.1,@aws-cdk/aw\
        s-route53=0.18.1,@aws-cdk/aws-s3=0.18.1,@aws-cdk/aws-s3-notifications=0\
        .18.1,@aws-cdk/aws-sns=0.18.1,@aws-cdk/aws-sqs=0.18.1,@aws-cdk/cdk=0.18\
        .1,@aws-cdk/cx-api=0.18.1,hello-world=1.0.0"
Outputs:
  Ec2ServiceLoadBalancerDNS6983C9B2:
    Value:
      Fn::GetAtt:
        - Ec2ServiceLB381329CE
        - DNSName
    Export:
      Name: Bonjour:Ec2ServiceLoadBalancerDNS6983C9B2
  LoadBalancerDNS:
    Value:
      Fn::GetAtt:
        - Ec2ServiceLB381329CE
        - DNSName
    Export:
      Name: Bonjour:LoadBalancerDNS

8c8590130da5:hello-world atsum$ cdk ls -l
- name: Bonjour
  environment:
    name: ******/ap-northeast-1
    account: "******"
    region: ap-northeast-1

スタック作成

$ cdk deploy
Bonjour: deploying...
Bonjour: creating CloudFormation changeset...
  0/50 | 14:48:22 | CREATE_IN_PROGRESS   | AWS::ECS::Cluster                         | Ec2Cluster (Ec2ClusterEE43E89D) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                             | MyVpc/PublicSubnet1/EIP (MyVpcPublicSubnet1EIP096967CB) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                        | CDKMetadata 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::EC2::VPC                             | MyVpc (MyVpcF9F0CA6F) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                             | MyVpc/PublicSubnet2/EIP (MyVpcPublicSubnet2EIP8CCBA239) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/InstanceRole (Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Service/TaskDef/TaskRole (Ec2ServiceTaskDefTaskRole27A5D642) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::ECS::Cluster                         | Ec2Cluster (Ec2ClusterEE43E89D) Resource creation Initiated
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway                 | MyVpc/IGW (MyVpcIGW5C4A4F63) 
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::EC2::VPC                             | MyVpc (MyVpcF9F0CA6F) Resource creation Initiated
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3) Resource creation Initiated
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                             | MyVpc/PublicSubnet1/EIP (MyVpcPublicSubnet1EIP096967CB) Resource creation Initiated
  0/50 | 14:48:23 | CREATE_IN_PROGRESS   | AWS::SNS::Topic                           | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic (Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F) 
  0/50 | 14:48:24 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Service/TaskDef/TaskRole (Ec2ServiceTaskDefTaskRole27A5D642) Resource creation Initiated
  1/50 | 14:48:24 | CREATE_COMPLETE      | AWS::ECS::Cluster                         | Ec2Cluster (Ec2ClusterEE43E89D) 
  1/50 | 14:48:24 | CREATE_IN_PROGRESS   | AWS::EC2::EIP                             | MyVpc/PublicSubnet2/EIP (MyVpcPublicSubnet2EIP8CCBA239) Resource creation Initiated
  1/50 | 14:48:24 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7) Resource creation Initiated
  1/50 | 14:48:24 | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway                 | MyVpc/IGW (MyVpcIGW5C4A4F63) Resource creation Initiated
  1/50 | 14:48:24 | CREATE_IN_PROGRESS   | AWS::SNS::Topic                           | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic (Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F) Resource creation Initiated
  1/50 | 14:48:24 | CREATE_IN_PROGRESS   | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/InstanceRole (Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898) Resource creation Initiated
  1/50 | 14:48:25 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                        | CDKMetadata Resource creation Initiated
  2/50 | 14:48:26 | CREATE_COMPLETE      | AWS::CDK::Metadata                        | CDKMetadata 
  3/50 | 14:48:34 | CREATE_COMPLETE      | AWS::SNS::Topic                           | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic (Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopic798CDC5F) 
  4/50 | 14:48:39 | CREATE_COMPLETE      | AWS::EC2::EIP                             | MyVpc/PublicSubnet1/EIP (MyVpcPublicSubnet1EIP096967CB) 
  5/50 | 14:48:39 | CREATE_COMPLETE      | AWS::EC2::EIP                             | MyVpc/PublicSubnet2/EIP (MyVpcPublicSubnet2EIP8CCBA239) 
  6/50 | 14:48:40 | CREATE_COMPLETE      | AWS::EC2::InternetGateway                 | MyVpc/IGW (MyVpcIGW5C4A4F63) 
  7/50 | 14:48:40 | CREATE_COMPLETE      | AWS::EC2::VPC                             | MyVpc (MyVpcF9F0CA6F) 
  8/50 | 14:48:41 | CREATE_COMPLETE      | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7) 
  9/50 | 14:48:41 | CREATE_COMPLETE      | AWS::IAM::Role                            | Ec2Service/TaskDef/TaskRole (Ec2ServiceTaskDefTaskRole27A5D642) 
 10/50 | 14:48:41 | CREATE_COMPLETE      | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/InstanceRole (Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898) 
 11/50 | 14:48:41 | CREATE_COMPLETE      | AWS::IAM::Role                            | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::VPCGatewayAttachment            | MyVpc/VPCGW (MyVpcVPCGW488ACE0D) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PrivateSubnet2/RouteTable (MyVpcPrivateSubnet2RouteTableCEDCEECE) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PublicSubnet2/RouteTable (MyVpcPublicSubnet2RouteTable1DF17386) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PrivateSubnet1/Subnet (MyVpcPrivateSubnet1Subnet5057CF7E) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PrivateSubnet1/RouteTable (MyVpcPrivateSubnet1RouteTable8819E6E2) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroup                   | Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup (Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroup                   | Ec2Service/LB/SecurityGroup (Ec2ServiceLBSecurityGroup45FED6DF) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PublicSubnet1/Subnet (MyVpcPublicSubnet1SubnetF6608456) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PrivateSubnet2/Subnet (MyVpcPrivateSubnet2Subnet0040C983) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PublicSubnet1/RouteTable (MyVpcPublicSubnet1RouteTableC46AB2F4) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PublicSubnet2/Subnet (MyVpcPublicSubnet2Subnet492B6BFB) 
 11/50 | 14:48:43 | CREATE_IN_PROGRESS   | AWS::ElasticLoadBalancingV2::TargetGroup  | Ec2Service/LB/PublicListener/ECSGroup (Ec2ServiceLBPublicListenerECSGroup3DC8690E) 
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::VPCGatewayAttachment            | MyVpc/VPCGW (MyVpcVPCGW488ACE0D) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PublicSubnet2/RouteTable (MyVpcPublicSubnet2RouteTable1DF17386) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PrivateSubnet2/RouteTable (MyVpcPrivateSubnet2RouteTableCEDCEECE) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PrivateSubnet1/RouteTable (MyVpcPrivateSubnet1RouteTable8819E6E2) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PrivateSubnet1/Subnet (MyVpcPrivateSubnet1Subnet5057CF7E) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PrivateSubnet2/Subnet (MyVpcPrivateSubnet2Subnet0040C983) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::RouteTable                      | MyVpc/PublicSubnet1/RouteTable (MyVpcPublicSubnet1RouteTableC46AB2F4) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PublicSubnet1/Subnet (MyVpcPublicSubnet1SubnetF6608456) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::EC2::Subnet                          | MyVpc/PublicSubnet2/Subnet (MyVpcPublicSubnet2Subnet492B6BFB) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::ElasticLoadBalancingV2::TargetGroup  | Ec2Service/LB/PublicListener/ECSGroup (Ec2ServiceLBPublicListenerECSGroup3DC8690E) Resource creation Initiated
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B) 
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/InstanceRole/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD) 
 11/50 | 14:48:44 | CREATE_IN_PROGRESS   | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33) 
 12/50 | 14:48:45 | CREATE_COMPLETE      | AWS::ElasticLoadBalancingV2::TargetGroup  | Ec2Service/LB/PublicListener/ECSGroup (Ec2ServiceLBPublicListenerECSGroup3DC8690E) 
 13/50 | 14:48:45 | CREATE_COMPLETE      | AWS::EC2::RouteTable                      | MyVpc/PublicSubnet2/RouteTable (MyVpcPublicSubnet2RouteTable1DF17386) 
 13/50 | 14:48:45 | CREATE_IN_PROGRESS   | AWS::IAM::InstanceProfile                 | Ec2Cluster/DefaultAutoScalingGroup/InstanceProfile (Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471) 
 14/50 | 14:48:45 | CREATE_COMPLETE      | AWS::EC2::RouteTable                      | MyVpc/PrivateSubnet2/RouteTable (MyVpcPrivateSubnet2RouteTableCEDCEECE) 
 15/50 | 14:48:45 | CREATE_COMPLETE      | AWS::EC2::RouteTable                      | MyVpc/PrivateSubnet1/RouteTable (MyVpcPrivateSubnet1RouteTable8819E6E2) 
 15/50 | 14:48:45 | CREATE_IN_PROGRESS   | AWS::ECS::TaskDefinition                  | Ec2Service/TaskDef (Ec2ServiceTaskDef8D94BAA3) 
 16/50 | 14:48:45 | CREATE_COMPLETE      | AWS::EC2::RouteTable                      | MyVpc/PublicSubnet1/RouteTable (MyVpcPublicSubnet1RouteTableC46AB2F4) 
 16/50 | 14:48:45 | CREATE_IN_PROGRESS   | AWS::ECS::TaskDefinition                  | Ec2Service/TaskDef (Ec2ServiceTaskDef8D94BAA3) Resource creation Initiated
 17/50 | 14:48:45 | CREATE_COMPLETE      | AWS::ECS::TaskDefinition                  | Ec2Service/TaskDef (Ec2ServiceTaskDef8D94BAA3) 
 17/50 | 14:48:46 | CREATE_IN_PROGRESS   | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B) Resource creation Initiated
 17/50 | 14:48:46 | CREATE_IN_PROGRESS   | AWS::IAM::InstanceProfile                 | Ec2Cluster/DefaultAutoScalingGroup/InstanceProfile (Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471) Resource creation Initiated
 17/50 | 14:48:46 | CREATE_IN_PROGRESS   | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/InstanceRole/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD) Resource creation Initiated
 17/50 | 14:48:46 | CREATE_IN_PROGRESS   | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33) Resource creation Initiated
 17/50 | 14:48:48 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroup                   | Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup (Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E) Resource creation Initiated
 17/50 | 14:48:48 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroup                   | Ec2Service/LB/SecurityGroup (Ec2ServiceLBSecurityGroup45FED6DF) Resource creation Initiated
 18/50 | 14:48:50 | CREATE_COMPLETE      | AWS::EC2::SecurityGroup                   | Ec2Service/LB/SecurityGroup (Ec2ServiceLBSecurityGroup45FED6DF) 
 19/50 | 14:48:50 | CREATE_COMPLETE      | AWS::EC2::SecurityGroup                   | Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup (Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E) 
 19/50 | 14:48:53 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroupIngress            | Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup/from BonjourEc2ServiceLBSecurityGroup2185A60D:32768-65535 (Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroupfromBonjourEc2ServiceLBSecurityGroup2185A60D3276865535EC4EE766) 
 19/50 | 14:48:53 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroupIngress            | Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup/from BonjourEc2ServiceLBSecurityGroup2185A60D:32768-65535 (Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroupfromBonjourEc2ServiceLBSecurityGroup2185A60D3276865535EC4EE766) Resource creation Initiated
 19/50 | 14:48:53 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroupEgress             | Ec2Service/LB/SecurityGroup/to BonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF5:32768-65535 (Ec2ServiceLBSecurityGrouptoBonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF53276865535AC4204BB) 
 20/50 | 14:48:54 | CREATE_COMPLETE      | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook/Role/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B) 
 20/50 | 14:48:54 | CREATE_IN_PROGRESS   | AWS::EC2::SecurityGroupEgress             | Ec2Service/LB/SecurityGroup/to BonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF5:32768-65535 (Ec2ServiceLBSecurityGrouptoBonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF53276865535AC4204BB) Resource creation Initiated
 21/50 | 14:48:54 | CREATE_COMPLETE      | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/InstanceRole/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD) 
 22/50 | 14:48:54 | CREATE_COMPLETE      | AWS::EC2::SecurityGroupIngress            | Ec2Cluster/DefaultAutoScalingGroup/InstanceSecurityGroup/from BonjourEc2ServiceLBSecurityGroup2185A60D:32768-65535 (Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroupfromBonjourEc2ServiceLBSecurityGroup2185A60D3276865535EC4EE766) 
 23/50 | 14:48:55 | CREATE_COMPLETE      | AWS::IAM::Policy                          | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/ServiceRole/DefaultPolicy (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33) 
 24/50 | 14:48:56 | CREATE_COMPLETE      | AWS::EC2::SecurityGroupEgress             | Ec2Service/LB/SecurityGroup/to BonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF5:32768-65535 (Ec2ServiceLBSecurityGrouptoBonjourEc2ClusterDefaultAutoScalingGroupInstanceSecurityGroupE49ADAF53276865535AC4204BB) 
 24/50 | 14:48:58 | CREATE_IN_PROGRESS   | AWS::Lambda::Function                     | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31) 
 24/50 | 14:48:58 | CREATE_IN_PROGRESS   | AWS::Lambda::Function                     | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31) Resource creation Initiated
 25/50 | 14:48:59 | CREATE_COMPLETE      | AWS::Lambda::Function                     | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31) 
 26/50 | 14:48:59 | CREATE_COMPLETE      | AWS::EC2::VPCGatewayAttachment            | MyVpc/VPCGW (MyVpcVPCGW488ACE0D) 
 27/50 | 14:49:00 | CREATE_COMPLETE      | AWS::EC2::Subnet                          | MyVpc/PrivateSubnet1/Subnet (MyVpcPrivateSubnet1Subnet5057CF7E) 
 28/50 | 14:49:00 | CREATE_COMPLETE      | AWS::EC2::Subnet                          | MyVpc/PrivateSubnet2/Subnet (MyVpcPrivateSubnet2Subnet0040C983) 
 29/50 | 14:49:00 | CREATE_COMPLETE      | AWS::EC2::Subnet                          | MyVpc/PublicSubnet1/Subnet (MyVpcPublicSubnet1SubnetF6608456) 
 30/50 | 14:49:00 | CREATE_COMPLETE      | AWS::EC2::Subnet                          | MyVpc/PublicSubnet2/Subnet (MyVpcPublicSubnet2Subnet492B6BFB) 
 30/50 | 14:49:02 | CREATE_IN_PROGRESS   | AWS::SNS::Subscription                    | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic/FunctionSubscription (Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopicFunctionSubscription5FABD83E) 
 30/50 | 14:49:02 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PublicSubnet2/DefaultRoute (MyVpcPublicSubnet2DefaultRoute052936F6) 
 30/50 | 14:49:02 | CREATE_IN_PROGRESS   | AWS::Lambda::Permission                   | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/Topic (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic6C30136B) 
 30/50 | 14:49:03 | CREATE_IN_PROGRESS   | AWS::Lambda::Permission                   | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/Topic (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic6C30136B) Resource creation Initiated
 30/50 | 14:49:03 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PublicSubnet2/DefaultRoute (MyVpcPublicSubnet2DefaultRoute052936F6) Resource creation Initiated
 30/50 | 14:49:03 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PublicSubnet1/DefaultRoute (MyVpcPublicSubnet1DefaultRoute95FDF9EB) 
 30/50 | 14:49:03 | CREATE_IN_PROGRESS   | AWS::SNS::Subscription                    | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic/FunctionSubscription (Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopicFunctionSubscription5FABD83E) Resource creation Initiated
 31/50 | 14:49:03 | CREATE_COMPLETE      | AWS::SNS::Subscription                    | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Topic/FunctionSubscription (Ec2ClusterDefaultAutoScalingGroupDrainECSHookTopicFunctionSubscription5FABD83E) 
 31/50 | 14:49:03 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PublicSubnet1/RouteTableAssociation (MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB) 
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PublicSubnet2/RouteTableAssociation (MyVpcPublicSubnet2RouteTableAssociation227DE78D) 
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                      | MyVpc/PublicSubnet1/NATGateway (MyVpcPublicSubnet1NATGatewayAD3400C1) 
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PublicSubnet1/DefaultRoute (MyVpcPublicSubnet1DefaultRoute95FDF9EB) Resource creation Initiated
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PrivateSubnet2/RouteTableAssociation (MyVpcPrivateSubnet2RouteTableAssociation86A610DA) 
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PrivateSubnet1/RouteTableAssociation (MyVpcPrivateSubnet1RouteTableAssociation56D38C7E) 
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                      | MyVpc/PublicSubnet2/NATGateway (MyVpcPublicSubnet2NATGateway91BFBEC9) 
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                      | MyVpc/PublicSubnet1/NATGateway (MyVpcPublicSubnet1NATGatewayAD3400C1) Resource creation Initiated
 31/50 | 14:49:04 | CREATE_IN_PROGRESS   | AWS::ElasticLoadBalancingV2::LoadBalancer | Ec2Service/LB (Ec2ServiceLB381329CE) 
 31/50 | 14:49:05 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PublicSubnet1/RouteTableAssociation (MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB) Resource creation Initiated
 31/50 | 14:49:05 | CREATE_IN_PROGRESS   | AWS::EC2::NatGateway                      | MyVpc/PublicSubnet2/NATGateway (MyVpcPublicSubnet2NATGateway91BFBEC9) Resource creation Initiated
 31/50 | 14:49:05 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PrivateSubnet2/RouteTableAssociation (MyVpcPrivateSubnet2RouteTableAssociation86A610DA) Resource creation Initiated
 31/50 | 14:49:05 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PublicSubnet2/RouteTableAssociation (MyVpcPublicSubnet2RouteTableAssociation227DE78D) Resource creation Initiated
 31/50 | 14:49:05 | CREATE_IN_PROGRESS   | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PrivateSubnet1/RouteTableAssociation (MyVpcPrivateSubnet1RouteTableAssociation56D38C7E) Resource creation Initiated
 31/50 | 14:49:06 | CREATE_IN_PROGRESS   | AWS::ElasticLoadBalancingV2::LoadBalancer | Ec2Service/LB (Ec2ServiceLB381329CE) Resource creation Initiated
 32/50 | 14:49:13 | CREATE_COMPLETE      | AWS::Lambda::Permission                   | Ec2Cluster/DefaultAutoScalingGroup/DrainECSHook/Function/Topic (Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic6C30136B) 
 33/50 | 14:49:18 | CREATE_COMPLETE      | AWS::EC2::Route                           | MyVpc/PublicSubnet2/DefaultRoute (MyVpcPublicSubnet2DefaultRoute052936F6) 
 34/50 | 14:49:19 | CREATE_COMPLETE      | AWS::EC2::Route                           | MyVpc/PublicSubnet1/DefaultRoute (MyVpcPublicSubnet1DefaultRoute95FDF9EB) 
 35/50 | 14:49:20 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PublicSubnet1/RouteTableAssociation (MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB) 
 36/50 | 14:49:20 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PrivateSubnet2/RouteTableAssociation (MyVpcPrivateSubnet2RouteTableAssociation86A610DA) 
 37/50 | 14:49:20 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PublicSubnet2/RouteTableAssociation (MyVpcPublicSubnet2RouteTableAssociation227DE78D) 
 38/50 | 14:49:20 | CREATE_COMPLETE      | AWS::EC2::SubnetRouteTableAssociation     | MyVpc/PrivateSubnet1/RouteTableAssociation (MyVpcPrivateSubnet1RouteTableAssociation56D38C7E) 
38/50 Currently in progress: Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471, MyVpcPublicSubnet1NATGatewayAD3400C1, MyVpcPublicSubnet2NATGateway91BFBEC9, Ec2ServiceLB381329CE
 39/50 | 14:50:38 | CREATE_COMPLETE      | AWS::EC2::NatGateway                      | MyVpc/PublicSubnet2/NATGateway (MyVpcPublicSubnet2NATGateway91BFBEC9) 
 39/50 | 14:50:41 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PrivateSubnet2/DefaultRoute (MyVpcPrivateSubnet2DefaultRoute9CE96294) 
 39/50 | 14:50:42 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PrivateSubnet2/DefaultRoute (MyVpcPrivateSubnet2DefaultRoute9CE96294) Resource creation Initiated
 40/50 | 14:50:47 | CREATE_COMPLETE      | AWS::IAM::InstanceProfile                 | Ec2Cluster/DefaultAutoScalingGroup/InstanceProfile (Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471) 
 40/50 | 14:50:50 | CREATE_IN_PROGRESS   | AWS::AutoScaling::LaunchConfiguration     | Ec2Cluster/DefaultAutoScalingGroup/LaunchConfig (Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A) 
 40/50 | 14:50:51 | CREATE_IN_PROGRESS   | AWS::AutoScaling::LaunchConfiguration     | Ec2Cluster/DefaultAutoScalingGroup/LaunchConfig (Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A) Resource creation Initiated
 41/50 | 14:50:51 | CREATE_COMPLETE      | AWS::AutoScaling::LaunchConfiguration     | Ec2Cluster/DefaultAutoScalingGroup/LaunchConfig (Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A) 
 42/50 | 14:50:53 | CREATE_COMPLETE      | AWS::EC2::NatGateway                      | MyVpc/PublicSubnet1/NATGateway (MyVpcPublicSubnet1NATGatewayAD3400C1) 
 42/50 | 14:50:55 | CREATE_IN_PROGRESS   | AWS::AutoScaling::AutoScalingGroup        | Ec2Cluster/DefaultAutoScalingGroup/ASG (Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0) 
 42/50 | 14:50:56 | CREATE_IN_PROGRESS   | AWS::AutoScaling::AutoScalingGroup        | Ec2Cluster/DefaultAutoScalingGroup/ASG (Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0) Resource creation Initiated
 42/50 | 14:50:56 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PrivateSubnet1/DefaultRoute (MyVpcPrivateSubnet1DefaultRouteA8CDE2FA) 
 42/50 | 14:50:57 | CREATE_IN_PROGRESS   | AWS::EC2::Route                           | MyVpc/PrivateSubnet1/DefaultRoute (MyVpcPrivateSubnet1DefaultRouteA8CDE2FA) Resource creation Initiated
 43/50 | 14:50:57 | CREATE_COMPLETE      | AWS::EC2::Route                           | MyVpc/PrivateSubnet2/DefaultRoute (MyVpcPrivateSubnet2DefaultRoute9CE96294) 
 44/50 | 14:51:07 | CREATE_COMPLETE      | AWS::ElasticLoadBalancingV2::LoadBalancer | Ec2Service/LB (Ec2ServiceLB381329CE) 
 44/50 | 14:51:11 | CREATE_IN_PROGRESS   | AWS::ElasticLoadBalancingV2::Listener     | Ec2Service/LB/PublicListener (Ec2ServiceLBPublicListenerA941070C) 
 44/50 | 14:51:11 | CREATE_IN_PROGRESS   | AWS::ElasticLoadBalancingV2::Listener     | Ec2Service/LB/PublicListener (Ec2ServiceLBPublicListenerA941070C) Resource creation Initiated
 45/50 | 14:51:11 | CREATE_COMPLETE      | AWS::ElasticLoadBalancingV2::Listener     | Ec2Service/LB/PublicListener (Ec2ServiceLBPublicListenerA941070C) 
 46/50 | 14:51:13 | CREATE_COMPLETE      | AWS::EC2::Route                           | MyVpc/PrivateSubnet1/DefaultRoute (MyVpcPrivateSubnet1DefaultRouteA8CDE2FA) 
 46/50 | 14:51:15 | CREATE_IN_PROGRESS   | AWS::ECS::Service                         | Ec2Service/Service/Service (Ec2Service398F0E46) 
 46/50 | 14:51:15 | CREATE_IN_PROGRESS   | AWS::ECS::Service                         | Ec2Service/Service/Service (Ec2Service398F0E46) Resource creation Initiated
46/50 Currently in progress: Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0, Ec2Service398F0E46
 47/50 | 14:51:49 | CREATE_COMPLETE      | AWS::AutoScaling::AutoScalingGroup        | Ec2Cluster/DefaultAutoScalingGroup/ASG (Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0) 
 47/50 | 14:51:54 | CREATE_IN_PROGRESS   | AWS::AutoScaling::LifecycleHook           | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E) 
 47/50 | 14:51:55 | CREATE_IN_PROGRESS   | AWS::AutoScaling::LifecycleHook           | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E) Resource creation Initiated
 48/50 | 14:51:55 | CREATE_COMPLETE      | AWS::AutoScaling::LifecycleHook           | Ec2Cluster/DefaultAutoScalingGroup/LifecycleHookDrainHook (Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E) 
 49/50 | 14:52:16 | CREATE_COMPLETE      | AWS::ECS::Service                         | Ec2Service/Service/Service (Ec2Service398F0E46) 
 50/50 | 14:52:19 | CREATE_COMPLETE      | AWS::CloudFormation::Stack                | Bonjour 

 ✅  Bonjour

Outputs:
Bonjour.Ec2ServiceLoadBalancerDNS6983C9B2 = Bonjo-Ec2Se-2SOLN6HBXNN6-1969303271.ap-northeast-1.elb.amazonaws.com
Bonjour.LoadBalancerDNS = Bonjo-Ec2Se-2SOLN6HBXNN6-1969303271.ap-northeast-1.elb.amazonaws.com

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:******:stack/Bonjour/4e064220-eee3-11e8-a113-0e89097244e0

image.png

約束

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

1
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
1
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?