AWS ECS: 서비스 + 자동 확장 및 사용자 데이터 시작 작업 비교

AWS ECS: 서비스 + 자동 확장 및 사용자 데이터 시작 작업 비교

EC2 출시를 사용하여 ECS에 대해 알아보려고 합니다(적어도 지금은 Fargate가 아님).

모든 컨테이너 인스턴스에서 시작하려는 단일 장기 실행 작업을 가정해 보겠습니다. 이에 대한 의도된 메커니즘은 내가 구성한 만큼 많은 작업 인스턴스를 시작하는 서비스인 것으로 보입니다. 이 경우 컨테이너 인스턴스와 동일한 수의 작업으로 시작합니다.

자동 크기 조정은 두 가지 계층으로 존재하는 것으로 보입니다. 클러스터는 인스턴스를 자동 크기 조정할 수 있고 서비스는 작업 수를 자동 크기 조정할 수 있습니다. 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를 기반으로 하는 시작 구성을 사용하여 Auto Scaling 그룹을 생성하고 ECS 권한이 있는 역할을 할당해야 했습니다. 그런 다음 표시된 대로 사용자 데이터를 포함할 수 있었습니다. 모든 것이 올바르게 구성되고 인스턴스가 퍼블릭 인터넷에 액세스할 수 있으면 인스턴스가 시작 시 ECS 클러스터에 등록되고 내 작업이 실행됩니다.

이는 실행하려는 작업과 독립적으로 존재하는 컨테이너를 갖거나 전체 컨테이너를 다시 시작하지 않고 실패할 때 다시 시작할 수 있는 작업에 대해서는 좋은 솔루션이 아닙니다.

관련 정보