Amazon ECS 짧은 서비스 ARN을 긴 ARN으로 마이그레이션

Amazon ECS 짧은 서비스 ARN을 긴 ARN으로 마이그레이션

Amazon ECS는 각 서비스에 고유한 Amazon 리소스 이름(ARN)을 할당해요. 2021년 이전에 생성된 서비스는 짧은 ARN 형식이에요. 서비스를 다시 만들지 않고도 짧은 ARN 형식의 서비스를 긴 ARN 형식으로 마이그레이션할 수 있어요.

출처: 문서

본문

Amazon ECS는 각 서비스에 고유한 Amazon 리소스 이름(ARN)을 할당합니다. 2021년 이전에 생성된 서비스는 짧은 ARN 형식입니다:

arn:aws:ecs:region:aws_account_id:service/service-name

Amazon ECS는 ARN 형식을 클러스터 이름을 포함하도록 변경했습니다. 이는 긴 ARN 형식입니다:

arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name

서비스를 태그하려면 서비스가 긴 ARN 형식이어야 합니다. 서비스를 다시 만들지 않고도 짧은 ARN 형식의 서비스를 긴 ARN 형식으로 마이그레이션할 수 있습니다. API, CLI 또는 콘솔을 사용할 수 있습니다. 마이그레이션 작업은 되돌릴 수 없습니다. 마이그레이션 과정은 원활하며 서비스에 제로 다운타임을 보장합니다. 마이그레이션 중:

  • 서비스 가용성: 서비스는 트래픽이나 기능에 중단 없이 정상적으로 계속 실행됩니다.
  • 실행 중인 작업: 기존 작업은 중단 없이 계속 실행됩니다. 마이그레이션 후 시작된 새 작업은 taskLongArnFormat 계정 설정이 활성화되어 있으면 긴 ARN 형식을 사용합니다.
  • 컨테이너 인스턴스: 컨테이너 인스턴스는 서비스 ARN 마이그레이션의 영향을 받지 않으며 정상적으로 계속 작동합니다.
  • 서비스 구성: 작업 정의, 네트워킹, 로드 밸런서 구성을 포함한 모든 서비스 설정은 변경되지 않습니다.

짧은 ARN 형식의 서비스를 태그하기 위해 CloudFormation을 사용하려면 API, CLI 또는 콘솔을 사용해 서비스를 마이그레이션해야 합니다. 마이그레이션이 완료된 후 CloudFormation을 사용해 서비스를 태그할 수 있습니다. 짧은 ARN 형식의 서비스를 태그하기 위해 Terraform을 사용하려면 API, CLI 또는 콘솔을 사용해 서비스를 마이그레이션해야 합니다. 마이그레이션이 완료된 후 Terraform을 사용해 서비스를 태그할 수 있습니다.

마이그레이션이 완료된 후 서비스에는 다음 변경 사항이 있습니다.

  • 긴 ARN 형식
    arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
    
  • 콘솔로 마이그레이션할 때 Amazon ECS는 키가 "ecs:serviceArnMigratedAt"이고 값이 마이그레이션 타임스탬프(UTC 형식)인 태그를 서비스에 추가합니다. 이 태그는 태그 할당량에 포함됩니다.
  • CloudFormation 스택의 PhysicalResourceId가 서비스 ARN을 나타내면 값은 변경되지 않고 짧은 서비스 ARN으로 유지됩니다.

사전 준비 사항

서비스 ARN을 마이그레이션하기 전에 다음 작업을 수행하세요.

  1. 짧은 서비스 ARN이 있는지 확인하려면 Amazon ECS 콘솔에서 서비스 세부 정보를 보거나(서비스에 짧은 ARN 형식이 있으면 경고가 표시됨), describe-services의 serviceARN 반환 매개변수를 확인하세요. ARN에 클러스터 이름이 없으면 짧은 ARN입니다. 짧은 ARN의 형식은 다음과 같습니다:
    arn:aws:ecs:region:aws_account_id:service/service-name
    
  2. 생성 날짜를 기록해 두세요.
  3. 짧은 ARN 형식을 사용하는 IAM 정책이 있으면 긴 ARN 형식으로 업데이트하세요. 각 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
    arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
    
    자세한 내용은 AWS Identity and Access Management User Guide의 Editing IAM policies를 참고하세요.
  4. 짧은 ARN 형식을 사용하는 도구가 있으면 긴 ARN 형식으로 업데이트하세요. 각 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
    arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
    
  5. 서비스 긴 ARN 형식을 활성화하세요. serviceLongArnFormat 옵션을 enabled로 설정해 put-account-setting을 실행하세요. 자세한 내용은 Amazon Elastic Container Service API Reference의 put-account-setting을 참고하세요. 서비스에 알 수 없는 createdAt 날짜가 있으면 명령을 루트 사용자로 실행하세요.
    aws ecs put-account-setting --name serviceLongArnFormat --value enabled
    
    예시 출력:
    {
        "setting": {
            "name": "serviceLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::123456789012:role/your-role",
            "type": user
        }
    }
    
  6. 작업 긴 ARN 형식을 활성화하세요. 이 계정 설정은 서비스 마이그레이션이 완료된 후 시작되는 새 작업의 ARN 형식을 제어합니다. taskLongArnFormat 옵션을 enabled로 설정해 put-account-setting을 실행하세요. 자세한 내용은 Amazon Elastic Container Service API Reference의 put-account-setting을 참고하세요. 서비스에 알 수 없는 createdAt 날짜가 있으면 명령을 루트 사용자로 실행하세요.
    aws ecs put-account-setting --name taskLongArnFormat --value enabled
    
    예시 출력:
    {
        "setting": {
            "name": "taskLongArnFormat",
            "value": "enabled",
            "principalArn": "arn:aws:iam::123456789012:role/your-role",
            "type": user
        }
    }
    

    참고: taskLongArnFormat 설정은 기존 작업을 직접 마이그레이션하지 않습니다. 이는 설정이 활성화된 후 생성된 새 작업의 ARN 형식에만 영향을 줍니다. 기존 실행 작업은 정상적인 서비스 작업(배포 또는 확장 활동 등)을 통해 교체될 때까지 현재 ARN 형식을 유지합니다.

