{ECS}Amazon ECS Anywhere

 

https://dev.classmethod.jp/articles/try-amazon-ecs-anywhere/
https://aws.amazon.com/jp/blogs/news/building-an-amazon-ecs-anywhere-home-lab-with-amazon-vpc-network-connectivity/
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/iam-role-ecsanywhere.html


オンプレOS:
Ubuntu (20.04.4 LTS)

 

-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version


-- 1.2 jqインストール
sudo yum -y install jq


-- 2. ECSクラスターの作成
aws ecs create-cluster \
--cluster-name cluster01 \
--capacity-providers '[
                "FARGATE",
                "FARGATE_SPOT"
            ]'


aws ecs list-clusters

aws ecs describe-clusters \
--clusters cluster01


-- 3. ロールの作成

vim ecsExternalInstanceRole.json

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {"Service": [
      "ssm.amazonaws.com"
    ]},
    "Action": "sts:AssumeRole"
  }
}

aws iam create-role \
--role-name ecsExternalInstanceRole \
--assume-role-policy-document file://ecsExternalInstanceRole.json


-- 4. ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore \
--role-name ecsExternalInstanceRole

aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \
--role-name ecsExternalInstanceRole


-- 5. Externalインスタンスを登録する

コンソールから外部インスタンスの登録を実行してインスタンス登録コマンドを取得し、オンプレインスタンスで実行

アクティベーションキーの有効日数: 1
インスタンス数: 1
インスタンスロール: ecsExternalInstanceRole


sudo su -
curl --proto "https" -o "/tmp/ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" && bash /tmp/ecs-anywhere-install.sh --region "ap-northeast-1" --cluster "cluster01" --activation-id "11111111-1111-1111-1111-111111111111" --activation-code "22222222222222222222"

 

-- 6. タスク定義の登録

vim a.json

{
    "family": "task01", 
    "networkMode": "bridge", 
    "containerDefinitions": [
        {
            "name": "apache", 
            "image": "httpd:2.4", 
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 80, 
                    "hostPort": 80, 
                    "protocol": "tcp"
                }
            ], 
            "essential": true
        }
    ], 
    "requiresCompatibilities": [
        "EXTERNAL"
    ], 
    "cpu": "256", 
    "memory": "512"
}

aws ecs register-task-definition \
--cli-input-json file://a.json


aws ecs list-task-definitions

aws ecs describe-task-definition \
--task-definition task01:1


-- 7. サービスの作成

aws ecs create-service \
--cluster cluster01 \
--service-name service01 \
--task-definition task01:1 \
--desired-count 1 \
--launch-type "EXTERNAL" \
--deployment-configuration '{
                "deploymentCircuitBreaker": {
                    "enable": false,
                    "rollback": false
                },
                "maximumPercent": 200,
                "minimumHealthyPercent": 100
            }' \
--placement-strategy ' [
                {
                    "type": "spread",
                    "field": "attribute:ecs.availability-zone"
                },
                {
                    "type": "spread",
                    "field": "instanceId"
                }
            ]' \
--scheduling-strategy REPLICA \
--enable-ecs-managed-tags \
--propagate-tags NONE \
--disable-execute-command

 


aws ecs list-services \
--cluster cluster01

aws ecs describe-services \
--cluster cluster01 \
--services service01

 

-- 8. 動作確認

オンプレインスタンスで実行

docker container ls

curl localhost:80

 

-- 9. クリーンアップ

-- サービス削除
aws ecs delete-service \
--cluster cluster01 \
--service service01 \
--force

aws ecs list-services \
--cluster cluster01

-- 外部インスタンスの登録解除
aws ecs list-container-instances \
--cluster cluster01

aws ecs deregister-container-instance \
--cluster cluster01 \
--container-instance arn:aws:ecs:ap-northeast-1:999999999999:container-instance/cluster01/33333333333333333333333333333333 \
--force

 

-- クラスター削除
aws ecs list-clusters

aws ecs describe-clusters \
--clusters cluster01

aws ecs delete-cluster \
--cluster cluster01


-- タスク定義の登録解除

aws ecs list-task-definitions

aws ecs deregister-task-definition \
--task-definition task01:1


-- IAMロールの削除
aws iam list-roles | grep ecsExternalInstanceRole

aws iam detach-role-policy \
--role-name ecsExternalInstanceRole \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

aws iam detach-role-policy \
--role-name ecsExternalInstanceRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role

aws iam delete-role --role-name ecsExternalInstanceRole

 

-- フリートマネージャからマネージノードの登録を解除する