

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.

# Mejores prácticas para usar el AWS CLI y SDK con Neptune
<a name="best-practices-cli-sdk"></a>

De forma predeterminada, los AWS SDK AWS CLI y los SDK se agotan después de 60 segundos y reintentan automáticamente las solicitudes fallidas. En el caso de las consultas que tardan más de 60 segundos en completarse, este comportamiento predeterminado provoca una ejecución de consultas duplicada. El reintento desencadena una nueva solicitud mientras la consulta original aún se está ejecutando en el servidor.

**importante**  
Cuando ejecute consultas de larga duración a través de la API del plano de datos de Neptune (por ejemplo`execute-open-cypher-query`,), desactive los reintentos automáticos. Aumente o elimine también el tiempo de espera de lectura. De lo contrario, el cliente vuelve a intentar la consulta mientras la original aún se está ejecutando, lo que duplica la carga en el clúster de Neptune.

Las siguientes recomendaciones se aplican a cualquier operación del plano de datos de Neptune que pueda ejecutarse durante más tiempo que el tiempo de espera predeterminado de 60 segundos:
+ Establezca el tiempo de espera de lectura en 0 (infinito) o en un valor superior a la duración máxima esperada de la consulta.
+ Establece el número máximo total de intentos en 1 (un intento, cero reintentos). Esto impide que el cliente vuelva a intentar una solicitud que el servidor aún está procesando.

Los siguientes ejemplos muestran cómo configurar estos ajustes para los SDK AWS CLI y los más populares.

------
#### [ AWS CLI ]

```
export AWS_MAX_ATTEMPTS=1
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://{{your-cluster-endpoint}}:{{port}} \
  --open-cypher-query "RETURN 1" \
  --cli-read-timeout 0
```

El `--cli-read-timeout 0` parámetro desactiva el tiempo de espera de lectura, lo que permite AWS CLI esperar indefinidamente una respuesta. La variable de `AWS_MAX_ATTEMPTS=1` entorno establece el número máximo total de intentos en 1, lo que significa que la solicitud se intenta exactamente una vez sin reintentos.

------
#### [ Python (boto3) ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-cluster-endpoint}}:{{port}}',
    region_name='{{us-east-1}}',
    config=Config(
        retries={'total_max_attempts': 1, 'mode': 'standard'},
        read_timeout=None
    )
)
```

La configuración `read_timeout=None` desactiva el tiempo de espera de lectura. Si `total_max_attempts` se establece en, `1` significa que la solicitud se intenta exactamente una vez sin reintentos.

------
#### [ Java V2 SDK ]

```
import software.amazon.awssdk.services.neptunedata.NeptunedataClient;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.regions.Region;
import java.time.Duration;
import java.net.URI;

// Build the Neptune dataplane client with no retries and infinite timeout
NeptunedataClient neptunedataClient = NeptunedataClient.builder()
    .endpointOverride(URI.create("https://{{your-cluster-endpoint}}:{{port}}"))
    .region(Region.of("{{us-east-1}}"))
    .overrideConfiguration(ClientOverrideConfiguration.builder()
        .apiCallTimeout(Duration.ZERO)
        .retryPolicy(RetryPolicy.none())
        .build())
    .build();
```

Si `apiCallTimeout` se `Duration.ZERO` configura para configurar un tiempo de espera infinito para la llamada a la API. El uso `RetryPolicy.none()` desactiva todos los reintentos automáticos.

------