本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟動 Amazon ECS Linux 容器執行個體時執行指令碼
您可能需要在每個容器執行個體上執行特定容器,以處理監控、安全、指標、服務探索或記錄等操作或安全問題。
若要執行此作業,您可以將您的容器執行個體設定為在啟動時或在某些 init 系統中 (例如 Upstart 或 systemd),以使用者資料指令碼呼叫 docker run 命令。雖然此方法有效,但它有一些缺點,因為 Amazon ECS不了解容器,且無法監控 CPU、記憶體、連接埠或任何其他使用的資源。為了確保 Amazon ECS可以正確考慮所有任務資源,請為容器建立任務定義,以便在您的容器執行個體上執行。然後,使用 Amazon 在啟動時間使用 Amazon EC2使用者資料ECS放置任務。
下列程序中的 Amazon EC2使用者資料指令碼使用 Amazon ECS 簡介API來識別容器執行個體。然後,它會使用 AWS CLI 和 start-task命令在啟動期間自行執行指定的任務。
在容器執行個體啟動階段啟動任務
-
修改您的
ecsInstanceRole
IAM角色以新增StartTask
API操作的許可。如需更多資訊,請參閱 AWS Identity and Access Management IAM 使用者指南中的修改角色。 -
使用 Amazon ECS最佳化的 Amazon Linux 2 啟動一或多個容器執行個體AMI。啟動新的容器執行個體,並在EC2使用者資料中使用下列範例指令碼。Replace (取代)
your_cluster_name
使用叢集,讓容器執行個體註冊 和my_task_def
啟動時要在執行個體上執行的任務定義。如需詳細資訊,請參閱啟動 Amazon ECS Linux 容器執行個體。
注意
下面的MIME分段內容使用 Shell 指令碼來設定組態值和安裝套件。其也會在ecs服務執行且可使用簡介之後,使用系統化任務來啟動任務API。
Content-Type: multipart/mixed; boundary="==BOUNDARY==" MIME-Version: 1.0 --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash # Specify the cluster that the container instance should register into cluster=
your_cluster_name
# Write the cluster configuration variable to the ecs.config file # (add any other configuration variables here also) echo ECS_CLUSTER=$cluster >> /etc/ecs/ecs.config START_TASK_SCRIPT_FILE="/etc/ecs/ecs-start-task.sh" cat <<- 'EOF' > ${START_TASK_SCRIPT_FILE} exec 2>>/var/log/ecs/ecs-start-task.log set -x # Install prerequisite tools yum install -y jq aws-cli # Wait for the ECS service to be responsive until curl -s http://localhost:51678/v1/metadata do sleep 1 done # Grab the container instance ARN and AWS Region from instance metadata instance_arn=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F/ '{print $NF}' ) cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster' | awk -F/ '{print $NF}' ) region=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F: '{print $4}') # Specify the task definition to run at launch task_definition=my_task_def
# Run the AWS CLI start-task command to start your task on this container instance aws ecs start-task --cluster $cluster --task-definition $task_definition --container-instances $instance_arn --started-by $instance_arn --region $region EOF # Write systemd unit file UNIT="ecs-start-task.service" cat <<- EOF > /etc/systemd/system/${UNIT} [Unit] Description=ECS Start Task Requires=ecs.service After=ecs.service [Service] Restart=on-failure RestartSec=30 ExecStart=/usr/bin/bash ${START_TASK_SCRIPT_FILE} [Install] WantedBy=default.target EOF # Enable our ecs.service dependent service with `--no-block` to prevent systemd deadlock # See https://github.com/aws/amazon-ecs-agent/issues/1707 systemctl enable --now --no-block "${UNIT}" --==BOUNDARY==-- -
確認您的容器執行個體在正確的叢集中啟動,而且您的任務已啟動。
在 https://console.aws.amazon.com/ecs/v2
開啟主控台。 -
從導覽列選擇您叢集所在的區域。
-
在導覽窗格中選擇 Clusters (叢集),並選取託管您容器執行個體的叢集。
-
在叢集頁面上,選擇任務,然後選擇您的任務。
您啟動的每個容器執行個體都應該有任務在正在其中執行。
如果您看不到任務,則可以使用 登入容器執行個體,SSH並檢查
/var/log/ecs/ecs-start-task.log
檔案是否有偵錯資訊。