Amazon EC2 API 요청에서 상동성 보장 - Amazon Elastic Compute Cloud

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EC2 API 요청에서 상동성 보장

변경 API 요청을 하면 일반적으로 작업의 비동기 워크플로가 완료되기 전에 요청이 결과를 반환합니다. 요청이 이미 결과를 반환했더라도 작업이 완료되기 전에 시간이 초과되거나 다른 서버 문제가 발생할 수도 있습니다. 이로 인해 요청의 성공 여부를 판단하기 어려울 수 있으며 작업이 성공적으로 완료되었는지 확인하기 위해 여러 번의 재시도가 발생할 수 있습니다. 그러나 원래 요청과 후속 재시도가 성공하면 작업이 여러 번 완료됩니다. 즉, 의도한 것보다 더 많은 리소스를 생성할 수 있습니다.

자격 증명은 API 요청이 한 번 이상 완료되지 않도록 합니다. 멱등성 요청을 사용하면 원래 요청이 성공적으로 완료되면 추가 작업을 수행하지 않고 후속 재시도가 성공적으로 완료됩니다. 그러나 결과에는 현재 생성 상태와 같은 업데이트된 정보가 포함될 수 있습니다.

Amazon의 자격 증명 EC2

다음 API 작업은 기본적으로 동일하지 않으며 추가 구성이 필요하지 않습니다. 해당 AWS CLI 명령은 기본적으로 idempotency도 지원합니다.

기본적으로 Idempotent
  • AssociateAddress

  • CreateVpnConnection

  • DisassociateAddress

  • ReplaceNetworkAclAssociation

  • TerminateInstances

다음 API 작업은 클라이언트 토큰 를 사용하여 idempotency를 선택적으로 지원합니다. 해당 AWS CLI 명령은 클라이언트 토큰을 사용하여 idempotency도 지원합니다. 클라이언트 토큰은 최대 64ASCII자의 고유한 대/소문자를 구분하는 문자열입니다. 이러한 작업 중 하나를 사용하여 idempotent API 요청을 수행하려면 요청에 클라이언트 토큰을 지정합니다. 다른 API 요청에 동일한 클라이언트 토큰을 재사용해서는 안 됩니다. 동일한 클라이언트 토큰과 동일한 파라미터를 사용하여 성공적으로 완료된 요청을 재시도하면 추가 작업을 수행하지 않고 재시도가 성공합니다. 동일한 클라이언트 토큰을 사용하여 성공적인 요청을 재시도하지만 하나 이상의 파라미터가 리전 또는 가용 영역 외에 다른 경우 IdempotentParameterMismatch 오류와 함께 재시도에 실패합니다.

클라이언트 토큰을 사용한 Idempotent
  • AllocateHosts

  • AllocateIpamPoolCidr

  • AssociateClientVpnTargetNetwork

  • AssociateIpamResourceDiscovery

  • AttachVerifiedAccessTrustProvider

  • AuthorizeClientVpnIngress

  • CopyFpgaImage

  • CopyImage

  • CreateCapacityReservation

  • CreateCapacityReservationFleet

  • CreateClientVpnEndpoint

  • CreateClientVpnRoute

  • CreateEgressOnlyInternetGateway

  • CreateFleet

  • CreateFlowLogs

  • CreateFpgaImage

  • CreateInstanceConnectEndpoint

  • CreateIpam

  • CreateIpamPool

  • CreateIpamResourceDiscovery

  • CreateIpamScope

  • CreateLaunchTemplate

  • CreateLaunchTemplateVersion

  • CreateManagedPrefixList

  • CreateNatGateway

  • CreateNetworkAcl

  • CreateNetworkInsightsAccessScope

  • CreateNetworkInsightsPath

  • CreateNetworkInterface

  • CreateReplaceRootVolumeTask

  • CreateReservedInstancesListing

  • CreateRouteTable

  • CreateTrafficMirrorFilter

  • CreateTrafficMirrorFilterRule

  • CreateTrafficMirrorSession

  • CreateTrafficMirrorTarget

  • CreateVerifiedAccessEndpoint

  • CreateVerifiedAccessGroup

  • CreateVerifiedAccessInstance

  • CreateVerifiedAccessTrustProvider

  • CreateVolume

  • CreateVpcEndpoint

  • CreateVpcEndpointConnectionNotification

  • CreateVpcEndpointServiceConfiguration

  • DeleteVerifiedAccessEndpoint

  • DeleteVerifiedAccessGroup

  • DeleteVerifiedAccessInstance

  • DeleteVerifiedAccessTrustProvider

  • DetachVerifiedAccessTrustProvider

  • ExportImage

  • ImportImage

  • ImportSnapshot

  • ModifyInstanceCreditSpecification

  • ModifyLaunchTemplate

  • ModifyReservedInstances

  • ModifyVerifiedAccessEndpoint

  • ModifyVerifiedAccessEndpointPolicy

  • ModifyVerifiedAccessGroup

  • ModifyVerifiedAccessGroupPolicy

  • ModifyVerifiedAccessInstance

  • ModifyVerifiedAccessInstanceLoggingConfiguration

  • ModifyVerifiedAccessTrustProvider

  • ProvisionIpamPoolCidr

  • PurchaseHostReservation

  • RequestSpotFleet

  • RequestSpotInstances

  • RunInstances

  • StartNetworkInsightsAccessScopeAnalysis

  • StartNetworkInsightsAnalysis

