AWS CLI 재시도 - AWS Command Line Interface

AWS CLI 재시도

이 주제에서는 AWS CLI에서 예기치 않은 문제로 인해 AWS 서비스 호출이 실패하는 것을 어떻게 확인할 수 있는지 설명합니다. 이러한 문제는 서버 측에서 발생하거나 호출하려는 AWS 서비스의 속도 제한으로 인해 실패할 수 있습니다. 이러한 종류의 실패는 일반적으로 특별한 처리가 필요하지 않으며 주로 짧은 대기 기간 후에 자동으로 다시 호출됩니다. AWS CLI는 이러한 종류의 오류 또는 예외가 발생할 때 AWS 서비스에 대한 클라이언트 호출을 다시 시도하는 데 도움이 되는 여러 기능을 제공합니다.

사용 가능한 재시도 모드

AWS CLI에는 버전에 따라 선택할 수 있는 여러 모드가 있습니다.

레거시 재시도 모드

레거시 모드는 다음을 포함하는 제한된 기능을 가진 이전 재시도 핸들러를 사용합니다.

  • 최대 재시도 횟수에 대한 기본값은 4이며, 총 5회의 호출을 시도합니다. 이 값은 max_attempts 구성 파라미터를 통해 덮어쓸 수 있습니다.

  • DynamoDB는 최대 재시도 횟수의 기본값이 9이며, 총 10회의 호출을 시도합니다. 이 값은 max_attempts 구성 파라미터를 통해 덮어쓸 수 있습니다.

  • 다음과 같은 제한된 수의 오류/예외에 대한 재시도 횟수:

    • 일반 소켓/연결 오류:

      • ConnectionError

      • ConnectionClosedError

      • ReadTimeoutError

      • EndpointConnectionError

    • 서비스 측 조절/제한 오류 및 예외:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • ProvisionedThroughputExceededException

  • 429, 500, 502, 503, 504, 509 등 여러 HTTP 상태 코드에 대한 재시도 횟수.

  • 모든 재시도 횟수에는 기본 계수 2의 지수 백오프가 포함됩니다.

표준 재시도 모드

표준 모드는 레거시 모드보다 많은 기능을 가진 AWS SDK 전반의 표준 재시도 규칙의 집합입니다. 이 모드는 AWS CLI 버전 2의 기본값입니다. 표준 모드는 AWS CLI 버전 2를 위해 생성되었으며 AWS CLI 버전 1로 백포트됩니다. 표준 모드의 기능은 다음과 같습니다.

  • 최대 재시도 횟수에 대한 기본값은 2이며, 총 3회의 호출을 시도합니다. 이 값은 max_attempts 구성 파라미터를 통해 덮어쓸 수 있습니다.

  • 다음과 같은 확장된 오류/예외 목록에 대한 재시도 횟수:

    • 일시적 오류/예외

      • RequestTimeout

      • RequestTimeoutException

      • PriorRequestNotComplete

      • ConnectionError

      • HTTPClientError

    • 서비스 측 조절/제한 오류 및 예외:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • TooManyRequestsException

      • ProvisionedThroughputExceededException

      • TransactionInProgressException

      • RequestLimitExceeded

      • BandwidthLimitExceeded

      • LimitExceededException

      • RequestThrottled

      • SlowDown

      • EC2ThrottledException

  • 설명적이지 않은 일시적인 오류 코드에 대한 재시도 횟수. 특히, 이러한 HTTP 상태 코드는 500, 502, 503, 504입니다.

  • 모든 재시도 횟수에는 최대 백오프 시간 20초 동안 기본 계수 2의 지수 백오프가 포함됩니다.

적응형 재시도 모드

주의

적응형 모드는 실험적 모드이며 기능 및 동작 모두 변경될 수 있습니다.

적응형 재시도 모드는 표준 모드의 모든 기능을 포함하는 실험적 재시도 모드입니다. 표준 모드 기능 외에도 적응형 모드는 각 재시도 시 동적으로 업데이트되는 토큰 버킷 및 속도 제한 변수를 사용하여 클라이언트 측 속도 제한도 도입합니다. 이 모드는 AWS 서비스의 오류/예외 상태 응답에 적응하는 클라이언트 측 재시도의 유연성을 제공합니다.

