

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ensuring idempotency in Amazon EC2 API requests
<a name="ec2-api-idempotency"></a>

Cuando realiza una solicitud de API de mutación, la solicitud suele devolver un resultado antes de que se hayan completado los flujos de trabajo asíncronos de la operación. También es posible que se agote el tiempo de espera de las operaciones o que surjan otros problemas con el servidor antes de que finalicen, aunque la solicitud ya haya devuelto un resultado. Esto podría dificultar la determinación de si la solicitud se ha realizado correctamente o no, y podría dar lugar a múltiples reintentos para garantizar que la operación se completa correctamente. No obstante, si la solicitud original y los reintentos posteriores se realizan correctamente, la operación se completa varias veces. Esto significa que podría crear más recursos de los previstos.

La *idempotencia* garantiza que una solicitud a la API no se complete más de una vez. Con una solicitud idempotente, si la solicitud original se completa correctamente, cualquier reintento posterior también se completa correctamente sin realizar ninguna otra acción. Sin embargo, el resultado podría contener información actualizada, como el estado de creación actual.

**Topics**
+ [

## Idempotencia en Amazon EC2
](#client-tokens)
+ [

## Idempotencia de RunInstances
](#run-instances-idempotency)
+ [

## Ejemplos
](#Run_Instance_Idempotency_CLI)
+ [

## Vuelva a intentar las recomendaciones para solicitudes idempotentes
](#recommended-actions)

## Idempotencia en Amazon EC2
<a name="client-tokens"></a>

Las siguientes acciones de la API son idempotentes de forma predeterminada y no requieren configuración adicional. Los comandos AWS CLI correspondientes también admiten idempotencia de forma predeterminada.

**Idempotente de forma predeterminada**
+ AssociateAddress
+ CreateVpnConnection
+ DisassociateAddress
+ ReplaceNetworkAclAssociation
+ TerminateInstances

Las siguientes acciones de la API admiten opcionalmente idempotencia mediante un *token de cliente*. Los comandos AWS CLI correspondientes también admiten idempotencia usando un token de cliente. Un token de cliente es una cadena única que distingue entre mayúsculas y minúsculas de hasta 64 caracteres ASCII. Para realizar una solicitud de API idempotente mediante una de estas acciones, especifique un token de cliente en la solicitud. No debe reutilizar el mismo token de cliente para diferentes solicitudes de API. Si reintenta una solicitud que se completó correctamente con el mismo token de cliente y los mismos parámetros, el reintento se realizará correctamente sin realizar ninguna otra acción. Si vuelve a intentar una solicitud correcta usando el mismo token de cliente, pero uno o más de los parámetros son diferentes, excepto la región o la zona de disponibilidad, el reintento falla y se produce un error `IdempotentParameterMismatch`.

**Idempotencia usando un token de cliente**
+ 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

**Tipos de idempotencia**
+ Regional: las solicitudes son idempotentes en cada región. Sin embargo, puede usar la misma solicitud, incluido el mismo token de cliente, en una región diferente.
+ Zonal: las solicitudes son idempotentes en cada zona de disponibilidad de una región. Por ejemplo, si especifica el mismo token de cliente en dos llamadas a **AllocateHosts** en la misma región, las llamadas se realizan correctamente si especifican valores diferentes para el parámetro **AvailabilityZone**.

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

La acción de la API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) utiliza idempotencia regional y zonal.

El tipo de idempotencia que se utilice depende de cómo especifique la zona de disponibilidad en la solicitud de la API RunInstances. La solicitud utiliza **idempotencia zonal** en los siguientes casos:
+ Si especifica explícitamente una zona de disponibilidad mediante el parámetro **AvailabilityZone** en el tipo de datos **Ubicación**
+ Si especifica implícitamente una zona de disponibilidad mediante el parámetro **SubnetId**

Si no especifica una zona de disponibilidad de forma explícita o implícita, la solicitud usa **Idempotencia regional**.

### Idempotencia zonal
<a name="zonal-idempotency"></a>

La idempotencia zonal garantiza que una solicitud de la API RunInstances sea idempotente en cada zona de disponibilidad de una región. Esto garantiza que una solicitud con el mismo token de cliente solo se pueda completar una vez en cada zona de disponibilidad de una región. Sin embargo, el mismo token de cliente se puede usar para lanzar instancias en otras zonas de disponibilidad de la región.

Por ejemplo, si envía una solicitud idempotente para lanzar una instancia en la zona de disponibilidad `us-east-1a` y, a continuación, utiliza el mismo token de cliente en una solicitud en la zona de disponibilidad `us-east-1b`, lanzamos instancias en cada una de esas zonas de disponibilidad. Si uno o más de los parámetros son diferentes, los reintentos posteriores con el mismo token de cliente en esas zonas de disponibilidad se devuelven correctamente sin realizar ninguna otra acción o se produce un error `IdempotentParameterMismatch`.

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

La idempotencia regional garantiza que una solicitud de la API RunInstances sea idempotente en una región. Esto garantiza que una solicitud con el mismo token de cliente solo se pueda completar una vez en una región. Sin embargo, se puede usar exactamente la misma solicitud, con el mismo token de cliente, para lanzar instancias en una región diferente.

Por ejemplo, si envía una solicitud idempotente para lanzar una instancia en la región `us-east-1` y, a continuación, utiliza el mismo token de cliente en una solicitud en la región `eu-west-1`, lanzamos instancias en cada una de esas regiones. Si uno o más de los parámetros son diferentes, los reintentos posteriores con el mismo token de cliente en esas regiones se devuelven correctamente sin realizar ninguna otra acción o se produce un error `IdempotentParameterMismatch`.

**sugerencia**  
Si una de las zonas de disponibilidad de la región solicitada no está disponible, las solicitudes de RunInstances que utilizan la idempotencia regional podrían fallar. Para aprovechar las características de las zonas de disponibilidad que ofrece la infraestructura de AWS, le recomendamos que utilice la idempotencia zonal al lanzar instancias. Las solicitudes de RunInstances que utilizan la idempotencia zonal y se dirigen a una zona de disponibilidad disponible se ejecutan correctamente aunque no haya otra zona de disponibilidad disponible en la región solicitada.

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

### Ejemplos de comando de AWS CLI
<a name="cli-example"></a>

Para hacer que un comando AWS CLI sea idempotente, agregue la opción `--client-token`. 

**Ejemplo 1: idempotencia**  
El siguiente comando [allocate-hosts](https://docs.aws.amazon.com/cli/latest/reference/ec2/allocate-hosts.html) utiliza la idempotencia, ya que incluye un token de cliente.

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

**Ejemplo 2: idempotencia regional de run-instances**  
El siguiente comando [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) usa idempotencia regional, ya que incluye un token de cliente, pero no especifica explícita o implícitamente una zona de disponibilidad.

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

**Ejemplo 3: idempotencia zonal de run-instances**  
El siguiente comando [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) usa idempotencia zonal, ya que incluye un token de cliente y una zona de disponibilidad especificada explícitamente.

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

### Ejemplos de solicitud de la API
<a name="api-example"></a>

Para hacer que una solicitud de la API sea idempotente, agrega el parámetro `ClientToken`.

**Ejemplo 1: idempotencia**  
La siguiente API [AllocateHosts](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AllocateHosts.html) utiliza idempotencia, ya que incluye un token de cliente.

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

**Ejemplo 2: idempotencia regional de RunInstances**  
La siguiente API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) usa idempotencia regional, ya que incluye un token de cliente, pero no especifica explícita o implícitamente una zona de disponibilidad.

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

**Ejemplo 3: idempotencia zonal de RunInstances**  
La siguiente API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) usa idempotencia zonal, ya que incluye un token de cliente y una zona de disponibilidad especificada explícitamente.

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

## Vuelva a intentar las recomendaciones para solicitudes idempotentes
<a name="recommended-actions"></a>

En la siguiente tabla se muestran algunas respuestas comunes que puede obtener para solicitudes de API idempotentes y se ofrecen recomendaciones de reintento.


| Respuesta | Recomendación | Comentarios | 
| --- | --- | --- | 
|  200 (OK)  |  No reintentar  |  La solicitud original se ha completado correctamente. Cualquier reintento posterior se devuelve correctamente.  | 
|  Códigos de respuesta de la serie 400 ([errores de cliente](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html#CommonErrors))  |  No reintentar  |  Hay un problema con la solicitud, uno de los siguientes:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ec2/latest/devguide/ec2-api-idempotency.html) Si la solicitud implica un recurso que está en proceso de cambiar de estado, el reintento de la solicitud podría realizarse correctamente.  | 
|  Códigos de respuesta de la serie 500 ([errores de servidor](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html#api-error-codes-table-server))  |  Reintentar  |  El error se debe a un problema en el servidor de AWS y suele ser transitorio. Repita la solicitud con una estrategia de retardo adecuada.  | 