Fargate 작업에서 Amazon ECS Exec을 수행할 때 발생하는 오류를 해결하려면 어떻게 해야 하나요?

5분 분량
0

AWS Fargate 작업에서 Amazon Elastic Container Service(Amazon ECS) Exec을 수행할 때 발생하는 오류를 해결하고 싶습니다.

간략한 설명

Fargate 작업에 Amazon ECS Exec을 사용할 때 다음과 같은 오류 설명이 표시될 수 있습니다.

  • ExecuteCommand 작업을 호출할 때 오류(InvalidParameterException)가 발생합니다. 작업을 실행할 때 실행 명령이 활성화되지 않았거나 실행 명령 에이전트가 실행 중이 아니기 때문에 실행 명령이 실패했습니다. 잠시 기다렸다가 다시 시도하거나 실행 명령이 활성화된 상태에서 새 작업을 실행한 후 다시 시도하십시오.
  • ExecuteCommand 작업을 호출할 때 오류(TargetNotConnectedException)가 발생합니다. 내부 오류로 인해 실행 명령이 실패했습니다. 나중에 다시 시도하십시오.

이러한 오류를 해결하려면 InvalidParameterTargetNotConnectedException문제를 해결하십시오.

해결 방법

참고: AWS CloudShell을 사용하는 것이 좋습니다. CloudShell은 AWS Systems Manager Session Manager 플러그인 및 AWS Command Line Interface(AWS CLI)와 함께 사전 설치되어 제공됩니다. AWS CLI 명령을 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 실행하고 있는지 확인합니다.

중요: AWS CLI 명령의 example 문자열은 모두 원하는 값으로 변경해야 합니다. 예를 들어 example-cluster-name은 클러스터 이름으로 변경합니다.

InvalidParameterException 오류 문제 해결

Fargate 작업에 ExecuteCommand 옵션을 활성화하지 않으면 InvalidParameterException 오류가 발생합니다. 이 문제를 해결하려면 다음 단계를 완료합니다.

1.    enableExecuteCommand 파라미터가 true 또는 false로 설정되어 있는지 확인합니다.

aws ecs describe-tasks --cluster <example-cluster-name> --tasks <example-task-id>| grep enableExecuteCommand

2.    enableExecuteCommand 파라미터가 false인 경우 파라미터를 true로 업데이트합니다.

aws ecs update-service --cluster <example-cluster-name> --service <example-service> --region <example-region> --enable-execute-command --force-new-deployment

참고: force-new-deployment 옵션은 서비스의 배포 구성에 따라 새 작업을 시작하고 이전 작업을 중지하는 새로운 배포를 생성합니다. 자세한 내용은 롤링 업데이트를 참조하십시오.

TargetNotConnectedException 오류 문제 해결

TargetNotConnectionException 오류를 해결하려면 다음 단계를 완료합니다.

  • 필요한 권한 및 네트워크 구성을 확인합니다.
  • Amazon ECS Exec을 사용하여 올바른 쉘이 있는 컨테이너에 들어갑니다.
  • Amazon ECS Exec에 대한 로그를 생성하여 문제를 파악합니다.

필요한 권한 및 네트워킹 구성 확인

1.    Amazon ECS Exec이 컨테이너에 권한을 부여하려면 작업 IAM 역할이 필요합니다. 다음 정책을 사용하여 작업 IAM 역할에 필요한 SSM 권한을 추가합니다.

{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}

자세한 내용은 작업 IAM 역할을 참조하십시오.

2.    Amazon ECS와 인터페이스 Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트를 사용하는 경우 Systems Manager Session Manager를 위한 다음 엔드포인트를 생성합니다.

  • ec2messages.region.amazonaws.com
  • ssm.region.amazonaws.com
  • ssmmessages.region.amazonaws.com

자세한 내용은 6단계를 참조하십시오. (선택 사항) AWS PrivateLink를 사용하여 Session Manager를 위한 VPC 엔드포인트를 설정합니다.

3.    check-ecs-exec.sh 스크립트를 실행하여 AWS CLI 환경과 Amazon ECS 클러스터 또는 작업이 Amazon ECS Exec을 사용할 준비가 되었는지 확인합니다. 전제조건을 충족하는지 확인합니다. 자세한 내용은 GitHub 웹사이트의 Amazon ECS Exec Checker를 참조하십시오.

