Configuración de los puntos de conexión del cliente en el AWS SDK para Rust - AWS SDK para Rust

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.

Configuración de los puntos de conexión del cliente en el AWS SDK para Rust

Cuando el AWS SDK para Rust llama a un Servicio de AWS, uno de sus primeros pasos es determinar dónde enrutar la solicitud. Este proceso se conoce como resolución de puntos de conexión.

Puede configurar la resolución de puntos de conexión para el SDK cuando cree un cliente de servicio. La configuración predeterminada para la resolución de puntos de conexión suele ser adecuada, pero hay varios motivos por los que puede desear modificarla. Dos motivos a modo de ejemplo son los siguientes:

  • Para realizar solicitudes a una versión preliminar o a una implementación local de un servicio.

  • Para acceder a características de servicio específicas que aún no se han modelado en el SDK.

aviso

La resolución de puntos de conexión es un tema complejo del SDK. Si cambia la configuración predeterminada, corre el riesgo de invalidar el código. La configuración predeterminada se aplica a la mayoría de los usuarios en entornos de producción.

Los puntos de conexión personalizados se pueden configurar de forma global para que se utilicen en todas las solicitudes de servicio, o se puede configurar un punto de conexión personalizado para un Servicio de AWS específico.

Los puntos de conexión personalizados se pueden configurar mediante variables de entorno o ajustes del archivo AWS de config compartido. Para obtener información sobre este enfoque, consulte Puntos de conexión específicos del servicio en la Guía de referencia de las herramientas y los SDK de AWS. Para ver la lista completa de ajustes del archivo config compartido y variables de entorno para todos los Servicios de AWS, consulte Identificadores de punto de conexión específicos del servicio.

Como alternativa, esta personalización también se puede configurar en el código, tal y como se muestra en las siguientes secciones.

Configuración personalizada

