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. タスク定義の登録
{
"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
-- 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
-- フリートマネージャからマネージノードの登録を解除する