AWSTemplateFormatVersion: '2010-09-09' Description: catsndogs.lol workshop lab1. Deploys an Auto Scaling group to join to the cluster. Parameters: LabSetupStackName: Type: String Description: "Name of the stack created at the very start of the workshop" Default: catsndogssetup ECSCluster: Type: String Description: "Name of the ECS cluster you created earlier" Default: catsndogsECScluster Mappings: AWSRegionToAMI: us-east-1: AMIID: ami-9eb4b1e5 us-east-2: AMIID: ami-1c002379 us-west-1: AMIID: ami-4a2c192a us-west-2: AMIID: ami-1d668865 eu-central-1: AMIID: ami-0460cb6b eu-west-1: AMIID: ami-8fcc32f6 eu-west-2: AMIID: ami-cb1101af ap-northeast-1: AMIID: ami-b743bed1 ap-southeast-2: AMIID: ami-c1a6bda2 ap-southeast-1: AMIID: ami-9d1f7efe ca-central-1: AMIID: ami-b677c9d2 Resources: ASGSNSTopic: Type: "AWS::SNS::Topic" ECSAutoScalingGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: VPCZoneIdentifier: - Fn::ImportValue: !Sub "${LabSetupStackName}-PriSubnet1" - Fn::ImportValue: !Sub "${LabSetupStackName}-PriSubnet2" LaunchConfigurationName: !Ref 'ECSOnDemandLaunchConfig' NotificationConfigurations: - TopicARN: !Ref ASGSNSTopic NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR - autoscaling:EC2_INSTANCE_TERMINATE - autoscaling:EC2_INSTANCE_TERMINATE_ERROR MinSize: '1' MaxSize: '1' Tags: - Key: Name Value: ECSContainerInstance PropagateAtLaunch: 'true' DesiredCapacity: '1' ECSOnDemandLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Metadata: AWS::CloudFormation::Init: config: commands: 050_add_instance_to_cluster: command: !Join ['', ['#!/bin/bash ', echo ECS_CLUSTER=, !Ref 'ECSCluster', ' >> /etc/ecs/ecs.config']] Properties: ImageId: !FindInMap [AWSRegionToAMI, !Ref 'AWS::Region', AMIID] InstanceType: t2.medium UserData: !Base64 Fn::Join: - '' - ['#!/bin/bash -xe ', 'yum install -y aws-cfn-bootstrap ', 'yum update -y ', '/opt/aws/bin/cfn-init -v ', ' --stack ', !Ref 'AWS::StackName', ' --resource ECSOnDemandLaunchConfig ', ' --region ', !Ref 'AWS::Region'] SecurityGroups: - Fn::ImportValue: !Sub "${LabSetupStackName}-InstanceSG" IamInstanceProfile: Fn::ImportValue: !Sub "${LabSetupStackName}-EC2InstanceProfile"