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:
-
endpoint_url(url: Into<String>) -
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
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ónforce_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
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
[profilelocalstack] 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