참고: check-ecs-exec.sh 스크립트를 실행한 후 출력에는 ECS Exec을 사용하기 전에 해결해야 하는 사항이 표시됩니다.

예시 출력:

Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
  jq      | OK (/usr/bin/jq)
  AWS CLI | OK (/usr/local/bin/aws)

-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
  AWS CLI Version        | OK (aws-cli/2.11.0 Python/3.11.2 Linux/4.14.255-291-231.527.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off)
  Session Manager Plugin | OK (1.2.398.0)

-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : us-east-1
Cluster: Fargate-Testing
Task   : ca27e41ea3f54fd1804ca00feffa178d
-------------------------------------------------------------
  Cluster Configuration  | Audit Logging Not Configured
  Can I ExecuteCommand?  | arn:aws:iam::12345678:role/Admin
     ecs:ExecuteCommand: allowed
     ssm:StartSession denied?: allowed
  Task Status            | RUNNING
  Launch Type            | Fargate
  Platform Version       | 1.4.0
  Exec Enabled for Task  | NO
  Container-Level Checks |
    ----------
      Managed Agent Status - SKIPPED
    ----------
    ----------
      Init Process Enabled (Exec-check:2)
    ----------
         1. Disabled - "nginx"
    ----------
      Read-Only Root Filesystem (Exec-check:2)
    ----------
         1. Disabled - "nginx"
  Task Role Permissions  | arn:aws:iam::12345678:role/L3-session
     ssmmessages:CreateControlChannel: implicitDeny
     ssmmessages:CreateDataChannel: implicitDeny
     ssmmessages:OpenControlChannel: implicitDeny
     ssmmessages:OpenDataChannel: implicitDeny
  VPC Endpoints          | SKIPPED (vpc-abcd - No additional VPC endpoints required)
  Environment Variables  | (Exec-check:2)
       1. container "nginx"
       - AWS_ACCESS_KEY: not defined
       - AWS_ACCESS_KEY_ID: not defined
       - AWS_SECRET_ACCESS_KEY: not defined

위 출력은 해당 작업에 대해 ECS Exec이 활성화되지 않았고 필요한 SSM 권한이 작업 역할에 없음을 나타냅니다.

4.    액세스 키 또는 비밀 액세스 키를 지정하는 등 컨테이너 수준에서 IAM 사용자 보안 인증을 구성했는지 확인합니다. 컨테이너 수준에서 IAM 사용자 보안 인증을 구성하면 작업 수준의 권한이 무시되고 오류가 발생합니다.

Amazon ECS Exec을 사용하여 올바른 쉘이 있는 컨테이너에 들어가기

기본 이미지마다 다른 쉘을 포함할 수 있으며, 잘못된 쉘을 사용하면 오류가 발생합니다. 애플리케이션 이미지에 맞는 올바른 셸을 사용하고 있는지 확인하십시오.

다음 명령을 실행하여 ECS Exec을 사용하여 컨테이너로 들어갑니다. example_shell은 사용하는 쉘로 변경합니다.

aws ecs execute-command --region <example-region> --cluster <example-cluster> --container <example-container> --task <example-task> --command "<example_shell>" --interactive

Amazon ECS Exec에 대한 로그를 생성하여 문제 파악

SSM 에이전트 로그를 생성하여 Fargate 작업 내에서 ECS Exec이 작동하지 않는 이유를 파악합니다. 컨테이너 정의의 환경 섹션에서 다음 명령을 실행합니다.

콘솔:

bin/bash,-c,sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log

JSON:

"/bin/bash","-c","sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log"

awslogs 로그 드라이버를 사용하는 경우, 앞의 명령은 SSM 에이전트 로그를 생성하고 이를 Amazon CloudWatch 로그 그룹으로 전송합니다. 다른 로그 드라이버를 사용하거나 엔드포인트를 로깅하는 경우 해당 위치로 SSM 에이전트 로그가 전송됩니다.

JSON을 사용한 예시:

"entryPoint": [],
      "portMappings": [],
      "command": [
        "bin/bash",
        "-c",
        "sleep 2m && cat /var/log/amazon/ssm/amazon-ssm-agent.log"
      ],

참고: 애플리케이션에 따라 쉘과 편집기가 다릅니다. 애플리케이션에 따라 명령 파라미터를 검토하고 수정해야 합니다.

관련 정보

ECS Exec 사용

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