절차

다음을 사용해 서비스 ARN을 마이그레이션하세요.

콘솔 사용

  1. https://console.aws.amazon.com/ecs/v2 에서 콘솔을 엽니다.
  2. Clusters 페이지에서 클러스터를 선택합니다.
  3. Services 섹션에서 ARN 열에 경고가 있는 서비스를 선택합니다. 서비스 세부 정보 페이지가 나타납니다.
  4. Migrate to long ARN을 선택합니다. Migrate service 대화 상자가 나타납니다.
  5. Migrate를 선택합니다.

API/CLI 사용 — 태그 리소스로 마이그레이션

사전 준비 사항을 완료한 후 서비스를 태그할 수 있습니다. Amazon ECS는 짧은 ARN이 있는 서비스에 대한 tag-resource API 요청에서 긴 ARN 형식을 전달하는 것을 서비스를 긴 ARN 형식으로 마이그레이션하라는 신호로 간주합니다.

aws ecs tag-resource \
    --resource-arn arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name
    --tags key=key1,value=value1

다음 예시는 키가 "TestService"이고 값이 "WebServers"인 태그로 MyService에 태그를 답니다:

aws ecs tag-resource \
    --resource-arn arn:aws:ecs:us-east-1:123456789012:service/MyCluster/MyService
    --tags key=TestService1,value=WebServers

Terraform 사용

사전 준비 사항을 완료한 후 서비스를 태그할 수 있습니다. aws_ecs_service 리소스를 만들고 tags 참조를 설정하세요. 자세한 내용은 Terraform 문서의 Resource: aws_ecs_service를 참고하세요.

resource "aws_ecs_service" "MyService" {
  name    = "example"
  cluster = aws_ecs_cluster.MyService.id

 tags = {
 "Name"  =  "MyService"
 "Environment"  =  "Production"
 "Department"  =  "QualityAssurance"
  }
}

다음 단계

서비스에 태그를 추가할 수 있습니다. 자세한 내용은 Adding tags to Amazon ECS resources를 참고하세요. 작업 정의 또는 서비스의 태그를 작업으로 전파하려면 propagateTags 매개변수로 update-service를 실행하세요. 자세한 내용은 AWS Command Line Interface Reference의 update-service를 참고하세요.

문제 해결

일부 사용자는 짧은 ARN 형식에서 긴 ARN 형식으로 마이그레이션할 때 다음 오류가 발생할 수 있습니다.

There was an error while migrating the ARN of service service-name. The specified account does not have
serviceLongArnFormat or taskLongArnFormat account settings enabled. Add account
settings in order to enable tagging.

serviceLongArnFormat 계정 설정을 이미 활성화했는데도 이 오류가 발생하면, 긴 ARN 형식에 대한 계정 설정이 서비스를 원래 만든 특정 IAM 주체에 대해 활성화되지 않았기 때문일 수 있습니다.

  1. 서비스를 만든 주체를 식별하세요.
    • 콘솔에서 이 정보는 Amazon ECS 콘솔의 서비스 세부 정보 페이지에 있는 Configuration and networking 탭의 Created by 필드에서 확인할 수 있습니다.
    • AWS CLI의 경우 다음 명령을 실행하세요. 사용자 입력을 여러분의 값으로 바꾸세요.
      aws ecs describe-services --cluster cluster-name --services service-name --query 'services[0].{createdBy: createdBy}'
      
  2. 해당 특정 주체에 대해 필요한 계정 설정을 활성화하세요. 다음 방법 중 하나로 할 수 있습니다.
    • 해당 주체에 대한 IAM 사용자 또는 역할을 전제(assume)한 다음 put-account-setting을 실행합니다.
    • 루트 사용자로 principal-arn을 지정해 명령을 실행합니다. 예시. principal-arn을 1단계의 값으로 바꾸세요.
      aws ecs put-account-setting --name serviceLongArnFormat --value enabled --principal-arn arn:aws:iam::123456789012:role/jdoe
      
    두 방법 모두 서비스를 만든 주체에 필요한 serviceLongArnFormat 계정 설정을 활성화하여 ARN 마이그레이션이 진행되도록 합니다.

더 알아보기 (Learn more)