새로운 재시도를 시도할 때마다 적응형 모드는 AWS 서비스의 응답에 표시된 오류, 예외 또는 HTTP 상태 코드를 기반으로 속도 제한 변수를 수정합니다. 이러한 속도 제한 변수는 클라이언트의 새 호출 속도를 계산하는 데 사용됩니다. AWS 서비스의 각 예외/오류 또는 비 성공 HTTP 응답(위 목록에 제공)은 성공에 도달하거나, 토큰 버킷이 소진되거나, 구성된 최대 시도 값에 도달할 때까지 재시도가 발생할 때 속도 제한 변수를 업데이트합니다.

재시도 모드 구성

AWS CLI에는 클라이언트 객체를 생성할 때 고려해야 할 구성 방법뿐만 아니라 다양한 재시도 구성이 포함됩니다.

사용 가능한 구성 방법

AWS CLI에서 사용자는 다음과 같은 방법으로 재시도를 구성할 수 있습니다.

  • 환경 변수

  • AWS CLI 구성 파일

사용자는 다음 재시도 옵션을 사용자 지정할 수 있습니다.

  • 재시도 모드 - AWS CLI가 사용할 재시도 모드를 지정합니다. 앞에서 설명한 대로 레거시, 표준 및 적응형, 이렇게 3가지 재시도 모드를 사용할 수 있습니다. AWS CLI 버전 2의 경우 표준입니다.

  • 최대 시도 - AWS CLI 재시도 핸들러에서 사용하는 최대 재시도 횟수 값을 지정합니다. 여기서 초기 호출은 사용자가 제공한 값에 포함됩니다. 기본값은 5입니다.

환경 변수에서 재시도 구성 정의

AWS CLI에 대한 재시도 구성을 정의하려면 운영 체제의 환경 변수를 업데이트합니다.

재시도 환경 변수는 다음과 같습니다.

  • AWS_RETRY_MODE

  • AWS_MAX_ATTEMPTS

환경 변수에 대한 자세한 내용은 환경 변수를 사용하여 AWS CLI 구성 섹션을 참조하세요.

AWS 구성 파일에서 재시도 구성 정의

재시도 구성을 변경하려면 글로벌 AWS 구성 파일을 업데이트합니다. AWS 구성 파일의 기본 위치는 ~/.aws/config입니다.

다음은 AWS 구성 파일의 예입니다.

[default] retry_mode = standard max_attempts = 6

구성 파일에 대한 자세한 내용은 구성 및 자격 증명 파일 설정 섹션을 참조하세요.

재시도 로그 보기

AWS CLI는 Boto3의 재시도 방법과 로깅을 사용합니다. 모든 명령에서 --debug 옵션을 사용하여 디버그 로그를 받을 수 있습니다. --debug 옵션을 사용하는 방법에 대한 자세한 내용은 명령줄 옵션 섹션을 참조하세요.

디버그 로그에서 “재시도”를 검색하면 필요한 재시도 정보를 찾을 수 있습니다. 재시도를 위한 클라이언트 로그 항목은 활성화한 재시도 모드에 따라 다릅니다.

레거시 모드:

재시도 메시지는 botocore.retryhandler에 의해 생성됩니다. 다음 3가지 메시지 중 하나가 표시됩니다.

  • No retry needed

  • Retry needed, action of: <action_name>

  • Reached the maximum number of retry attempts: <attempt_number>

표준 또는 적응형 모드:

재시도 메시지는 botocore.retries.standard에 의해 생성됩니다. 다음 3가지 메시지 중 하나가 표시됩니다.

  • No retrying request

  • Retry needed, retrying request after delay of: <delay_value>

  • Retry needed but retry quota reached, not retrying request

botocore 재시도의 전체 정의 파일은 botocore GitHub 리포지토리에서 _retry.json을 참조하세요.