Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save suz-lab/c407821004c3fae4d851 to your computer and use it in GitHub Desktop.
Save suz-lab/c407821004c3fae4d851 to your computer and use it in GitHub Desktop.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
"ProjectName": {
"Type": "String",
"Default": "Cloudpack"
},
"RoleName": {
"Type": "String",
"Default": "Ecs"
},
"KeyName": {
"Type": "AWS::EC2::KeyPair::KeyName"
},
"InstanceType": {
"Type": "String",
"Default": "t2.micro"
},
"CommonSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup::Id"
},
"VpcId": {
"Type": "AWS::EC2::VPC::Id"
},
"Az1VpcZoneIdentifier": {
"Type": "AWS::EC2::Subnet::Id"
},
"Az2VpcZoneIdentifier": {
"Type": "AWS::EC2::Subnet::Id"
},
"DesiredCapacity": {
"Type": "String",
"Default": "0"
},
"Username": {
"Type": "String",
"Default": ""
},
"Password": {
"Type": "String",
"Default": ""
},
"Email": {
"Type": "String",
"Default": ""
}
},
"Mappings": {
"RegionMapping": {
"us-east-1": { "ImageId": "ami-5f59ac34" },
"us-west-2": { "ImageId": "ami-c188b0f1" },
"eu-west-1": { "ImageId": "ami-3db4ca4a" },
"ap-northeast-1": { "ImageId": "ami-ca01d8ca" },
"ap-southeast-2": { "ImageId": "ami-5b5d2661" }
}
},
"Resources": {
"Cluster": {
"Type": "AWS::ECS::Cluster"
},
"RoleSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": { "Fn::Join" : [ "", [
{ "Ref": "ProjectName" },
{ "Ref": "RoleName" }
] ] },
"VpcId": { "Ref": "VpcId" },
"SecurityGroupIngress": [],
"SecurityGroupEgress": [],
"Tags": [ {
"Key": "Name",
"Value": { "Fn::Join" : [ "", [
{ "Ref": "ProjectName" },
{ "Ref": "RoleName" },
"Instance"
] ] }
} ]
}
},
"Role": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"Principal": { "Service": [ "ec2.amazonaws.com" ] },
"Action": [ "sts:AssumeRole" ]
} ]
},
"Path": "/",
"Policies": [ {
"PolicyName": { "Fn::Join" : [ "", [
{ "Ref": "ProjectName" },
"Ecs"
] ] },
"PolicyDocument": {
"Version" : "2012-10-17",
"Statement": [ {
"Effect": "Allow",
"Action": [
"ecs:CreateCluster",
"ecs:DeregisterContainerInstance",
"ecs:DiscoverPollEndpoint",
"ecs:Poll",
"ecs:RegisterContainerInstance",
"ecs:Submit*"
],
"Resource": [ "*" ]
} ]
}
} ]
}
},
"InstanceProfile": {
"Type": "AWS::IAM::InstanceProfile",
"Properties": {
"Path": "/",
"Roles": [ {
"Ref": "Role"
} ]
}
},
"LaunchConfiguration": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"AssociatePublicIpAddress": "true",
"KeyName": { "Ref": "KeyName" },
"ImageId": { "Fn::FindInMap": [ "RegionMapping", { "Ref": "AWS::Region" }, "ImageId" ] },
"InstanceType": { "Ref": "InstanceType" },
"IamInstanceProfile": { "Ref": "InstanceProfile" },
"SecurityGroups": [
{ "Ref": "CommonSecurityGroup" },
{ "Ref": "RoleSecurityGroup" }
],
"UserData": { "Fn::Base64": { "Fn::Join" : [ "\n", [
"#!/bin/bash",
"yum -y update",
"grubby --default-kernel | grep `uname -r` || reboot",
{ "Fn::Join" : [ "", [
"echo ECS_CLUSTER=",
{ "Ref": "Cluster" },
" >> /etc/ecs/ecs.config"
] ] },
"echo ECS_ENGINE_AUTH_TYPE=docker >> /etc/ecs/ecs.config",
{ "Fn::Join" : [ "", [
"echo ECS_ENGINE_AUTH_DATA='{\"https://index.docker.io/v1/\":{\"username\":\"",
{ "Ref": "Username" },
"\",\"password\":\"",
{ "Ref": "Password" },
"\",\"email\":\"",
{ "Ref": "Email" },
"\"}}' >> /etc/ecs/ecs.config"
] ] }
] ] } }
}
},
"AutoScalingGroup": {
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"LaunchConfigurationName": { "Ref": "LaunchConfiguration" },
"MinSize": "0",
"MaxSize": "4",
"DesiredCapacity": { "Ref": "DesiredCapacity" },
"Cooldown": "0",
"VPCZoneIdentifier": [
{ "Ref" : "Az1VpcZoneIdentifier" },
{ "Ref" : "Az2VpcZoneIdentifier" }
],
"Tags": [ {
"Key": "Name",
"Value": { "Fn::Join" : [ "", [
{ "Ref": "ProjectName" },
{ "Ref": "RoleName" }
] ] },
"PropagateAtLaunch": "true"
} ]
},
"UpdatePolicy": {
"AutoScalingRollingUpdate": {
"MaxBatchSize": "1",
"MinInstancesInService": "1"
}
}
},
"TaskDefinition": {
"Type": "AWS::ECS::TaskDefinition",
"Properties": {
"ContainerDefinitions": [
{
"Memory": "128",
"Name": "nginx-public",
"Cpu": "128",
"Image": "cloudpack/nginx",
"Essential": "true"
},
{
"Memory": "128",
"Name": "nginx-private",
"Cpu": "128",
"Image": "cloudpack/private:nginx",
"Essential": "false"
}
]
}
},
"Service": {
"Type": "AWS::ECS::Service",
"Properties": {
"Cluster": { "Ref": "Cluster" },
"DesiredCount": "1",
"TaskDefinition": { "Ref": "TaskDefinition" }
}
}
},
"Outputs": {
"Cluster": {
"Value": { "Ref": "Cluster" }
},
"Role": {
"Value": { "Ref": "Role" }
},
"RoleSecurityGroup": {
"Value": { "Ref": "RoleSecurityGroup" }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment