2015年6月19日金曜日

CloudFormationで"Container Instance"が"Auto Scaling"で管理されているECSのクラスターを作成してみた



テンプレートは下記の通りです。

以下、ポイントとなります。

▼CloudFormationのスタックが作られるリージョンのECSイメージが勝手に利用されるように

AMI名が"amzn-ami-2015.03.c-amazon-ecs-optimized"のものを
次のように設定しています。
"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" }
}

▼ ECSのエージェントが動作するためのポリシーをIAMロールに指定

"ecs:*"的な操作を許可してます。
"Action": [
    "ecs:CreateCluster",
    "ecs:DeregisterContainerInstance",
    "ecs:DiscoverPollEndpoint",
    "ecs:Poll",
    "ecs:RegisterContainerInstance",
    "ecs:Submit*"
]

▼ ECSクラスター名を"/etc/ecs/ecs.config"に登録

これやっとかないとECSクラスターに登録されません!
"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"
    ] ] }
] ] } }

CloudFormationのスタック作成時のパラメータはこんな感じです。
(既にVPCやSubnetが存在する前提です)


スタックが作成し終わると、次のような"Auto Scaling"の"Launch Configuration”が
作られていることを確認できます。("User Data"も設定されています)


"Auto Scaling Group"でインスタンスが二つ起動していることも確認できました。


ということで、ECSクラスターに登録されたEC2も二つになっていました。

0 コメント: