Amazon-Web-Services
AWS ECS:服務 + 自動擴展與使用者數據啟動任務
嘗試使用 EC2 啟動(不是 Fargate,至少目前是這樣)圍繞 ECS。
假設我想使用每個容器實例啟動一個長時間執行的任務。預期的機制似乎是一個服務,它將啟動與我配置一樣多的任務實例——在這種情況下,我從與容器實例相同數量的任務開始。
自動縮放似乎存在於兩層:集群可以自動縮放其實例,服務可以自動縮放任務的數量。如果沒有 Fargate,似乎沒有任何方法可以同步這兩個層。
我想出解決這個限制的一種方法是讓集群上的 CloudWatch 警報觸發橫向擴展,然後在實例創建上使用生命週期掛鉤來觸發服務的橫向擴展。我還沒有弄清楚這將如何用於縮減 - 是否有一些自動生成的服務縮減事件?
然後
我看到了 AWS guide to started a Task on container launch。問題的癥結似乎是這個 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
用於執行任務的方法將減輕所有擔憂。我錯過了什麼?這是具有自動縮放功能的服務的可行替代方案嗎?
在與 AWS 的支持人員討論後,這似乎是解決我的問題的一個很好的解決方案。
為了進行設置,我需要使用以 Amazon ECS 優化 AMI 為基礎的啟動配置創建一個自動擴展組,並為其分配一個具有 ECS 權限的角色。然後我能夠包含使用者數據,如圖所示。當一切配置正確(並且實例具有公共 Internet 訪問權限)時,實例將在啟動時將自己註冊到我的 ECS 集群,它們將執行我的任務。
對於擁有獨立於您要執行的任務的容器,或者對於可以在失敗時重新啟動而不重新啟動整個容器的任務,這不是一個好的解決方案。