idempotency의 유형
  • 리전 - 각 리전에서 요청은 상용적입니다. 그러나 다른 리전에서 동일한 클라이언트 토큰을 포함하여 동일한 요청을 사용할 수 있습니다.

  • 영역 - 요청은 리전의 각 가용 영역에 속해 있지 않습니다. 예를 들어, 동일한 리전에서 에 대한 두 번의 호출AllocateHosts에서 동일한 클라이언트 토큰을 지정하는 경우 AvailabilityZone 파라미터에 대해 다른 값을 지정하는 경우 호출이 성공합니다.

RunInstances idempotency

RunInstances API 작업은 리전 및 영역 상동성을 모두 사용합니다.

사용되는 idempotency 유형은 요청에서 RunInstances API 가용 영역을 지정하는 방법에 따라 달라집니다. 다음과 같은 경우 요청은 영역 상성을 사용합니다.

  • 배치 데이터 유형의 AvailabilityZone 파라미터를 사용하여 가용 영역을 명시적으로 지정하는 경우

  • SubnetId 파라미터를 사용하여 가용 영역을 암시적으로 지정하는 경우

가용 영역을 명시적으로 또는 암시적으로 지정하지 않으면 요청은 리전 idempotency 를 사용합니다.

영역 구분

영역 구분은 리전의 각 가용 영역에서 요청이 구분되도록 RunInstances API 합니다. 이렇게 하면 리전의 각 가용 영역 내에서 동일한 클라이언트 토큰으로 요청을 한 번만 완료할 수 있습니다. 그러나 동일한 클라이언트 토큰을 사용하여 리전의 다른 가용 영역에서 인스턴스를 시작할 수 있습니다.

예를 들어 us-east-1a 가용 영역에서 인스턴스를 시작하라는 idempotent 요청을 보낸 다음 가용 영역의 요청에 동일한 클라이언트 토큰을 사용하는 경우 각 가용 영역에서 인스턴스를 us-east-1b 시작합니다. 파라미터 중 하나 이상이 다른 경우 해당 가용 영역에서 동일한 클라이언트 토큰을 사용한 후속 재시도는 추가 작업을 수행하지 않고 성공적으로 반환되거나 IdempotentParameterMismatch 오류로 실패합니다.

리전 별개

리전의 특화성은 리전에서 요청이 특화되도록 RunInstances API 합니다. 이렇게 하면 리전 내에서 동일한 클라이언트 토큰을 가진 요청이 한 번만 완료될 수 있습니다. 그러나 클라이언트 토큰이 동일한 동일한 요청을 사용하여 다른 리전에서 인스턴스를 시작할 수 있습니다.

예를 들어 us-east-1 리전에서 인스턴스를 시작하도록 idempotent 요청을 보낸 다음 리전의 요청에 동일한 클라이언트 토큰을 사용하는 경우 각 리전에서 인스턴스를 eu-west-1 시작합니다. 파라미터 중 하나 이상이 다른 경우 해당 리전에서 동일한 클라이언트 토큰을 사용한 후속 재시도는 추가 작업을 수행하지 않고 성공적으로 반환되거나 IdempotentParameterMismatch 오류로 실패합니다.

작은 정보

