AWS ECS建立Fargate Container
關於本篇
本篇為官方教學文件的實做過程紀錄
安裝ECS CLI
sudo curl -Lo /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest
sudo chmod +x /usr/local/bin/ecs-cli
ecs-cli --version
設定ECS CLI
設定CLI Profile
這邊是設定使用CLI的身份
可以想像同個電腦帳號中
你可能同時操作不同的CLI身份(CLI Profile對應到AWS IAM的帳號)
而你可能上班的時候操作公司的IAM帳號
下班操作自己的IAM帳號
所以設定這些Profile是必要的
讓我們在操作CLI任何操作的時候可透過--profile選項
選擇操作CLI的身份
ecs-cli configure profile \
--profile-name <profile-name> \
--access-key <aws-access-key-id> \
--secret-key <aws-access-secret-key>
此步驟建立完成後
ECS CLI會將profile設定在~/.ecs/credentials檔案中
格式大致如下
version: v1
default: personal # 預設的使用的profile, 當沒設定--profile選項的時候使用此profile
ecs_profiles:
personal:
aws_access_key_id: aws_access_key_id1
aws_secret_access_key: aws_secret_access_key1
for-work:
aws_access_key_id: aws_access_key_id2
aws_secret_access_key: aws_secret_access_key2
設定CLI Cluster
基本上跟profile設定差不多
就是可以將常用的cluster先設定好
然後操作CLI的時候再指定用哪個cluster設定
參數說明
- cluster-name: cluster名稱
- default-launch-type: container啟動類型, 有FARGATE跟EC2兩種選項可使用
- region: cluster region
- config-name: 設定名稱, 也就是後須操作CLI要指定哪個cluster用的名稱
ecs-cli configure \
--cluster <cluster-name> \
--default-launch-type FARGATE \
--region <region> \
--config-name <config-name>
此步驟建立完成後
ECS CLI會將cluster設定在~/.ecs/config檔案中
格式大致如下
version: v1
default: ecs-demo
clusters:
ecs-demo:
cluster: ecs-demo
region: ap-southeast-1
default_launch_type: FARGATE
設定ECS CLI的IAM
注意事項
此步驟為透過AWS CLI設定ECS CLI專用Role
因此要確保執行的AWS CLI的Profile IAM有以下權限
- iam:CreateRole
- iam:AttachRolePolicy
建立ecsTaskExecutionRole
透過官方提供的JSON檔範例
建立一個叫ecsTaskExecutionRole的IAM Role
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
透過AWS CLI執行
aws iam \
--region ap-southeast-1 create-role \
--role-name ecsTaskExecutionRole \
--assume-role-policy-document file://task-execution-assume-role.json
將AmazonECSTaskExecutionRolePolicy掛上剛才新建的Role
這步驟設定好之後
AWS ECS的Task才能正常使用AWS API來存Log或是取Image等操作
如果此步驟出現Access Denied
代表目前操作AWS CLI的這個Profile IAM權限不足
沒有操作attache-role-policy的權限(前面注意事項提到的權限)
補上權限即可正常執行
aws iam \
--region ap-southeast-1 attach-role-policy \
--role-name ecsTaskExecutionRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
開始建立Cluster
指定前面ECS CLI設定的cluster name及profile-name
來建立cluster
ecs-cli up --cluster-config <cluster-name> --ecs-profile <profile-name>
另外官方教學會建立新的securtiy group
有需要的話再建即可
如果有符合的現成securtiy group可直接使用不一定要建立新的
佈署cluster
建立docker-compose.yml
直接使用官方文件提供的docker-compose.yml
version: '3'
services:
web:
image: amazon/amazon-ecs-sample
ports:
- "80:80"
logging:
driver: awslogs
options:
awslogs-group: tutorial
awslogs-region: us-west-2
awslogs-stream-prefix: web
設定ecs-params.yml
這邊主要設定給ECS服務啟動使用的參數
詳細ecs-params.yml設定可查看官方文件
可以看到Role就是設定為剛才建立的ecsTaskExecutionRole
Network相關設定則可subnet、security group
version: 1
task_definition:
task_execution_role: ecsTaskExecutionRole
ecs_network_mode: awsvpc
task_size:
mem_limit: 0.5GB
cpu_limit: 256
run_params:
network_configuration:
awsvpc_configuration:
subnets:
- "subnet ID 1"
- "subnet ID 2"
security_groups:
- "security group ID"
assign_public_ip: ENABLED
開始佈署cluster
ecs-cli compose \
--project-name <project-name> service up \
--cluster-config <cluster-config-name> \
--ecs-profile <profile-name> \
--create-log-groups
查看正在執行的container
ecs-cli compose --project-name <project-name> service ps --cluster-config <cluster-config-name> --ecs-profile <profile-name>
查看container log
ecs-cli logs --task-id <task-id> --follow --cluster-config <cluster-config-name> --ecs-profile <profile-name>
其他
刪除所有container
ecs-cli compose --project-name <project-name> service down --cluster-config <cluster-config-name> --ecs-profile <proflie-name>
刪除cluster
ecs-cli down --force --cluster-config <cluster-config-name> --ecs-profile <profile-name>