啟動 Amazon ECS Linux 容器執行個體時執行指令碼 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

啟動 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命令在啟動期間自行執行指定的任務。

在容器執行個體啟動階段啟動任務
  1. 修改您的ecsInstanceRoleIAM角色以新增StartTaskAPI操作的許可。如需更多資訊,請參閱 AWS Identity and Access Management IAM 使用者指南中的修改角色

  2. 使用 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==--
  3. 確認您的容器執行個體在正確的叢集中啟動,而且您的任務已啟動。

    1. https://console.aws.amazon.com/ecs/v2 開啟主控台。

    2. 從導覽列選擇您叢集所在的區域。

    3. 在導覽窗格中選擇 Clusters (叢集),並選取託管您容器執行個體的叢集。

    4. 叢集頁面上,選擇任務,然後選擇您的任務。

      您啟動的每個容器執行個體都應該有任務在正在其中執行。

      如果您看不到任務,則可以使用 登入容器執行個體,SSH並檢查/var/log/ecs/ecs-start-task.log檔案是否有偵錯資訊。