AWS Fargate 작업을 위한 Amazon Elastic Container Service(Amazon ECS)에서 AWS Software Development Kit(AWS SDK)를 사용할 때 발생하는 메타데이터 오류를 해결하려고 합니다.
간략한 설명
다음 시나리오를 기반으로 Fargate 작업을 위한 Amazon ECS에서 AWS SDK를 사용할 때 발생하는 메타데이터 오류를 해결합니다.
- Fargate 작업에서 인스턴스 메타데이터를 가져올 수 없습니다.
- 구성에서 자격 증명 누락 또는 자격 증명을 로드할 수 없음 오류가 발생했습니다.
- 간헐적인 메타데이터 오류
- 인스턴스 메타데이터 서비스에서 제한 시간 오류가 발생했습니다.
해결 방법
Fargate 작업에서 인스턴스 메타데이터를 가져올 수 없음
Fargate 작업에서 인스턴스 메타데이터를 가져올 수 없는 경우 다음 단계를 완료하십시오.
-
Amazon ECS Exec를 사용하여 작업의 컨테이너에 액세스합니다.
참고: example-clustername을 클러스터 이름으로 바꾸고, example-taskid를 필요한 작업 ID로 바꾸고, example-containername을 컨테이너 이름으로 바꾸십시오.
aws ecs execute-command --cluster $example-clustername \
--task $example-taskid \
--container $example-containername \
--interactive \
--command "/bin/sh"
-
다음과 같이 메타데이터를 가져옵니다.
플랫폼 버전 1.4.0 이상을 사용하는 Fargate의 작업에는 작업 메타데이터 엔드포인트 버전 4를 사용하십시오.
curl ${ECS_CONTAINER_METADATA_URI_V4}/task
1.4.0 이전의 플랫폼 버전을 사용하는 Fargate의 작업인 경우 다음 명령을 사용하십시오.
curl ${ECS_CONTAINER_METADATA_URI}/task
"구성에서 자격 증명 누락 또는 자격 증명을 로드할 수 없음" 오류 발생
다음 오류 메시지 또는 유사한 오류 메시지를 받았는지 확인하십시오.
"Missing credentials in config or Could not load credentials from any providers or Fail to retrieve token"
이 오류는 작업 정의에 추가된 작업 역할 없이 Fargate 작업을 시작할 때 발생합니다. 이 오류는 수동 RunTask API 작업에서 작업 역할 재정의가 지정되어 있지 않고 다른 AWS 자격 증명이 제공되지 않은 경우에도 발생합니다.
이 오류를 해결하려면 다음 단계를 완료하십시오.
-
Amazon ECS Exec를 사용하여 작업의 컨테이너에 액세스합니다.
참고: example-cluster-name을 클러스터 이름으로 바꾸고, example-task-id를 필요한 작업 ID로 바꾸고, example-container-name을 컨테이너 이름으로 바꾸십시오.
aws ecs execute-command --cluster $example-cluster-name \
--task $example-task-id \
--container $example-container-name \
--interactive \
--command "/bin/sh"
-
작업과 연결된 AWS Identity and Access Management(IAM) 역할을 확인합니다.
curl -s 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
출력 예시:
{
"RoleArn": "arn:aws:iam::ACCOUNT_ID:role/<task_role_name>",
"AccessKeyId": "XXXXXXXXXXXXXXXXX",
"SecretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"Token": "IQoJb......",
"Expiration": "2024-03-29T19:19:25Z"
}
참고: Fargate 작업의 작업 정의에 작업 IAM 역할이 없는 경우 404 페이지를 찾을 수 없음 오류가 반환됩니다.
-
AWS SDK가 Fargate 작업 애플리케이션 코드에 있는 컨테이너 메타데이터의 기본 자격 증명 공급자 체인을 사용하는지 확인합니다. 이를 통해 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 시스템 환경 변수에서 자격 증명을 로드할 수 있습니다.
간헐적인 메타데이터 오류
메타데이터 엔드포인트에 액세스할 때 간헐적인 메타데이터 오류가 발생할 수 있는 원인은 다음과 같습니다.
- 리소스 고갈(예: 높은 CPU 및 메모리 사용률)
- 많은 수의 스레드 또는 프로세스 동시 실행
- CPU 사용 급증
- 애플리케이션에서 실행되는 집약적인 작업으로 인한 작업 볼륨의 높은 디스크 사용량
- 컨테이너 내에서 높은 빈도로 쿼리되는 작업 메타데이터 서비스(API 호출 시 발생)
간헐적인 메타데이터 오류를 해결하려면 다음 작업을 수행하십시오.
- 작업 정의에서 적절한 양의 CPU와 메모리 용량으로 Fargate 작업을 구성합니다. 컨테이너화된 애플리케이션의 지표를 추적하도록 CloudWatch Container Insights를 설정합니다.
- CloudWatch Container Insights와 Amazon ECS 작업 메타데이터 엔드포인트를 사용하여 작업 스토리지 사용률을 모니터링합니다. 디스크 사용률을 확인하고 증가시켜야 하는지 여부를 결정합니다.
- 애플리케이션 코드가 작업 메타데이터 서비스를 쿼리하는 속도를 줄입니다. 예를 들어, AWS 객체를 한 번 생성합니다. 그런 다음, 애플리케이션 코드에서 후속 API 호출을 수행할 때 해당 인스턴스를 재사용합니다.
- 최신 AWS SDK 버전을 사용합니다. 최신 버전의 AWS SDK는 API 호출 시 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 환경 변수에서 자동으로 자격 증명을 가져옵니다.
인스턴스 메타데이터 서비스에서 제한 시간 오류 발생
인스턴스 메타데이터 서비스에서 제한 시간 오류가 발생하는 경우 애플리케이션 코드에 정의된 제한 시간 임계값을 초과한 것입니다. 이 문제는 CPU 또는 메모리 부족으로 인해 메타데이터 서비스 요청이 대기열에 있거나 실행 중인 프로세스 수가 많을 때 발생합니다.
이 오류를 해결하려면, 다음 작업을 수행하십시오.
- 애플리케이션 코드에 정의된 제한 시간을 확인합니다. 인스턴스 메타데이터 서비스에 적절한 제한 시간 값이 있어야 합니다.
- 자격 증명을 가져오려면 재시도를 구현합니다. 또한 메타데이터 서비스에 대한 호출 빈도를 줄입니다.
- 작업 정의에서 적절한 양의 CPU와 메모리로 Fargate 작업을 구성합니다.
관련 정보
Amazon ECS 작업 역할