Puede personalizar la resolución de puntos de conexión de un cliente de servicio con dos métodos que están disponibles al crear el cliente:

  1. endpoint_url(url: Into<String>)

  2. endpoint_resolver(resolver: impl crate::config::endpoint::ResolveEndpoint + `static)

Puede configurar ambas propiedades. Sin embargo, lo más habitual es proporcionar solo una. Para un uso general, lo más frecuente es personalizar endpoint_url.

Configuración de URL de punto de conexión

Puede establecer un valor para endpoint_url que indique un nombre de host «básico» para el servicio. Sin embargo, este valor no es definitivo, ya que se pasa como parámetro a la instancia ResolveEndpoint del cliente. La implementación de ResolveEndpoint puede inspeccionar y, posiblemente, modificar ese valor para determinar el punto de conexión final.

Configuración de punto de conexión de solucionador

La implementación de ResolveEndpoint de un cliente de servicio determina el punto de conexión final resuelto que el SDK utiliza para cualquier solicitud determinada. Un cliente de servicio llama al método resolve_endpoint para cada solicitud y utiliza el valor de EndpointFuture que devuelve el solucionador sin ningún cambio adicional.

El siguiente ejemplo muestra cómo proporcionar una implementación del solucionador de puntos de conexión personalizada para un cliente de Amazon S3 que resuelve un punto de conexión distinto por etapa, como la preparación y la producción:

use aws_sdk_s3::config::endpoint::{ResolveEndpoint, EndpointFuture, Params, Endpoint}; #[derive(Debug)] struct StageResolver { stage: String } impl ResolveEndpoint for StageResolver { fn resolve_endpoint(&self, params: &Params) -> EndpointFuture<'_> { let stage = &self.stage; EndpointFuture::ready(Ok(Endpoint::builder().url(format!("{stage}.myservice.com")).build())) } } let config = aws_config::defaults(BehaviorVersion::latest()) .load() .await; let resolver = StageResolver { stage: std::env::var("STAGE").unwrap() }; let s3_config = aws_sdk_s3::config::Builder::from(&config) .endpoint_resolver(resolver) .build(); let s3 = aws_sdk_s3::Client::from_conf(s3_config);
nota

Los solucionadores de puntos de conexión y, por extensión el indicador ResolveEndpoint, son específicos de cada servicio y, por lo tanto, solo se pueden configurar en la configuración del cliente del servicio. La URL del punto de conexión, por otro lado, se puede configurar mediante una configuración compartida (que se aplica a todos los servicios derivados de ella) o para un servicio específico.

Parámetros de ResolveEndpoint

El método resolve_endpoint acepta parámetros específicos del servicio que contienen propiedades utilizadas en la resolución de puntos de conexión.

Cada servicio incluye las siguientes propiedades básicas:

Nombre Tipo Descripción
region Cadena Región de AWS del cliente.
endpoint Cadena Representación de cadena del conjunto de valores de endpointUrl.
use_fips Booleano Indica si los puntos de conexión de FIPS están habilitados en la configuración del cliente.
use_dual_stack Booleano Indica si los puntos de conexión de doble pila están habilitados en la configuración del cliente.

Los Servicios de AWS pueden especificar las propiedades adicionales necesarias para la resolución. Por ejemplo, los parámetros de punto de conexión de Amazon S3 incluyen el nombre de bucket y también varios ajustes de características específicas de Amazon S3. Por ejemplo, la propiedad force_path_style determina si se puede utilizar el direccionamiento de host virtual.

Si implementa su propio proveedor, no debería ser necesario que cree su propia instancia de parámetros de punto de conexión. El SDK proporciona las propiedades de cada solicitud y las pasa a su implementación de resolve_endpoint.

Comparación entre el uso deendpoint_url y el uso de endpoint_resolver

Es importante entender que las dos configuraciones siguientes, una que usa endpoint_url y otra que usa endpoint_resolver, NO producen clientes con un comportamiento de resolución de puntos de conexión equivalente.

use aws_sdk_s3::config::endpoint::{ResolveEndpoint, EndpointFuture, Params, Endpoint}; #[derive(Debug, Default)] struct CustomResolver; impl ResolveEndpoint for CustomResolver { fn resolve_endpoint(&self, _params: &Params) -> EndpointFuture<'_> { EndpointFuture::ready(Ok(Endpoint::builder().url("https://endpoint.example").build())) } } let config = aws_config::defaults(BehaviorVersion::latest()) .load() .await; // use endpoint url aws_sdk_s3::config::Builder::from(&config) .endpoint_url("https://endpoint.example") .build(); // Use endpoint resolver aws_sdk_s3::config::Builder::from(&config) .endpoint_resolver(CustomResolver::default()) .build();

El cliente que establece la endpoint_url especifica una URL base que se pasa al proveedor (predeterminado) y que se puede modificar como parte de la resolución de puntos de conexión.

El cliente que establece el endpoint_resolver especifica la URL final que utilizará el cliente de Amazon S3.

Ejemplos

Los puntos de conexión personalizados se utilizan a menudo para la realización de pruebas. En lugar de realizar llamadas al servicio basado en la nube, las llamadas se enrutan a un servicio simulado alojado de manera local. Dos de estas opciones son las que se indican a continuación.

  • DynamoDB local: una versión local del servicio Amazon DynamoDB.

  • LocalStack: un emulador de servicio en la nube que se ejecuta en un contenedor de la máquina local.

Los siguientes ejemplos ilustran dos formas diferentes de especificar un punto de conexión personalizado para usar estas dos opciones de prueba.

Uso de DynamoDB local directamente en el código

Como se ha descrito en las secciones anteriores, puede establecer la endpoint_url directamente en el código para anular el punto de conexión base para que apunte al servidor DynamoDB local. En el código:

let config = aws_config::defaults(aws_config::BehaviorVersion::latest()) .test_credentials() // DynamoDB run locally uses port 8000 by default. .endpoint_url("http://localhost:8000") .load() .await; let dynamodb_local_config = aws_sdk_dynamodb::config::Builder::from(&config).build(); let client = aws_sdk_dynamodb::Client::from_conf(dynamodb_local_config);

El ejemplo completo está disponible en GitHub.

Uso de LocalStack mediante el archivo config

Puede establecer puntos de conexión específicos del servicio en su archivo config de AWS compartido. El siguiente perfil de configuración establece la endpoint_url para conectarse a localhost en el puerto 4566. Para obtener más información sobre la configuración de LocalStack, consulte Acceso a LocalStack a través de la URL de punto de conexión en el sitio web de documentación de LocalStack.

[profile localstack] region=us-east-1 endpoint_url = http://localhost:4566

El SDK recopilará los cambios en el archivo config compartido y los aplicará a sus clientes del SDK cuando utilice el perfil de localstack. Con este enfoque, el código no necesita incluir ninguna referencia a los puntos de conexión y tendría el siguiente aspecto:

// set the environment variable `AWS_PROFILE=localstack` when running // the application to source `endpoint_url` and point the SDK at the // localstack instance let config = aws_config::defaults(BehaviorVersion::latest()).load().await; let s3_config = aws_sdk_s3::config::Builder::from(&config) .force_path_style(true) .build(); let s3 = aws_sdk_s3::Client::from_conf(s3_config);

El ejemplo completo está disponible en GitHub.