요청된 리전의 가용 영역 중 하나를 사용할 수 없는 경우 리전 idempotency를 사용하는 RunInstances 요청이 실패할 수 있습니다. AWS 인프라에서 제공하는 가용 영역 기능을 활용하려면 요청된 리전의 다른 가용 영역을 사용할 수 없는 경우에도 영역 idempotency를 사용하여 영역 idempotency를 사용하고 가용 가용 영역을 대상으로 하는 RunInstances 요청이 성공하는 것이 좋습니다.

예시

AWS CLI 명령 예제

AWS CLI 명령을 idempotent로 만들려면 --client-token 옵션을 추가합니다.

예제 1: 자격 증명

다음 allocate-hosts 명령은 클라이언트 토큰을 포함하므로 idempotency를 사용합니다.

aws ec2 allocate-hosts --instance-type m5.large --availability-zone eu-west-1a --auto-placement on --quantity 1 --client-token 550e8400-e29b-41d4-a716-446655440000
예제 2: 실행 인스턴스 리전 idempotency

다음 run-instances 명령은 클라이언트 토큰을 포함하지만 가용 영역을 명시적으로 또는 암시적으로 지정하지 않으므로 리전 idempotency를 사용합니다.

aws ec2 run-instances --image-id ami-b232d0db --count 1 --key-name my-key-pair --client-token 550e8400-e29b-41d4-a716-446655440000
예제 3: 실행 인스턴스 영역 idempotency

다음 run-instances 명령은 클라이언트 토큰과 명시적으로 지정된 가용 영역을 포함하므로 영역 idempotency를 사용합니다.

aws ec2 run-instances --placement "AvailabilityZone=us-east-1a" --image-id ami-b232d0db --count 1 --key-name my-key-pair --client-token 550e8400-e29b-41d4-a716-446655440000

API 요청 예제

API 요청을 idempotent로 만들려면 ClientToken 파라미터를 추가합니다.

예제 1: 자격 증명

다음 AllocateHosts API 요청은 클라이언트 토큰을 포함하므로 idempotency를 사용합니다.

https://ec2.amazonaws.com/?Action=AllocateHosts &AvailabilityZone=us-east-1b &InstanceType=m5.large &Quantity=1 &AutoPlacement=off &ClientToken=550e8400-e29b-41d4-a716-446655440000 &AUTHPARAMS
예 2: RunInstances 리전 별개

다음 RunInstances API 요청은 클라이언트 토큰을 포함하지만 가용 영역을 명시적 또는 묵시적으로 지정하지 않으므로 리전 별칭을 사용합니다.

https://ec2.amazonaws.com/?Action=RunInstances &ImageId=ami-3ac33653 &MaxCount=1 &MinCount=1 &KeyName=my-key-pair &ClientToken=550e8400-e29b-41d4-a716-446655440000 &AUTHPARAMS
예제 3: RunInstances 영역 idempotency

다음 RunInstances API 요청에는 클라이언트 토큰과 명시적으로 지정된 가용 영역이 포함되어 있으므로 영역 idempotency가 사용됩니다.

https://ec2.amazonaws.com/?Action=RunInstances &Placement.AvailabilityZone=us-east-1d &ImageId=ami-3ac33653 &MaxCount=1 &MinCount=1 &KeyName=my-key-pair &ClientToken=550e8400-e29b-41d4-a716-446655440000 &AUTHPARAMS

다음 표에는 악의적인 API 요청에 대해 얻을 수 있는 몇 가지 일반적인 응답이 나와 있으며 재시도 권장 사항을 제공합니다.

응답 권장 사항 설명

200 OK

다시 시도하지 않음

원래 요청이 성공적으로 완료되었습니다. 이후의 모든 재시도는 성공적으로 반환됩니다.

400 시리즈 응답 코드(클라이언트 오류)

다시 시도하지 않음

다음 중에서는 요청에 문제가 있습니다.

  • 유효하지 않은 파라미터 또는 파라미터 조합이 포함되어 있습니다.

  • 권한이 없는 작업 또는 리소스를 사용합니다.

  • 상태를 변경하는 과정에 있는 리소스를 사용합니다.

요청에 상태 변경 프로세스에 있는 리소스가 포함된 경우 요청 재시도가 성공할 수 있습니다.

500 시리즈 응답 코드(서버 오류)

재시도

이 오류는 AWS 서버 측 문제로 인해 발생하며 일반적으로 일시적입니다. 적절한 백오프 전략으로 요청을 반복합니다.