AWS ECS:服務+自動擴充與使用者資料啟動任務

AWS ECS:服務+自動擴充與使用者資料啟動任務

嘗試使用 EC2 啟動(不是 Fargate,至少目前)來了解 ECS。

假設我想在每個容器實例上啟動一個長期運行的任務。其預期機制似乎是一個服務,它將啟動與我配置的一樣多的任務實例 - 在這種情況下,我從與容器實例相同數量的任務開始。

自動縮放似乎存在於兩層:叢集可以自動縮放其實例,服務可以自動縮放任務數量。如果沒有 Fargate,似乎沒有任何方法可以同步這兩層。

我想出的解決此限制的一種方法是透過 CloudWatch 警報觸發橫向擴展,然後在實例建立上使用生命週期掛鉤來觸發服務的橫向擴展。我仍然沒有弄清楚這對於縮減是如何工作的 - 是否有一些自動生成的事件用於服務縮減?

然後

我看見關於在容器啟動時啟動任務的 AWS 指南。問題的關鍵似乎是這個 MIME 用戶資料:

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

# Install the AWS CLI and the jq JSON parser
yum install -y aws-cli jq

--==BOUNDARY==
Content-Type: text/upstart-job; charset="us-ascii"

#upstart-job
description "Amazon EC2 Container Service (start task on instance boot)"
author "Amazon Web Services"
start on started ecs

script
    exec 2>>/var/log/ecs/ecs-start-task.log
    set -x
    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
end script
--==BOUNDARY==--

雖然文章開頭有免責聲明,但我將其理解為意味著這種用於awscli運行任務的方法將減輕所有擔憂。

我錯過了什麼?這是自動縮放服務的可行替代方案嗎?

答案1

在與 AWS 的支援人員討論這個問題後,這似乎是解決我的問題的一個很好的解決方案。

為了進行此設置,我需要使用啟動配置來建立自動擴充組,該啟動配置以 Amazon ECS 優化的 AMI 為基礎,並為其指派具有 ECS 權限的角色。然後我就可以包含使用者數據,如圖所示。當一切配置正確(並且實例具有公共互聯網訪問權限)時,實例將在啟動時將自身註冊到我的 ECS 集群,並且它們將運行我的任務。

對於擁有獨立於要運行的任務的容器,或者對於可以在失敗時重新啟動而無需重新啟動整個容器的任務來說,這不是一個好的解決方案。

相關內容