Blog de Amazon Web Services (AWS)
Integración con Amazon S3 de forma transparente en una arquitectura de múltiples Regiones
Por Luiz Yanai, Arquitecto de Soluciones en AWS
Introducción y casos de uso
Existen diferentes escenarios y casos de uso que requieren el uso de recursos distribuidos en todo el mundo para componer una solución. Uno de ellos es la necesidad de acercar los recursos de las Regiones más cercanas a los consumidores, con el fin de reducir la latencia de acceso a estos mismos. En escenarios de recuperación ante desastres, mantener una copia de sus recursos y/o datos en otras Regiones, permite una respuesta más rápida de las aplicaciones en caso de fallas locales, al reducir el Punto de Recuperación Objetivo (RPO) y el Tiempo de Recuperación Objetivo (RTO).
Las capacidades de la nube de AWS proporcionan formas de implementar fácilmente una arquitectura distribuida globalmente que respalde los escenarios mencionados. Y parte de estas capacidades es que una infraestructura más compleja no se traduce en una mayor complejidad en la parte del código de implementación.
Cuando se trata de recursos, un recurso muy importante en cualquier arquitectura son los datos. Los datos se pueden almacenar en diferentes formas y formatos, y en diferentes servicios: bases de datos, almacenamiento de bloques, almacenamiento de objetos, entre otros. Un servicio clave que se convierte en la piedra angular de la replicación de datos en varias Regiones es Amazon S3.
En septiembre de 2021, se lanzó una nueva funcionalidad que ofrece un punto de enlace global para que los consumidores accedan a buckets únicos o replicados en varias Regiones, mediante enlaces de menor latencia, denominado Amazon S3 Multi-Region Access Point.
Característica del Multi-Region Access Point de Amazon S3
El Multi-Region Access Point de Amazon S3 proporciona un punto de enlace global que las aplicaciones pueden utilizar para enviar sus solicitudes a buckets de S3 ubicados en varias Regiones de AWS. Puede usar el Multi-Region Access Point para crear aplicaciones de múltiples Regiones con la misma arquitectura simple que usa en una sola Región y, por consiguiente, ejecutar sus aplicaciones en cualquier parte del mundo. En lugar de enviar solicitudes a través de la Internet pública, normalmente congestionada, los Multi-Region Access Point proporcionan resiliencia de red con mayor velocidad integrada para las solicitudes hacia Amazon S3. Esto se debe a que las solicitudes de las aplicaciones realizadas a un punto de enlace global del Multi-Region Access Point utilizan AWS Global Accelerator, lo que les permite enrutarse automáticamente a través de la red global de AWS al bucket de S3 con la menor latencia de red.
Cuando se crea un Multi-Region Access Point, se especifica una lista de Regiones en las que desea almacenar sus datos para que se sirvan a través de él. Se puede usar Cross-Region Replication (CRR) de Amazon S3 para sincronizar datos entre los buckets de estas Regiones y se soportan tanto la lectura como la escritura de datos a través del punto de enlace. Amazon S3 atiende automáticamente las solicitudes con el conjunto de datos replicado que esté disponible en la Región de menor latencia. Un punto importante es que los Multi-Region Access Points también están disponibles para que sean accedidos por las aplicaciones que se ejecutan en Amazon Virtual Private Cloud (Amazon VPC), incluidas aquellas que utilizan AWS PrivateLink for Amazon S3.
Accediendo a buckets en varias Regiones
Antes del lanzamiento de esta nueva funcionalidad, para implementar llamadas a Amazon S3 era necesario definir el punto de enlace Regional del servicio para realizar el acceso (o usar el valor predeterminado de acuerdo con la configuración local). Amazon S3 proporciona diferentes SDKs (Node.js, Python, .NET, Java, etc.) para realizar este acceso y pueden tener comportamientos diferentes con respecto a la gestión cuando el recurso no se encuentra en la Región configurada en el punto de enlace.
Para algunos SDKs, aparece el mensaje «The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.” cuando el bucket u objeto no existe en la Región definida.
Para abstraer este tipo de comportamiento e incluso admitir escenarios con replicación de buckets hacia otras Regiones, se recomienda utilizar el alias del Multi-Region Access Point en las llamadas sin necesidad de indicar ninguna información de la Región.
Para aclarar la arquitectura sugerida, mire el siguiente ejemplo:
En este escenario, tenemos tres buckets disponibles en tres Regiones distintas (bucket A en São Paulo, bucket B en Oregón y bucket C en Virginia del Norte) y una serie de microservicios dentro de una VPC en la región de São Paulo. Los buckets A y B tienen los mismos objetos (archivos) y utilizan la función de Cross-Region Replication (CRR) de Amazon S3 para mantener los objetos sincronizados.
Los microservicios necesitan acceder a los datos de los tres buckets de acuerdo con las necesidades específicas de cada microservicio y se desea evitar que la información de Región sea defina en la implementación de las consultas. Para ello, se crean dos Multi-Region Access Points: uno para el bucket C en Virginia y el otro para acceder a los objetos replicados en los buckets A y B.
Pensando en un escenario de acceso más seguro, en lugar de acceder a los Multi-Region Access Points a través de la Internet pública, accederemos a ellos a través de un VPC Endpoint configurado en la VPC y en las subredes privadas donde se ejecutan los servicios que consumen los buckets de S3.
Hay un tipo de Interface Endpoint específico para este recurso (com.amazonaws.s3-global.accesspoint) que es diferente al VPC Endpoint para el acceso privado a Amazon S3 (com.amazonaws. <region>.s3). Como es un punto de enlace de tipo Interface, las Elastic Network Interfaces (ENI) se crean en las subredes privadas con un DNS privado para el acceso, y no se requieren reglas de enrutamiento específicas.
La parte de configuración de los Multi-Region Access Points es muy sencilla. Para el caso de crear un alias para un solo bucket (bucket C en el ejemplo), simplemente se añade el bucket a la configuración. El Multi-Region Access Point también admite el escenario de registro de más de un bucket asociado con el alias (buckets A y B) y, en este caso, el acceso realizado por la aplicación cliente (service A,…, N) localiza el bucket que ofrece la menor latencia de acceso dentro de los incluidos en el configuración.
Un ejemplo de código que utiliza el alias es el siguiente:
Código de ejemplo para llamar con el SDK de Node.js.
const { S3Client, ListObjectsCommand } = require("@aws-sdk/client-s3"); async function start() { const client = new S3Client({ region: "us-east-1" }); const bucketParams = { Bucket: "arn:aws:s3::012345678910:accesspoint/<generatedalias>.mrap" }; const command = new ListObjectsCommand(bucketParams); const response = await client.send(command); console.log(response.Contents); } start();
Observe que el cliente de S3 se configuró con una Región específica (N. Virginia = us-east-1). Sin embargo, el acceso al bucket no se realizará a través del punto de enlace regional de Virginia, sino a través de un punto de enlace global, ya que los parámetros de consulta de bucket han pasado el alias del Multi-Region Access Point.
Lo que cambia en la implementación es solamente apuntar al alias (ARN) del Multi-Region Access Point en lugar del nombre del bucket. El SDK identifica que se trata de un MRAP (Multi-Region Access Point) y utiliza el punto de enlace global para acceder al bucket. Se puede apuntar cualquier Región al cliente S3 que no devuelve ningún mensaje de error relacionado con el punto de enlace.
Esta forma de consulta funciona para el enrutamiento directo a través de Internet o a través del VPC Endpoint.
A continuación se enumeran los pasos de configuración a través de la consola para el Multi-Region Access Point y el Interface Endpoint de la VPC:
Configuración
Para crear un Multi-Region Access Point
- Inicie sesión en la consola de administración de AWS y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
- En el panel de navegación, elija Multi-Region Access Points.
- En el campo Multi-Region Access Point name, asigne un nombre al Multi-Region Access Point.
- Para seleccionar los buckets que se asociarán con este Multi-Region Access Point, elija Add buckets.
Para crear un bucket nuevo, elija Create Bucket. Después de crear el bucket, elija Add buckets para añadir el bucket al Multi-Region Access Point. - En Block Public Access settings for this Multi-Region Access Point, seleccione la configuración de bloqueo de acceso público que desea aplicar al Multi-Region Access Point. De forma predeterminada, todos los ajustes de bloqueo de acceso público están habilitados para los nuevos Multi-Region Access Points. Se recomienda mantener todos los ajustes habilitados a menos que sepa que hay una necesidad específica de deshabilitar alguno de ellos.
- Elija Create Multi-Region Access Point.
Se generan un alias y un ARN para el Multi-Region Access Point que se utilizará más adelante para acceder al contenido y a las operaciones de administración del bucket.
Para crear un Interface Endpoint para el Multi-Region Access Point usando la consola
- Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.
- En el panel de navegación, elija Endpoints, y luego Create Endpoint.
- En Service Category, asegúrese que AWS Services este seleccionado.
- En Service Name, elija el servicio correspondiente al Multi-Region Access Point:
com.amazonaws.s3-global.accesspoint. - Complete la siguiente información y, a continuación, haga clic en Create endpoint.
- Para la VPC, seleccione la VPC en la que se creará el endpoint.
- Para Subnets, seleccione las subredes (zonas de disponibilidad) en las que se crearán las interfaces de red para el endpoint.
- Para Security Group, seleccione los grupos de seguridad que se van a asociar a las interfaces de red del endpoint.
- Defina la política de acceso al recurso de Interface Endpoint. Elija Full Access para liberar el acceso al punto de enlace para cualquier usuario o servicio. Como alternativa, defina una política personalizada que limite el acceso.
Nota: El Security Group asociado a las interfaces de red del punto de enlace debe permitir que la aplicación del consumidor acceda al puerto 443 para invocar la API de Amazon S3.
Conclusión
En esta publicación vimos cómo la característica del Multi-Region Access Point (MRAP) de Amazon S3 nos permite crear soluciones de múltiples Regiones de una manera sencilla al abstraer la complejidad del acceso a los recursos Regionales. Además de facilitar la lógica de implementación dentro de las aplicaciones de clientes, MRAP proporciona un mejor rendimiento al usar AWS Global Accelerator y también proporciona seguridad al admitir el uso de los VPC Endpoints para el acceso privado a los buckets de Amazon S3.
En términos de seguridad, el uso de los Multi-Region Access Point facilita la administración de las políticas de acceso de IAM para los buckets, e incluso puede incluir reglas que validen el origen de las solicitudes que solo provengan de los servicios dentro de la VPC, evitando el acceso directo y externo. Esta última configuración se realiza en el VPC Endpoint.
En el siguiente blogpost se analiza este control y que puede ser aplicado también en esta arquitectura de ejemplo:
https://aws.amazon.com/blogs/storage/managing-amazon-s3-access-with-vpc-endpoints-and-s3-access-points/
Este artículo fue traducido del Blog de AWS en Portugués.
Sobre el autor
Luiz Yanai es Arquitecto de Soluciones en AWS y experto en tecnologías serverless y de análisis de datos, que ayuda a clientes de varios segmentos en su camino a la nube. Tiene más de 15 años de experiencia en arquitectura y desarrollo de soluciones que involucran sistemas empresariales y de misión crítica.