

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memastikan idempotensi dalam permintaan API Amazon EC2
<a name="ec2-api-idempotency"></a>

Saat Anda membuat permintaan API yang bermutasi, permintaan biasanya menampilkan hasil sebelum alur kerja asinkron operasi selesai. Operasi mungkin juga habis atau mengalami masalah server lain sebelum selesai, meskipun permintaan telah mengembalikan hasilnya. Hal ini dapat membuat sulit untuk menentukan apakah permintaan berhasil atau tidak, dan dapat menyebabkan beberapa percobaan ulang untuk memastikan bahwa operasi selesai dengan sukses. Namun, jika permintaan asli dan percobaan ulang berikutnya berhasil, operasi selesai beberapa kali. Ini berarti Anda dapat membuat lebih banyak sumber daya daripada yang Anda inginkan.

*Idempotency* memastikan bahwa permintaan API selesai tidak lebih dari satu kali. Dengan permintaan idempoten, jika permintaan asli berhasil diselesaikan, percobaan ulang berikutnya berhasil diselesaikan tanpa melakukan tindakan lebih lanjut. Namun, hasilnya mungkin berisi informasi yang diperbarui, seperti status pembuatan saat ini.

**Topics**
+ [

## Idempotensi di Amazon EC2
](#client-tokens)
+ [

## RunInstances idempotensi
](#run-instances-idempotency)
+ [

## Contoh
](#Run_Instance_Idempotency_CLI)
+ [

## Coba lagi rekomendasi untuk permintaan idempoten
](#recommended-actions)

## Idempotensi di Amazon EC2
<a name="client-tokens"></a>

Tindakan API berikut adalah idempoten secara default, dan tidak memerlukan konfigurasi tambahan. AWS CLI Perintah yang sesuai juga mendukung idempotensi secara default.

**Idempoten secara default**
+ AssociateAddress
+ CreateVpnConnection
+ DisassociateAddress
+ ReplaceNetworkAclAssociation
+ TerminateInstances

*Tindakan API berikut secara opsional mendukung idempotensi menggunakan token klien.* AWS CLI Perintah yang sesuai juga mendukung idempotensi menggunakan token klien. Token klien adalah string unik dan peka huruf besar/kecil hingga 64 karakter ASCII. Untuk membuat permintaan API idempoten menggunakan salah satu tindakan ini, tentukan token klien dalam permintaan. Anda tidak boleh menggunakan kembali token klien yang sama untuk permintaan API lainnya. Jika Anda mencoba lagi permintaan yang berhasil diselesaikan menggunakan token klien yang sama dan parameter yang sama, percobaan ulang berhasil tanpa melakukan tindakan lebih lanjut. Jika Anda mencoba kembali permintaan yang berhasil menggunakan token klien yang sama, tetapi satu atau beberapa parameter berbeda, selain Wilayah atau Zona Ketersediaan, percobaan ulang gagal dengan kesalahan`IdempotentParameterMismatch`.

**Idempoten menggunakan token klien**
+ 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

**Jenis idempotensi**
+ Regional — Permintaan bersifat idempoten di setiap Wilayah. Namun, Anda dapat menggunakan permintaan yang sama, termasuk token klien yang sama, di Wilayah yang berbeda.
+ Zonal — Permintaan bersifat idempoten di setiap Availability Zone di suatu Wilayah. Misalnya, jika Anda menentukan token klien yang sama dalam dua panggilan ke **AllocateHosts** Wilayah yang sama, panggilan berhasil jika mereka menentukan nilai yang berbeda untuk **AvailabilityZone** parameter.

## RunInstances idempotensi
<a name="run-instances-idempotency"></a>

Tindakan [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API menggunakan idempotensi Regional dan zona.

Jenis idempotensi yang digunakan bergantung pada cara Anda menentukan Availability Zone dalam permintaan RunInstances API Anda. Permintaan menggunakan **idempotensi zonal dalam kasus** berikut:
+ Jika Anda secara eksplisit menentukan Availability Zone menggunakan **AvailabilityZone**parameter dalam tipe data **Penempatan**
+ Jika Anda secara implisit menentukan Availability Zone menggunakan parameter **SubnetId**

**Jika Anda tidak secara eksplisit atau implisit menentukan Availability Zone, permintaan tersebut menggunakan idempotensi Regional.**

### Idempotensi zona
<a name="zonal-idempotency"></a>

Idempotensi zona memastikan bahwa permintaan RunInstances API idempoten di setiap Availability Zone di Region. Ini memastikan bahwa permintaan dengan token klien yang sama hanya dapat diselesaikan sekali dalam setiap Availability Zone di Region. Namun, token klien yang sama dapat digunakan untuk meluncurkan instance di Availability Zone lainnya di Region.

Misalnya, jika Anda mengirim permintaan idempoten untuk meluncurkan instance di `us-east-1a` Availability Zone, dan kemudian menggunakan token klien yang sama dalam permintaan di `us-east-1b` Availability Zone, kami meluncurkan instance di masing-masing Availability Zone tersebut. Jika satu atau beberapa parameter berbeda, percobaan ulang berikutnya dengan token klien yang sama di Availability Zones tersebut berhasil kembali tanpa melakukan tindakan lebih lanjut atau gagal dengan `IdempotentParameterMismatch` kesalahan.

### Idempotensi regional
<a name="regional-idempotency"></a>

Idempotensi regional memastikan bahwa permintaan RunInstances API idempoten di Wilayah. Ini memastikan bahwa permintaan dengan token klien yang sama hanya dapat diselesaikan sekali dalam Wilayah. Namun, permintaan yang sama persis, dengan token klien yang sama, dapat digunakan untuk meluncurkan instance di Wilayah yang berbeda.

Misalnya, jika Anda mengirim permintaan idempoten untuk meluncurkan instance di `us-east-1` Wilayah, dan kemudian menggunakan token klien yang sama dalam permintaan di `eu-west-1` Wilayah, kami meluncurkan instance di masing-masing Wilayah tersebut. Jika satu atau lebih parameter berbeda, percobaan ulang berikutnya dengan token klien yang sama di Wilayah tersebut berhasil kembali tanpa melakukan tindakan lebih lanjut atau gagal dengan `IdempotentParameterMismatch` kesalahan.

**Tip**  
Jika salah satu Availability Zone di Region yang diminta tidak tersedia, RunInstances permintaan yang menggunakan idempotensi regional bisa gagal. Untuk memanfaatkan fitur Availability Zone yang ditawarkan oleh AWS infrastruktur, sebaiknya gunakan idempotensi zona saat meluncurkan instance. RunInstances permintaan yang menggunakan idempotensi zona dan menargetkan Availability Zone yang tersedia berhasil meskipun Availability Zone lain di Wilayah yang diminta tidak tersedia.

## Contoh
<a name="Run_Instance_Idempotency_CLI"></a>

### AWS CLI contoh perintah
<a name="cli-example"></a>

Untuk membuat AWS CLI perintah idempoten, tambahkan opsi. `--client-token` 

**Contoh 1: Idempotensi**  
Perintah [allocate-hosts](https://docs.aws.amazon.com/cli/latest/reference/ec2/allocate-hosts.html) berikut menggunakan idempotency karena menyertakan token klien.

```
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
```

**Contoh 2: run-instance idempotensi regional**  
Perintah [run-instance](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) berikut menggunakan idempotensi regional karena menyertakan token klien tetapi tidak secara eksplisit atau implisit menentukan Availability Zone.

```
aws ec2 run-instances --image-id ami-b232d0db --count 1 --key-name my-key-pair --client-token 550e8400-e29b-41d4-a716-446655440000
```

**Contoh 3: run-instance idempotensi zona**  
Perintah [run-instance](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) berikut menggunakan idempotensi zonal karena menyertakan token klien dan Availability Zone yang ditentukan secara eksplisit.

```
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
```

### Contoh permintaan API
<a name="api-example"></a>

Untuk membuat permintaan API idempoten, tambahkan parameter. `ClientToken`

**Contoh 1: Idempotensi**  
Permintaan [AllocateHosts](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AllocateHosts.html)API berikut menggunakan idempotensi karena menyertakan token klien.

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

**Contoh 2: RunInstances idempotensi regional**  
Permintaan [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API berikut menggunakan idempotensi regional karena menyertakan token klien tetapi tidak secara eksplisit atau implisit menentukan Availability Zone.

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

**Contoh 3: RunInstances idempotensi zonal**  
Permintaan [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API berikut menggunakan idempotensi zona karena menyertakan token klien dan Availability Zone yang ditentukan secara eksplisit.

```
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
```

## Coba lagi rekomendasi untuk permintaan idempoten
<a name="recommended-actions"></a>

Tabel berikut menunjukkan beberapa tanggapan umum yang mungkin Anda dapatkan untuk permintaan API idempoten, dan memberikan rekomendasi coba ulang.


| Respons | Rekomendasi | Komentar | 
| --- | --- | --- | 
|  200 (OK)  |  Jangan coba lagi  |  Permintaan asli berhasil diselesaikan. Setiap percobaan ulang berikutnya berhasil kembali.  | 
|  Kode respons 400 seri (kesalahan [klien](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html#CommonErrors))  |  Jangan coba lagi  |  Ada masalah dengan permintaan, dari antara yang berikut:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ec2/latest/devguide/ec2-api-idempotency.html) Jika permintaan melibatkan sumber daya yang sedang dalam proses mengubah status, mencoba kembali permintaan mungkin berhasil.  | 
|  Kode respons 500 seri (kesalahan [server](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html#api-error-codes-table-server))  |  Coba lagi  |  Kesalahan ini disebabkan oleh masalah AWS sisi server dan umumnya bersifat sementara. Ulangi permintaan dengan strategi backoff yang sesuai.  | 