

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.

# Sin servidor
<a name="serverless-pattern-list"></a>

**Topics**
+ [Cree una aplicación móvil React Native sin servidor con AWS Amplify](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.md)
+ [Administrar los inquilinos de varios productos SaaS en un único plano de control](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.md)
+ [Consolidación de la generación de URL prefirmadas y las descargas de objetos de Amazon S3 mediante un punto de conexión asociado a direcciones IP estáticas](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Crear una EventBridge conexión entre cuentas de Amazon en una organización](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Entregue registros de DynamoDB a Amazon S3 mediante Kinesis Data Streams y Firehose con AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [Implementación del control de versiones de API basado en rutas mediante dominios personalizados en Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Importe la biblioteca psycopg2 para interactuar con su base de AWS Lambda datos PostgreSQL](import-psycopg2-library-lambda.md)
+ [Integre Amazon API Gateway con Amazon SQS para gestionar el REST asíncrono APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Procesamiento de eventos de forma asíncrona con Amazon API Gateway y AWS Lambda](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Procesamiento de eventos de forma asíncrona con Amazon API Gateway y Amazon DynamoDB Streams](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Procesamiento de eventos de forma asíncrona con Amazon API Gateway, Amazon SQS y AWS Fargate](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.md)
+ [Puesta en marcha de las tareas de Automatización de AWS Systems Manager de forma sincrónica desde AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Ejecute lecturas paralelas de objetos S3 mediante Python en una AWS Lambda función](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Envíe datos de telemetría desde y AWS Lambda OpenSearch para análisis y visualización en tiempo real](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Configuración de un router de celdas sin servidor para una arquitectura basada en celdas](serverless-cell-router-architecture.md)
+ [Configuración del acceso privado a un bucket de Amazon S3 a través de un punto de conexión de VPC](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Solucione problemas de estados AWS Step Functions mediante Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Más patrones](serverless-more-patterns-pattern-list.md)

# Cree una aplicación móvil React Native sin servidor con AWS Amplify
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

## Resumen
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-summary"></a>

Este patrón muestra cómo crear un backend sin servidor para una aplicación móvil React Native mediante AWS Amplify y los siguientes servicios de AWS:
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Tras configurar e implementar el backend de la aplicación mediante Amplify, Amazon Cognito autentica a los usuarios y los autoriza a acceder a la aplicación. AppSync A continuación, AWS interactúa con la aplicación de interfaz y con una tabla de DynamoDB de backend para crear y obtener datos.

**nota**  
En este patrón se utiliza una sencilla aplicación «ToDoList» como ejemplo, pero puede utilizar un procedimiento similar para crear cualquier aplicación móvil de React Native.

## Requisitos previos y limitaciones
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Interfaz de la línea de comandos de Amplify (Amplify CLI)](https://docs.amplify.aws/cli/start/install/) instalada y configurada
+ XCode (cualquier versión)
+ Microsoft Visual Studio (cualquier versión, cualquier editor de código, cualquier editor de texto)
+ Familiaridad con Amplify
+ Familiaridad con Amazon Cognito
+ Familiaridad con AWS AppSync
+ Familiaridad con DynamoDB
+ Familiaridad con Node.js
+ Familiarización con npm
+ Familiaridad con React y React Native
+ Familiaridad con JavaScript y ( ECMAScript 6) ES6
+ Familiaridad con GraphQL

## Arquitectura
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-architecture"></a>

El siguiente diagrama muestra un ejemplo de arquitectura para ejecutar el backend de una aplicación móvil React Native en la nube de AWS:

![\[Flujo de trabajo para ejecutar una aplicación móvil de React Native con los servicios de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


En el siguiente diagrama se muestra la arquitectura:

1. Amazon Cognito autentica a los usuarios y los autoriza a acceder a la aplicación.

1. Para crear y obtener datos, AWS AppSync utiliza una API de GraphQL para interactuar con la aplicación de frontend y una tabla de DynamoDB de backend.

## Tools (Herramientas)
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-tools"></a>

**Servicios de AWS**
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) es un conjunto de herramientas y características diseñadas específicamente que permiten a los desarrolladores web y móviles de frontend crear aplicaciones de pila completa en AWS de manera rápida.
+ [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) proporciona una interfaz GraphQL escalable que ayuda a los desarrolladores de aplicaciones a combinar datos de varias fuentes, incluidas Amazon DynamoDB, AWS Lambda y HTTP. APIs
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.

**Código**

[El código de la aplicación de muestra que se utiliza en este patrón está disponible en el repositorio -. GitHub aws-amplify-react-native ios-todo-app](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app) Para usar los archivos de ejemplo, siga las instrucciones de la sección **Épica** de este patrón.

## Epics
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-epics"></a>

### Cree y ejecute su aplicación React Native
<a name="create-and-run-your-react-native-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure un entorno de desarrollo React Native.  | Para obtener instrucciones, consulte [Configurar el entorno de desarrollo](https://reactnative.dev/docs/next/environment-setup) en la documentación de React Native. | Desarrollador de aplicaciones | 
| Cree y ejecute la aplicación móvil ToDoList React Native en el simulador de iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 

### Inicialice un nuevo entorno backend para la aplicación
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los servicios de backend necesarios para respaldar la aplicación en Amplify.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración de aplicación React Native en Amplify**<pre>? Name: ToDoListAmplify<br /><br />? Environment: dev<br /><br />? Default editor: Visual Studio Code<br /><br />? App type: javascript<br /><br />? Javascript framework: react-native<br /><br />? Source Directory Path: src<br /><br />? Distribution Directory Path: /<br /><br />? Build Command: npm run-script build<br /><br />? Start Command: npm run-script start<br /><br />? Select the authentication method you want to use: AWS profile<br /><br />? Please choose the profile you want to use: default</pre>Para obtener más información, consulte [Crear un nuevo backend de Amplify](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) en la documentación de Amplify Dev Center.El `amplify init` comando aprovisiona los siguientes recursos mediante [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 

### Añada la autenticación de Amazon Cognito a su aplicación React Native de Amplify
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un servicio de autenticación de Amazon Cognito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración del servicio de autenticación**<pre>? Do you want to use the default authentication and security configuration? \ <br />Default configuration<br /> <br />? How do you want users to be able to sign in? \ <br />Username <br /><br />? Do you want to configure advanced settings? \ <br />No, I am done</pre>El comando `amplify add auth` crea las carpetas, archivos y archivos de dependencia necesarios en una carpeta local (**amplify**) dentro del directorio raíz del proyecto. Para la configuración de la ToDoList aplicación utilizada en este patrón, se crea el **archivo aws-exports.js** con este fin. | Desarrollador de aplicaciones | 
| Implemente el servicio de Amazon Cognito en la nube de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para ver los servicios implementados en su proyecto, acceda a la consola de Amplify ejecutando el siguiente comando:`amplify console` | Desarrollador de aplicaciones | 
| Instala las bibliotecas Amplify necesarias para React Native y las CocoaPods dependencias para iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 
| Importe y configure el servicio Amplify. | En el archivo de punto de entrada de la aplicación (por ejemplo, **App.js**), importe y cargue el archivo de configuración del servicio Amplify introduciendo las siguientes líneas de código:<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Si recibe un error después de importar el servicio Amplify en el archivo de punto de entrada de la aplicación, deténgala. A continuación, abre XCode y selecciona el **ToDoListAmplifyarchivo.xcworkspace** de la carpeta iOS del proyecto y ejecuta la aplicación. | Desarrollador de aplicaciones | 
| Actualice el archivo de punto de entrada de la aplicación para usar el componente de orden superior (HOC) withAuthenticator. | El HOC `withAuthenticator` proporciona flujos de trabajo para iniciar sesión, registrarse y recuperar contraseñas en su aplicación con unas pocas líneas de código. Para obtener más información, consulte [Opción 1: usar componentes de interfaz de usuario precompilados](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) en Amplify Dev Center. También puede consultar [Componentes de orden superior](https://reactjs.org/docs/higher-order-components.html) en la documentación de React.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**Ejemplo de código de HOC withAuthenticator**<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)<br />import { withAuthenticator } from 'aws-amplify-react-native';<br /><br /><br />const App = () => {<br />  return null;<br />};<br /><br /><br />export default withAuthenticator(App);</pre>En el simulador de iOS, la aplicación muestra la pantalla de inicio de sesión que proporciona el servicio Amazon Cognito. | Desarrollador de aplicaciones | 
| Pruebe la configuración del servicio de autenticación. | En el simulador de iOS, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)También puede abrir la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito/) y comprobar si se ha creado un nuevo usuario en el **grupo de identidades**. | Desarrollador de aplicaciones | 

### Conectar una AppSync API de AWS y una base de datos de DynamoDB a la aplicación
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una AppSync API de AWS y una base de datos de DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración de API y base de datos**<pre>? Please select from one of the below mentioned services: \ <br />GraphQL <br /><br />? Provide API name: todolistamplify<br /><br />? Choose the default authorization type for the API \ <br />Amazon Cognito User Pool<br /><br />Do you want to use the default authentication and security configuration<br /><br />? Default configuration How do you want users to be able to sign in? \ <br />Username<br /><br />Do you want to configure advanced settings? \ <br />No, I am done.<br /><br />? Do you want to configure advanced settings for the GraphQL API \ <br />No, I am done.<br /><br />? Do you have an annotated GraphQL schema? \ <br />No<br /><br />? Choose a schema template: \ <br />Single object with fields (e.g., "Todo" with ID, name, description)<br /><br />? Do you want to edit the schema now? \ <br />Yes</pre>**Ejemplo de esquema de GraphQL**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | Desarrollador de aplicaciones | 
| Implemente la AppSync API de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para la configuración de la ToDoList aplicación utilizada en este patrón, aplique la siguiente configuración de ejemplo.**Ejemplo de ajustes de configuración AppSync de la API de AWS**La siguiente configuración crea la API GraphQL en AWS AppSync y una tabla **Todo** en Dynamo DB.<pre> ? Are you sure you want to continue? Yes<br />? Do you want to generate code for your newly created GraphQL API Yes<br />? Choose the code generation language target javascript<br />? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js<br />? Do you want to generate/update all possible GraphQL operations - \ <br />queries, mutations and subscriptions Yes<br />? Enter maximum statement depth \<br />[increase from default if your schema is deeply nested] 2</pre> | Desarrollador de aplicaciones | 
| Conecta la interfaz de la aplicación a la AppSync API de AWS. | Para usar la ToDoList aplicación de ejemplo que se proporciona en este patrón, copie el código del archivo **App.js** del ios-todo-app GitHub repositorio [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). A continuación, integre el código de ejemplo en su entorno local.El código de ejemplo proporcionado en el archivo **App.js** del repositorio hace lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-resources"></a>
+ [AWS Amplify](https://aws.amazon.com/amplify/)
+ [Amazon Cognito](https://aws.amazon.com/cognito/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)
+ [React](https://reactjs.org/) (documentación de React) 

# Administrar los inquilinos de varios productos SaaS en un único plano de control
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

*Ramanna Avancha, Kishan Kavala, Anusha Mandava y Jenifer Pascal, Amazon Web Services*

## Resumen
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-summary"></a>

Este patrón muestra cómo gestionar los ciclos de vida de los inquilinos en varios productos de software como servicio (SaaS) en un único plano de control en la nube de AWS. La arquitectura de referencia proporcionada puede ayudar a las organizaciones a reducir la implementación de características redundantes y compartidas en sus productos SaaS individuales y a proporcionar eficiencias de gobierno a escala.

Las grandes empresas pueden tener varios productos SaaS en varias unidades de negocio. A menudo, estos productos deben aprovisionarse para que los utilicen inquilinos externos con diferentes niveles de suscripción. Sin una solución de usuario común, los administradores de TI deben dedicar tiempo a administrar funciones indiferenciadas en varios APIs SaaS, en lugar de centrarse en el desarrollo de las funciones principales del producto.

La solución de inquilino común que se proporciona en este patrón puede ayudar a centralizar la administración de muchas de las características de los productos SaaS compartidos de una organización, incluidas las siguientes:
+ Seguridad
+ Aprovisionamiento de inquilinos
+ Almacenamiento de datos del inquilino
+ Comunicaciones con los inquilinos
+ Gestión de productos
+ Registro y supervisión de métricas

## Requisitos previos y limitaciones
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ Conocimiento de Amazon Cognito o de un proveedor de identidades (IdP) externo
+ Conocimiento de Amazon API Gateway
+ Conocimiento de AWS Lambda
+ Conocimiento de Amazon DynamoDB
+ Conocimientos de AWS Identity and Access Management (IAM)
+ Conocimiento de AWS Step Functions
+ Conocimientos de AWS CloudTrail y Amazon CloudWatch
+ Conocimiento de las bibliotecas y el código de Python
+ Conocimiento del SaaS APIs, incluidos los diferentes tipos de usuarios (organizaciones, inquilinos, administradores y usuarios de aplicaciones), los modelos de suscripción y los modelos de aislamiento de inquilinos
+ Conocimiento de los requisitos de SaaS multiproducto y de las suscripciones multiusuario de su organización

**Limitaciones**
+ Las integraciones entre la solución de inquilino común y los productos SaaS individuales no se incluyen en este patrón.
+ Este patrón implementa el servicio Amazon Cognito únicamente en una sola región de AWS.

## Arquitectura
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-architecture"></a>

**Pila de tecnología de destino**
+ Amazon API Gateway
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Notification Service (Amazon SNS)
+ AWS Step Functions

**Arquitectura de destino**

El siguiente diagrama muestra un ejemplo de flujo de trabajo para administrar los ciclos de vida de los inquilinos en varios productos SaaS en un único plano de control en la nube de AWS.

![\[Flujo de trabajo para administrar los ciclos de vida de los inquilinos en un único plano de control\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


 En el diagrama, se muestra el siguiente flujo de trabajo:

1. Un usuario de AWS inicia el aprovisionamiento de inquilinos, el aprovisionamiento de productos o las acciones relacionadas con la administración mediante una llamada a un punto de conexión de API Gateway.

1. El usuario se autentica mediante un token de acceso que se recupera de un grupo de usuarios de Amazon Cognito o de otro IdP.

1. Las tareas individuales de aprovisionamiento o administración se ejecutan mediante funciones de Lambda que se integran con los puntos de conexión de API de API Gateway.

1. La administración APIs de la solución Common Tenant (para inquilinos, productos y usuarios) recopila todos los parámetros de entrada, encabezados y símbolos necesarios. A continuación, la administración APIs invoca las funciones Lambda asociadas.

1. El servicio de IAM valida los permisos de IAM tanto para la administración APIs como para las funciones de Lambda.

1. Las funciones de Lambda almacenan y recuperan datos de los catálogos (para inquilinos, productos y usuarios) en DynamoDB y Amazon S3.

1. Una vez validados los permisos, se invoca un flujo de trabajo de AWS Step Functions para realizar una tarea específica. El ejemplo del diagrama muestra un flujo de trabajo de aprovisionamiento de inquilinos.

1. Las tareas individuales del flujo de trabajo de AWS Step Functions se ejecutan en un flujo de trabajo predeterminado (máquina de estado).

1. Todos los datos esenciales necesarios para ejecutar la función de Lambda asociada a cada tarea del flujo de trabajo se recuperan de DynamoDB o Amazon S3. Es posible que sea necesario aprovisionar otros recursos de AWS mediante una CloudFormation plantilla de AWS.

1. Si es necesario, el flujo de trabajo envía una solicitud para aprovisionar recursos de AWS adicionales para un producto SaaS específico a la cuenta de AWS de ese producto.

1. Cuando la solicitud se realiza correctamente o no, el flujo de trabajo publica la actualización de estado como un mensaje en un tema de Amazon SNS.

1. Amazon SNS está suscrito al tema Amazon SNS del flujo de trabajo Step Functions.

1. A continuación, Amazon SNS envía la actualización del estado del flujo de trabajo al usuario de AWS.

1. Los registros de las acciones de cada servicio de AWS, incluida una pista de auditoría de las llamadas a la API, se envían a CloudWatch. Se pueden configurar reglas y alarmas específicas CloudWatch para cada caso de uso.

1. Los registros se archivan en buckets de Amazon S3 para fines de auditoría.

**Automatización y escala**

Este patrón utiliza una CloudFormation plantilla para ayudar a automatizar la implementación de la solución Common Tenant. La plantilla también puede ayudarlo a escalar o reducir verticalmente los recursos asociados con rapidez.

Para obtener más información, consulte [Trabajar con CloudFormation plantillas de AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) en la *Guía del CloudFormation usuario de AWS*.

## Tools (Herramientas)
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-tools"></a>

**Servicios de AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.
+ [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) le CloudTrail ayuda a auditar la gobernanza, el cumplimiento y el riesgo operativo de su cuenta de AWS.
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) le CloudWatch ayuda a monitorizar las métricas de sus recursos de AWS y las aplicaciones que ejecuta en AWS en tiempo real.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) es un servicio de orquestación sin servidor que le permite combinar funciones de Lambda AWS y otros servicios de AWS para crear aplicaciones esenciales desde el punto de vista empresarial.

## Prácticas recomendadas
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-best-practices"></a>

La solución de este patrón utiliza un único plano de control para gestionar la incorporación de varios inquilinos y proporcionar acceso a varios productos de SaaS. El plano de control ayuda a los usuarios administrativos a gestionar otros cuatro planos con características específicas:
+ Plano de seguridad
+ Plano de flujo de trabajo
+ Plano de comunicación
+ Plano de registro y monitoreo

## Epics
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-epics"></a>

### Configuración del plano de seguridad
<a name="configure-the-security-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Establezca los requisitos para su plataforma SaaS multiusuario. | Establezca requisitos detallados para lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Arquitecto de la nube, administrador de sistemas de AWS | 
| Configure el servicio de Amazon Cognito. | Siga las instrucciones de [Introducción a Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) de la *Guía para desarrolladores de Amazon Cognito*. | Arquitecto de la nube | 
| Configure las políticas de IAM necesarias. | Cree las políticas de IAM necesarias para su caso de uso. A continuación, asigne las políticas a los roles de IAM en Amazon Cognito.Para obtener más información, consulte [Administrar el acceso mediante políticas](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) y [Control de acceso basado en roles](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) en la *Guía para desarrolladores de Amazon Cognito*. | Administrador de la nube, arquitecto de la nube, seguridad de AWS IAM | 
| Configure los permisos de API necesarios.  | Configure los permisos de acceso a API Gateway mediante roles y políticas de IAM y autorizadores Lambda.Para obtener instrucciones, consulte las secciones siguientes de la *Guía de desarrolladores de Amazon API Gateway*:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Administrador de la nube, arquitecto de la nube | 

### Configuración del plano de datos
<a name="configure-the-data-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los catálogos de datos necesarios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obtener más información, consulte [Configuración de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) en la *Guía para desarrolladores de Amazon DynamoDB*. | Administrador de base de datos | 

### Configuración del plano de control
<a name="configure-the-control-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree funciones Lambda y API Gateway APIs para ejecutar las tareas necesarias del plano de control. | Cree funciones Lambda y API Gateway independientes APIs para añadir, eliminar y gestionar lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obtener más información, consulte [Uso de AWS Lambda con Amazon API Gateway](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) en la *Guía para desarrolladores de AWS Lambda*. | Desarrollador de aplicaciones | 

### Configuración del plano de flujo de trabajo
<a name="configure-the-workflow-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Identifique las tareas que deben ejecutar los flujos de trabajo de AWS Step Functions. | Identifique y documente los requisitos detallados del flujo de trabajo de AWS Step Functions para lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Asegúrese de que las partes interesadas clave aprueben los requisitos. | Propietario de la aplicación | 
| Cree los flujos de trabajo de AWS Step Functions necesarios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Desarrollador de aplicaciones, responsable de compilación | 

### Configuración del plano de comunicación
<a name="configure-the-communication-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear temas de Amazon SNS. | Cree temas de Amazon SNS para recibir notificaciones sobre lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obtener más información, consulte [Creación de un tema de SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) en la *Guía para desarrolladores de Amazon SNS*. | Propietario de la aplicación, arquitecto de la nube | 
| Suscribir puntos de conexión a cada tema de Amazon SNS. | Para recibir los mensajes publicados en un tema de Amazon SNS, tiene que suscribirse a un punto de conexión en cada tema.Para obtener más información, consulte el [tema Suscripción a un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) en la *Guía para desarrolladores de Amazon SNS*. | Desarrollador de aplicaciones, arquitecto de la nube | 

### Configuración del plano de registro y supervisión
<a name="configure-the-logging-and-monitoring-plane"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active el registro para cada componente de la solución común para inquilinos. | Active el registro a nivel de componente para cada recurso de la solución de inquilino común que haya creado.Para obtener instrucciones, consulte lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Puede consolidar los registros de cada recurso en una cuenta de registro centralizada mediante las políticas de IAM. Para obtener más información, consulte [Registro centralizado y barreras de protección para varias cuentas](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html). | Administrador de sistemas de AWS, desarrollador de aplicaciones, administrador de la nube | 

### Aprovisionar e implementar la solución de inquilino común
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree plantillas CloudFormation . | Automatice la implementación y el mantenimiento de la solución Common Tenant completa y todos sus componentes mediante el uso de CloudFormation plantillas.Para obtener más información, consulte la [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | Desarrollador, DevOps ingeniero y CloudFormation desarrollador de aplicaciones | 

## Recursos relacionados
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Control del acceso a una API de REST con grupos de usuarios de Amazon Cognito como autorizador](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (*Guía para desarrolladores de Amazon API Gateway*)
+ [Uso de autorizadores Lambda de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (*Guía para desarrolladores de Amazon API Gateway*)
+ [Grupos de usuarios de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) (*Guía para desarrolladores de Amazon Cognito*)
+ [ CloudWatch Consola multicuentas entre regiones](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (Guía del * CloudWatch usuario de Amazon*)

# Consolidación de la generación de URL prefirmadas y las descargas de objetos de Amazon S3 mediante un punto de conexión asociado a direcciones IP estáticas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

*Song Jin, Eunhye Jo y Jun Soung Lee, Amazon Web Services*

## Resumen
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

Este patrón simplifica el acceso a Amazon Simple Storage Service (Amazon S3) al crear descargas de objetos seguras y URLs prefirmadas personalizadas. La solución proporciona un único punto de conexión con un dominio único y direcciones IP estáticas. Está diseñado para los clientes que requieren la consolidación de la API y los puntos de conexión de Amazon S3 en un dominio unificado con direcciones IP estáticas. El caso de uso implica que los usuarios sigan una política de firewall de listas de direcciones IP y dominios permitidos, lo que limita el acceso de la API a dominios y direcciones IP específicos. 

La arquitectura emplea claves Servicios de AWS AWS Global Accelerator, como Amazon API Gateway AWS Lambda, Application Load Balancer y Amazon S3. AWS PrivateLink Este diseño centraliza la API para generar el punto final prefirmado URLs y el punto final de Amazon S3 en un único dominio, vinculado a un acelerador con dos direcciones IP estáticas. En consecuencia, los usuarios pueden solicitar URLs y descargar objetos de Amazon S3 prefirmados sin esfuerzo a través de un punto de enlace de dominio unificado con direcciones IP estáticas. 

Esta arquitectura es especialmente beneficiosa para los clientes con políticas o requisitos de conformidad estrictos, como los de los sectores público, médico y financiero.

## Requisitos previos y limitaciones
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Una zona alojada pública de su dominio personalizado
+ Un dominio importado en AWS Certificate Manager (ACM) Región de AWS de su elección

**Limitaciones**
+ El nombre del bucket de Amazon S3 debe coincidir con el nombre de dominio del punto de conexión. Este requisito es para garantizar que el punto de conexión de Amazon S3 se pueda atender a través del punto de conexión de API único.
+ El nombre de dominio personalizado utilizado en API Gateway debe coincidir con el nombre de dominio del único punto de conexión de la API.
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

En el siguiente diagrama se muestran los componentes de la arquitectura de destino y el flujo de trabajo de este patrón.

![\[Componentes y flujo de trabajo para la generación de URL prefirmadas y la descarga de objetos.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


El diagrama ilustra el siguiente concepto y flujo de trabajo:

1. Un usuario inicia una solicitud para generar una URL prefirmada mediante el punto de enlace personalizado a través del cual se sirve AWS Global Accelerator, utilizando el nombre de dominio personalizado y las direcciones IP asociadas.

1. Una función de Lambda genera la URL prefirmada y apunta al punto de conexión personalizado. Responde con una redirección 301 que contiene la URL prefirmada generada. A través de la URL prefirmada redirigida, el usuario descarga el objeto automáticamente mediante el punto de conexión personalizado ofrecido a través de Global Accelerator.

Los componentes de la arquitectura general para la generación de URL prefirmadas y el flujo de trabajo de descarga de objetos son los siguientes:
+ Aprovisionamiento de direcciones IP estáticas por parte de Global Accelerator.
+ Registro del alias del acelerador como registro A en la zona alojada pública de Amazon Route 53 con el nombre de dominio personalizado.
+ Creación de un bucket de Amazon S3 con un nombre de bucket que coincida con el nombre de dominio personalizado registrado.
+ Creación de puntos de enlace de VPC para API Gateway y el servicio Amazon S3.
+ Configuración de un equilibrador de carga de aplicación interno para conectarse a Global Accelerator.
+ Asignación de un nombre de dominio personalizado para API Gateway con un certificado ACM adjunto.
+ Implementación de una API Gateway privada integrada con una función de Lambda.
+ La función Lambda está equipada con un rol AWS Identity and Access Management (IAM) adjunto (con [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)permisos).

## Tools (Herramientas)
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**Servicios de AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [Los balanceadores de carga de aplicaciones](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuyen el tráfico de aplicaciones entrante entre varios destinos, como las instancias de Amazon Elastic Compute Cloud (Amazon EC2), en varias zonas de disponibilidad.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) le ayuda a crear, almacenar y renovar claves y certificados SSL/TLS X.509 públicos y privados que protegen sus AWS sitios web y aplicaciones.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
+ [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html) es un servicio global que admite puntos de conexión en varias Regiones de AWS. Puede crear aceleradores que dirijan el tráfico a puntos finales óptimos a través de la red AWS global. De este modo, se mejora la disponibilidad y el rendimiento de las aplicaciones de Internet destinadas al público general.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)le ayuda a crear conexiones unidireccionales y privadas desde sus nubes privadas virtuales (VPCs) a servicios externos a la VPC.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Otras herramientas**
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

**Repositorio de código**

Puede implementar este patrón utilizando Terraform AWS CDK o Terraform según sus preferencias. La sección [Epics](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) contiene instrucciones para ambos métodos de implementación. El código de este patrón está disponible en los siguientes GitHub repositorios:
+ **AWS CDK**— [s3- presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk) -cdk
+ **Terraforma — s3** [- -terraforma presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform)

## Prácticas recomendadas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Para mejorar la seguridad en el entorno de producción, es crucial implementar mecanismos de autorización, como [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), para restringir el acceso a la API de generación `PresignedUrl`.
+ Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Prepare el entorno
<a name="prepare-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Decida un nombre de dominio. | Elija un nombre de dominio público para el punto de conexión unificado de Amazon S3. El nombre del dominio también se usa como el nombre del bucket de Amazon S3. | Administrador de AWS, administrador de red | 
| Creación de una zona alojada pública. | [Cree una zona alojada pública](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) en Amazon Route 53. Su nombre de dominio debe coincidir con el nombre de dominio que se usa en API Gateway. | Administrador de AWS, administrador de red | 
| Prepare un certificado SSL. | Utilice AWS Certificate Manager (ACM) para [solicitar](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) o [importar](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) un certificado SSL para el dominio de su aplicación web. | Administrador de AWS, administrador de red | 

### Implementación del patrón con Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el entorno de desarrollo de Terraform. | Para configurar el entorno de desarrollo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Modifique los archivos `.tfvars` y ** **`provider.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Tenga en cuenta lo siguiente:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Aprovisione los recursos de red. | Para aprovisionar los recursos de red, ejecute los siguientes comandos:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Durante la ejecución del comando `apply `, escriba **sí** cuando se le solicite. | Administrador de la nube, administrador de AWS | 
| Aprovisione API Gateway, Amazon S3 y Lambda. | Para aprovisionar los recursos de red, use los siguientes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrador de la nube, administrador de AWS | 

### Implemente el patrón con AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el entorno AWS CDK de desarrollo. | Para configurar el entorno de desarrollo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Configure los ajustes del dominio en el archivo `config/index.ts`. | Para editar las opciones de la variable constante, utilice los siguientes comandos:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>En los comandos, reemplace cada marcador de posición con su propia información:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador de la nube, administrador de AWS | 
| Implemente las pilas. | Para implementar dos pilas, una para la nube privada virtual (VPC) y otra para la aplicación, utilice el siguiente comando:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrador de la nube, administrador de AWS | 

### Prueba del patrón
<a name="test-the-pattern"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verifique las direcciones IP del punto de conexión. | Para comprobar que el dominio de este patrón tenga direcciones IP estáticas, utilice el siguiente comando:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Administrador de red | 
| Cargue un archivo de prueba que pueda descargar más adelante. | Cargue el archivo de prueba en la carpeta `'/objects'` del bucket de Amazon S3. | Administrador de la nube, administrador de AWS | 
| Invoque la API para generar una URL prefirmada. | Para generar una URL prefirmada, llame a la URL desde un navegador o un cliente de API (por ejemplo, [Postman](https://www.postman.com/product/what-is-postman/)) con el siguiente formato:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Sustituya los valores de los marcadores de posición `${s3-bucket-prefix}` y `${domain}` por los valores que configuró en los pasos anteriores. | Propietario de la aplicación | 
| Compruebe el resultado. | El resultado esperado es que reciba un código de estado de redireccionamiento 301 (desplazado permanentemente). Esta respuesta contendrá la URL prefirmada, que debería iniciar automáticamente la descarga del archivo de prueba. | Ingeniero de pruebas | 

### Limpieza con Terraform
<a name="clean-up-with-terraform"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Destruya los recursos de API Gateway, Amazon S3 y Lambda. | Para eliminar los recursos, use los siguientes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador de la nube, administrador de AWS | 
| Destruya los recursos de red. | Para eliminar los recursos de red, use los siguientes comandos:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador de la nube, administrador de AWS | 

### Limpie con AWS CDK
<a name="clean-up-with-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Destruya las pilas. | Para destruir las pilas de VPC y de aplicaciones, utilice el siguiente comando:<pre>$ cdk destroy --all</pre> | Administrador de la nube, administrador de AWS | 
| Vacíe y elimine los buckets de Amazon S3. | [Vacíe](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) y [elimine](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) el bucket de Amazon S3 del objeto y el bucket de Amazon S3 de los registros que no se eliminen de forma predeterminada.Los nombres de los buckets de Amazon S3 son `${s3-bucket-prefix}.${domain}` y `${s3-bucket-prefix}.${domain}-logs`.Si prefiere usar [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para eliminar los buckets, utilice los siguientes comandos:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Sustituya `${s3-bucket-prefix}` y `${domain}` por los valores que se estableció en los pasos anteriores. | Administrador de la nube, administrador de AWS | 

## Recursos relacionados
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blogs**
+ [Acceso a una Amazon API Gateway mediante direcciones IP estáticas proporcionadas por AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Genere una URL prefirmada de forma modular AWS CDK para JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Alojamiento de sitios web estáticos HTTPS internos con ALB, S3 y PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Crear una EventBridge conexión entre cuentas de Amazon en una organización
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson y Robert Stone, Amazon Web Services*

## Resumen
<a name="create-cross-account-amazon-eventbridge-connection-organization-summary"></a>

Los grandes sistemas distribuidos utilizan Amazon EventBridge para comunicar los cambios de estado entre varias cuentas de Amazon Web Services (AWS) de una AWS Organizations organización. Sin embargo, por EventBridge lo general solo puede dirigirse a los puntos finales o a los consumidores de la misma Cuenta de AWS. La excepción es un bus de eventos en una cuenta diferente. Ese bus de eventos es un destino válido. Para consumir eventos de un bus de eventos de otra cuenta, los eventos deben transferirse del bus de eventos de la cuenta de origen al bus de eventos de la cuenta de destino. Para evitar problemas a la hora de gestionar eventos críticos en distintas aplicaciones Cuentas de AWS, utilice el enfoque recomendado que se presenta en este patrón.

Este patrón ilustra cómo implementar una arquitectura basada en eventos EventBridge que involucre a varios miembros de una Cuentas de AWS AWS Organizations organización. El patrón usa AWS Cloud Development Kit (AWS CDK) Toolkit y. AWS CloudFormation

EventBridge ofrece un bus de eventos sin servidor que le ayuda a recibir, filtrar, transformar, enrutar y entregar eventos. Un componente fundamental de las arquitecturas basadas en eventos, EventBridge permite separar entre los productores de mensajes y los consumidores de esos mensajes. En una sola cuenta, esto es sencillo. Una estructura entre cuentas requiere consideraciones adicionales para que los eventos del bus de eventos de una cuenta se consuman en otras cuentas de la misma organización.

Para obtener información sobre las consideraciones específicas de las cuentas para productores y consumidores, consulte la sección de [información adicional](#create-cross-account-amazon-eventbridge-connection-organization-additional).

## Requisitos previos y limitaciones
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Requisitos previos **
+ Una AWS Organizations organización con al menos dos asociados Cuentas de AWS
+ Una función AWS Identity and Access Management (IAM) en ambas Cuentas de AWS que le permita aprovisionar la infraestructura en ambas Cuentas de AWS mediante AWS CloudFormation
+ Git [instalado localmente](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [instalado localmente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [instalado localmente](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) y [arrancado en ambos](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) Cuentas de AWS

**Versiones de producto**

Este patrón se ha creado y probado usando las siguientes herramientas y versiones:
+ AWS CDK Kit de herramientas 2.126.0
+ Node.js 18.19.0
+ npm 10.2.3
+ Python 3.12

Este patrón debería funcionar con cualquier versión de AWS CDK v2 o npm. Las versiones 13.0.0 a 13.6.0 de Node.js no son compatibles con AWS CDK.

## Arquitectura
<a name="create-cross-account-amazon-eventbridge-connection-organization-architecture"></a>

**Arquitectura de destino**

El siguiente diagrama muestra el flujo de trabajo de arquitectura para enviar un evento desde una cuenta y consumirlo en otra cuenta.

![\[El proceso de tres pasos para conectar la cuenta de productor de origen y la cuenta de consumidor de destino.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


El flujo de trabajo consta de los pasos siguientes:

1. La AWS Lambda función Producer de la cuenta Source coloca un evento en el bus de EventBridge eventos de la cuenta.

1. La EventBridge regla de cuentas cruzadas dirige el evento a un bus de EventBridge eventos de la cuenta de destino.

1. El bus de EventBridge eventos de la cuenta de destino tiene una regla Lambda de destino que invoca la función Consumer Lambda.

Una práctica recomendada es utilizar una [cola de mensajes fallidos (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) para gestionar las invocaciones fallidas de la función de Lambda de consumidor. Sin embargo, el DLQ se omitió en esta solución para mayor claridad. Para obtener más información sobre cómo implementar una DLQ en sus flujos de trabajo y mejorar la capacidad de los flujos de trabajo para recuperarse de los errores, consulte la entrada del blog [Implementación AWS Lambda](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/) de patrones de manejo de errores.

**Automatización y escala**

AWS CDK aprovisiona automáticamente la arquitectura requerida. EventBridge puede ampliarse a miles de registros por segundo, según el Región de AWS. Para obtener más información, consulta la [documentación de EventBridge cuotas de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

## Tools (Herramientas)
<a name="create-cross-account-amazon-eventbridge-connection-organization-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en el código. Este patrón utiliza el kit de [AWS CDK herramientas, un kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) de desarrollo en la nube de línea de comandos que te ayuda a interactuar con tu AWS CDK aplicación.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, AWS Lambda funciones, puntos finales de invocación HTTP que utilizan destinos de API o buses de eventos en otros. Cuentas de AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)es un servicio de administración de cuentas que le ayuda a consolidar múltiples cuentas Cuentas de AWS en una organización que puede crear y administrar de forma centralizada.

**Otras herramientas**
+ [Node.js](https://nodejs.org/en/docs/) es un entorno de JavaScript ejecución basado en eventos diseñado para crear aplicaciones de red escalables.
+ [npm](https://docs.npmjs.com/about-npm) es un registro de software que se ejecuta en un entorno Node.js y se utiliza para compartir o tomar prestados paquetes y administrar la implementación de paquetes privados.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization).

## Prácticas recomendadas
<a name="create-cross-account-amazon-eventbridge-connection-organization-best-practices"></a>

Para conocer las mejores prácticas a la hora de trabajar con EventBridge él, consulta los siguientes recursos:
+ [Mejores prácticas para los patrones de EventBridge eventos de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Mejores prácticas a la hora de definir reglas en Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Epics
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Prepare su entorno AWS CDK de despliegue local
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure las credenciales locales para la cuenta de origen y la cuenta de destino. | Revise la [configuración y las credenciales nuevas](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new) y utilice el método de autenticación y credenciales que mejor se adapte a su entorno.Asegúrese de configurar la autenticación tanto AWS CLI para la cuenta de origen como para la cuenta de destino.Estas instrucciones suponen que ha configurado dos perfiles de AWS de manera local: `sourceAccount` y `destinationAccount`. | Desarrollador de aplicaciones | 
| Bootstrap para ambos Cuentas de AWS. | Para arrancar las cuentas, ejecute los siguientes comandos:<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | Desarrollador de aplicaciones | 
| Clone el código de patrón. | Para clonar el repositorio, ejecute el siguiente comando:<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>A continuación, cambie el directorio a la carpeta del proyecto recién clonada:<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | Desarrollador de aplicaciones | 

### Implemente ProducerStack en la cuenta Source
<a name="deploy-producerstack-to-the-source-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique `cdk.json` con sus detalles AWS Organizations y los de su cuenta. | En la carpeta raíz del proyecto, realiza los siguientes cambios en `cdk.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 
| Despliegue los ProducerStack recursos. | Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Cuando se le solicite, acepte las nuevas funciones de IAM y otros permisos relacionados con la seguridad que se hayan creado mediante ellas. AWS CloudFormation | Desarrollador de aplicaciones | 
| Compruebe que los ProducerStack recursos estén desplegados. | Para verificar los recursos, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 

### Implemente ConsumerStack en la cuenta de destino
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Despliegue los ConsumerStack recursos. | Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Cuando se le solicite, acepte las nuevas funciones de IAM y otros permisos relacionados con la seguridad que se hayan creado mediante ellas. CloudFormation | Desarrollador de aplicaciones | 
| Compruebe que los recursos estén desplegados ConsumerStack  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 

### Producción y consumo de eventos
<a name="produce-and-consume-events"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Invoque la función de Lambda de producción. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 
| Verifique que se haya recibido el evento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desarrollador de aplicaciones | 

### Limpieza
<a name="cleanup"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Destruye los ConsumerStack recursos. | Si utiliza este patrón como prueba, limpie los recursos implementados para evitar incurrir en costos adicionales.Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Se le pedirá que confirme la eliminación de la pila. | Desarrollador de aplicaciones | 
| Destruye los ProducerStack recursos. | Desde el directorio raíz del proyecto, ejecute el siguiente comando:<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Se le pedirá que confirme la eliminación de la pila. | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| No se recibió ningún evento en la cuenta de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| Al invocar una función de Lambda desde la consola, se obtiene el siguiente error: `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Póngase en contacto con su Cuenta de AWS administrador para recibir los permisos de `lambda:Invoke` acción adecuados en la `ProducerStack-ProducerLambdaXXXX` función Lambda. | 

## Recursos relacionados
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Referencias**
+ [AWS Organizations Guía del usuario](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [Patrones de EventBridge eventos de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Reglas en Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutoriales y videos**
+ [Tutorial: Creación y configuración de una organización](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re:Invent 2023: patrones avanzados basados en eventos con Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Información adicional
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Regla del productor**

*En la cuenta Source, se crea un bus de EventBridge eventos para aceptar los mensajes de los productores (como se muestra en la sección Arquitectura).* En este bus de eventos se crea una regla con los correspondientes permisos de IAM. Las reglas se dirigen al bus de EventBridge eventos de la cuenta de destino y se basan en la siguiente `cdk.json` estructura:

```
"rules": [
  {
    "id": "CrossAccount",
    "sources": ["Producer"],
    "detail_types": ["TestType"],
    "targets": [
      {
        "id": "ConsumerEventBus",
        "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount"
      }
    ]
  }
]
```

Para cada bus de eventos que consume, se deben incluir el patrón de eventos y el bus de eventos de destino.

*Patrón de eventos*

Los [patrones de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) filtran a qué eventos se aplicará esta regla. Para los fines de este ejemplo, los orígenes de eventos y el registro `detail_types` identifican qué eventos se van a transmitir desde el bus de eventos de la cuenta de origen al bus de eventos de la cuenta de destino.

*Bus de eventos de destino*

Esta regla se dirige a un bus de eventos que existe en otra cuenta. El `arn` (nombre del recurso de Amazon) completo es necesario para identificar de forma única el bus de eventos de destino y `id` es el [ID lógico](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids) utilizado por AWS CloudFormation. No es necesario que el bus de eventos de destino exista realmente en el momento de la creación de la regla de destino.

**Consideraciones específicas de la cuenta de destino**

En la cuenta de destino, se crea un bus de EventBridge eventos para recibir mensajes del bus de eventos de la cuenta de origen. Para permitir que los eventos se publiquen desde la cuenta de origen, debe crear una [política basada en recursos](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html):

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowOrgToPutEvents",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "o-XXXXXXXXX"
      }
    }
  }]
}
```

Es especialmente importante conceder el permiso `events:PutEvents`, que permite a cualquier otra cuenta de la misma organización publicar eventos en este bus de eventos. Si `aws:PrincipalOrgId` se establece como ID de la organización, se conceden los permisos necesarios.

**Patrón del evento**

Puede modificar el patrón de eventos incluido para adaptarlo a su caso de uso:

```
rule = events.Rule(
    self,
    self.id + 'Rule' + rule_definition['id'],
    event_bus=event_bus,
    event_pattern=events.EventPattern(
        source=rule_definition['sources'],
        detail_type=rule_definition['detail_types'],
    )
)
```

Para reducir el procesamiento innecesario, el patrón de eventos debe especificar que solo los eventos que procese la cuenta de destino se transmitan al bus de eventos de la cuenta de destino.

*Política basada en recursos*

En este ejemplo, se utiliza el ID de la organización para controlar qué cuentas pueden incluir eventos en el bus de eventos de la cuenta de destino. Considere la posibilidad de utilizar una política más restrictiva, como especificar la cuenta de origen.

*EventBridge cuotas*

Tenga en cuenta las siguientes [cuotas](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html):
+ La cuota predeterminada es de 300 reglas por bus de eventos. Se puede ampliar si es necesario, pero debería adaptarse a la mayoría de los casos de uso.
+ El máximo permitido es de cinco destinos por regla. Recomendamos que los arquitectos de aplicaciones utilicen una regla distinta para cada cuenta de destino a fin de poder controlar de forma pormenorizada el patrón de eventos.

# Entregue registros de DynamoDB a Amazon S3 mediante Kinesis Data Streams y Firehose con AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava y Daniel Matuki da Cunha, Amazon Web Services*

## Resumen
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

Este patrón proporciona un código de muestra y una aplicación para entregar registros de Amazon DynamoDB a Amazon Simple Storage Service (Amazon S3) mediante Amazon Kinesis Data Streams y Amazon Data Firehose. El enfoque del patrón utiliza [construcciones de AWS Cloud Development Kit (AWS CDK) nivel 3](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) e incluye un ejemplo de cómo realizar la transformación de datos AWS Lambda antes de que los datos se entreguen al depósito S3 de destino en la nube de Amazon Web Services (AWS).

Kinesis Data Streams captura modificaciones a nivel de elemento en cualquier tabla de DynamoDB y las replica en una secuencia de datos de Kinesis. Sus aplicaciones pueden acceder al flujo de datos de Kinesis y ver los cambios a nivel de elemento casi en tiempo real. Kinesis Data Streams también le brinda acceso a otros servicios d Amazon Kinesis, como Firehose y Amazon Managed Service para Apache Flink. Puede crear aplicaciones que proporcionen paneles en tiempo real, generen alertas, apliquen precios y publicidad dinámicos y realicen análisis de datos sofisticados.

Puede usar este patrón para sus casos de uso de integración de datos. Por ejemplo, los vehículos de transporte o equipos industriales pueden enviar grandes volúmenes de datos a una tabla de DynamoDB. Estos datos se pueden transformar y almacenar en un lago de datos alojado en Amazon S3. A continuación, puede consultar y procesar los datos, así como predecir cualquier posible defecto, mediante servicios sin servidor como Amazon Athena, Amazon Redshift Spectrum, Amazon Rekognition y AWS Glue.

## Requisitos previos y limitaciones
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Requisitos previos *
+ Un activo. Cuenta de AWS
+ AWS Command Line Interface (AWS CLI), instalado y configurado. Para obtener más información, consulte [Primeros pasos con AWS CLIél en la](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) AWS CLI documentación.
+ Node.js (18.x\$1) y npm, instalados y configurados. Para obtener más información, consulte [Descargar e instalar Node.js y npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) en la documentación de `npm`.
+ aws-cdk (2.x\$1), instalado y configurado. Para obtener más información, consulte [Introducción a él AWS CDK en la documentación](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). AWS CDK 
+ El repositorio GitHub [aws-dynamodb-kinesisfirehose-sde 3 ingestas](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/), clonado y configurado en su máquina local.
+ Datos de ejemplo existentes para la tabla de DynamoDB. Los datos deben utilizar el siguiente formato: `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}` 

## Arquitectura
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

En el siguiente diagrama se muestra un ejemplo de flujo de trabajo que entrega registros de DynamoDB en Amazon S3 mediante Kinesis Data Streams y Firehose.

![\[Un ejemplo de flujo de trabajo que entrega registros de DynamoDB en Amazon S3 mediante Kinesis Data Streams y Firehose.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Los datos se incorporan mediante Amazon API Gateway como proxy de DynamoDB. También puede usar cualquier otro origen para incorporar datos en DynamoDB. 

1. Los cambios a nivel de elemento se generan prácticamente en tiempo real en Kinesis Data Streams para su entrega a Amazon S3.

1. Kinesis Data Streams envía los registros a Firehose para su transformación y entrega. 

1. Una función de Lambda convierte los registros de un formato de registro de DynamoDB a un formato JSON, que contiene solo los nombres y valores de los atributos de los elementos del registro.

## Tools (Herramientas)
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-tools"></a>

*Servicios de AWS*
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software que lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ AWS CDK El [kit de herramientas](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) es un kit de desarrollo en la nube de línea de comandos que le ayuda a interactuar con su aplicación. AWS CDK 
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante los comandos de tu shell de línea de comandos.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el territorio y. Cuentas de AWS Regiones de AWS

*Repositorio de código*

El código de este patrón está disponible en el repositorio de GitHub [aws-dynamodb-kinesisfirehose-s3 ingestas.](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/)

## Epics
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### Instale y configure el código de muestra
<a name="set-up-and-configure-the-sample-code"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale las dependencias. | En su máquina local, instale las dependencias de los archivos `package.json` en los directorios `pattern/aws-dynamodb-kinesisstreams-s3` y `sample-application` ejecutando los siguientes comandos:<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | Desarrollador de aplicaciones, AWS general | 
| Genere la plantilla CloudFormation . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Desarrollador de aplicaciones, AWS general, AWS DevOps | 

### Implementación de recursos
<a name="deploy-the-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe e implemente los recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Desarrollador de aplicaciones, AWS general, AWS DevOps | 

### Incorpore datos a la tabla de DynamoDB para probar la solución
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Incorpore sus datos de muestra en la tabla de DynamoDB. | Envíe una solicitud a la tabla de DynamoDB ejecutando el siguiente comando en: AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`ejemplo:`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`De forma predeterminada, `put-item` no devuelve ningún valor como resultado si la operación se realiza correctamente. Si la operación falla, devuelve un error. Los datos se almacenan en DynamoDB y, a continuación, se envían a Kinesis Data Streams y Firehose. Puede adoptar diferentes enfoques para añadir datos a una tabla de DynamoDB. Para obtener más información, consulte la sección [Cargar datos en tablas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) en la documentación de DynamoDB. | Desarrollador de aplicaciones | 
| Verifique que se crea un objeto nuevo en el bucket de S3. | Inicie sesión en el bucket de S3 Consola de administración de AWS y supervise el mismo para comprobar que se ha creado un objeto nuevo con los datos que ha enviado. Para obtener más información, consulte [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)la documentación de Amazon S3. | Desarrollador de aplicaciones, AWS general | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpiar recursos.  | Ejecute el comando `cdk destroy` para eliminar todos los recursos usados por este patrón. | Desarrollador de aplicaciones, AWS general | 

## Recursos relacionados
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s3- static-site-stack .ts](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25) (GitHub repositorio)
+ [aws-apigateway-dynamodb módulo](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub repositorio)
+ [aws-kinesisstreams-kinesisfirehose-sMódulo 3](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub repositorio)
+ [Captura de datos de cambios para DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) (documentación de DynamoDB)
+ [Uso de Kinesis Data Streams para capturar cambios en DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html) (documentación de DynamoDB)

# Implementación del control de versiones de API basado en rutas mediante dominios personalizados en Amazon API Gateway
<a name="implement-path-based-api-versioning-by-using-custom-domains"></a>

*Corey Schnedl, Marcelo Barbosa, Mario Lopez Martinez, Anbazhagan Ponnuswamy, Gaurav Samudra y Abhilash Vinod, Amazon Web Services*

## Resumen
<a name="implement-path-based-api-versioning-by-using-custom-domains-summary"></a>

Este patrón demuestra cómo puede utilizar la característica de [asignación de API](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) de [dominios personalizados](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) para implementar una solución de control de versiones de API basado en rutas para Amazon API Gateway.

Amazon API Gateway es un servicio totalmente gestionado que puede utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Al utilizar la función de dominio personalizado del servicio, puede crear nombres de dominio personalizados que sean más sencillos e intuitivos y URLs que pueda proporcionarlos a los usuarios de su API. Puede utilizar las asignaciones de API para conectar etapas de la API a un nombre de dominio personalizado. Después de crear un nombre de dominio y configurar los registros de DNS, utiliza las asignaciones de API para enviarle tráfico a APIs través de su nombre de dominio personalizado.

Cuando una API pasa a estar disponible públicamente, los consumidores la utilizan. A medida que evoluciona una API pública, su contrato de servicio también evoluciona para reflejar las nuevas características y funcionalidades. Sin embargo, no es aconsejable cambiar ni eliminar las características existentes. Cualquier cambio importante podría afectar a las aplicaciones del consumidor y provocar fallos durante el tiempo de ejecución. El control de versiones de las API es importante para evitar interrumpir la compatibilidad con versiones anteriores e infringir un contrato.

Se necesita una estrategia clara de control de versiones de las API para ayudar a los consumidores a adoptarlas. El control de versiones APIs mediante rutas URLs es el enfoque más sencillo y utilizado con más frecuencia. En este tipo de control de versiones, las versiones se definen explícitamente como parte de la API. URIs El siguiente ejemplo URLs muestra cómo un consumidor puede usar el URI para especificar una versión de API para su solicitud:

`https://api.example.com/api/v1/orders `

`https://api.example.com/api/v2/orders `

`https://api.example.com/api/vX/orders`

Este patrón lo utiliza AWS Cloud Development Kit (AWS CDK) para crear, implementar y probar un ejemplo de implementación de una solución de control de versiones escalable basada en rutas para su API. AWS CDK es un marco de desarrollo de software de código abierto para modelar y aprovisionar los recursos de sus aplicaciones en la nube mediante lenguajes de programación conocidos.

## Requisitos previos y limitaciones
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS.
+ Se requiere la propiedad de un dominio para usar el repositorio de muestras de este patrón y para usar la funcionalidad de dominios personalizados de Amazon API Gateway. Puede usar Amazon Route 53 para crear y administrar los dominios de su organización. Para obtener información sobre cómo registrar o transferir un dominio con Route 53, consulte [Registering new domains](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) en la documentación de Route 53.
+ Antes de configurar un nombre de dominio personalizado para una API, debe disponer de un [certificado SSL/TLS](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html) listo en AWS Certificate Manager.
+ Debe crear o actualizar el registro de recursos del proveedor de DNS para asignarlo al punto de conexión de la API. Si no se lleva a cabo esta asignación, las solicitudes de API vinculadas al nombre de dominio personalizado no pueden llegar a API Gateway.

**Limitaciones**
+ Un nombre de dominio personalizado debe ser único dentro de un Región de AWS todo Cuentas de AWS.
+ Para configurar asignaciones de la API con varios niveles, debe usar un nombre de dominio personalizado regional y usar la política de seguridad de TLS 1.2.
+ En una asignación de API, el nombre de dominio personalizado y el mapeado APIs deben coincidir Cuenta de AWS.
+ Las asignaciones de API deben contener solo letras, números y los siguientes caracteres: `$-_.+!*'()/`
+ La longitud máxima de la ruta en una asignación de API es de 300 caracteres.
+ Puede tener 200 asignaciones de API con varios niveles para cada nombre de dominio.
+ Solo puede asignar HTTP APIs a un nombre de dominio personalizado regional con la política de seguridad TLS 1.2.
+ No puedes asignarlo WebSocket APIs al mismo nombre de dominio personalizado que una API HTTP o una API REST.
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Este ejemplo de implementación se usa [AWS CDK en la TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) versión 2.149.0.

## Arquitectura
<a name="implement-path-based-api-versioning-by-using-custom-domains-architecture"></a>

En el siguiente diagrama se muestra el flujo de trabajo de la arquitectura.

![\[Flujo de trabajo con asignaciones de API y dominios personalizados para implementar una solución de control de versiones de API basado en rutas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


En el siguiente diagrama se ilustra lo siguiente:

1. El usuario de la API envía una solicitud a Amazon API Gateway con un nombre de dominio personalizado.

1. API Gateway dirige dinámicamente la solicitud del usuario a una instancia y etapa adecuadas de API Gateway, según la ruta indicada en la URL de la solicitud. En la siguiente tabla se muestra un ejemplo de cómo se pueden enrutar las distintas rutas basadas en URL a etapas específicas para distintas instancias de API Gateway.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. La instancia de API Gateway de destino procesa la solicitud y devuelve el resultado al usuario.

**Automatización y escala**

Te recomendamos que utilices AWS CloudFormation pilas independientes para cada versión de la API. Con este enfoque, puedes tener un aislamiento total entre el backend al APIs que se puede enrutar mediante la función de mapeo de API de dominio personalizado. Una ventaja de este enfoque es que se pueden implementar o eliminar diferentes versiones de la API de forma independiente sin que ello suponga el riesgo de modificar otra API. Este enfoque aumenta la resiliencia mediante el aislamiento de las CloudFormation pilas. Además, le proporciona diferentes opciones de back-end para su API AWS Lambda AWS Fargate, como los puntos finales HTTP y las acciones de. Servicios de AWS

Puedes usar estrategias de ramificación de Git, como [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html), en combinación con CloudFormation pilas aisladas para administrar el código fuente que se implementa en las diferentes versiones de la API. Al usar esta opción, puede mantener diferentes versiones de su API sin necesidad de duplicar el código fuente para las nuevas versiones. Con Gitflow, puede agregar etiquetas a las confirmaciones dentro de su repositorio de Git a medida que se vayan llevando a cabo los lanzamientos. Como resultado, tiene una instantánea completa del código fuente en relación con un lanzamiento específico. Como es necesario realizar actualizaciones, puedes consultar el código de una versión específica, realizar actualizaciones y, después, implementar el código fuente actualizado en la CloudFormation pila que se ajuste a la versión principal correspondiente. Este enfoque reduce el riesgo de interrumpir otra versión de la API, ya que cada versión de la API tiene un código fuente aislado y se implementa en CloudFormation pilas independientes.

## Tools (Herramientas)
<a name="implement-path-based-api-versioning-by-using-custom-domains-tools"></a>

**Servicios de AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) le ayuda a crear, almacenar y renovar claves y certificados SSL/TLS X.509 públicos y privados que protegen sus AWS sitios web y aplicaciones.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software de código abierto para definir su infraestructura de nube en código y aprovisionarla mediante ella. CloudFormation[El ejemplo de implementación de este patrón utiliza el AWS CDK in. TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Para trabajar con AWS CDK in se TypeScript utilizan herramientas conocidas, como el TypeScript compilador de Microsoft (`tsc`), [Node.js](https://nodejs.org/) y el administrador de paquetes de nodos (`npm`). Si lo prefiere, puede usar [Yarn](https://yarnpkg.com/), aunque en los ejemplos de este patrón se utiliza `npm`. Los módulos que componen la [Biblioteca de constructos de AWS](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) se distribuyen a través del repositorio `npm `, [npmjs.org](https://docs.npmjs.com/).
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en todo el mundo Cuentas de AWS . Regiones de AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) es un servicio web de sistema de nombres de dominio (DNS) escalable y de alta disponibilidad.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) es un firewall de aplicación web que lo ayuda a supervisar las solicitudes HTTP y HTTPS que se reenvían a los recursos de su aplicación web protegida.

**Otras herramientas**
+ [Bruno](https://www.usebruno.com/) es un cliente de pruebas de API de código abierto y compatible con Git.
+ [cdk-nag](https://github.com/cdklabs/cdk-nag) es una utilidad de código abierto que comprueba AWS CDK las mejores prácticas en las aplicaciones mediante paquetes de reglas.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio -api-gateway. GitHub path-based-versioning-with](https://github.com/aws-samples/path-based-versioning-with-api-gateway)

## Prácticas recomendadas
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Utilice una sólida canalización de integración y entrega continuas (CI/CD) para automatizar las pruebas y el despliegue de las CloudFormation pilas creadas con. AWS CDK Para obtener más información relacionada con esta recomendación, consulte la Guía de [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF es un firewall gestionado que se integra fácilmente con servicios como Amazon API Gateway. Si bien AWS WAF no es un componente necesario para que este patrón de control de versiones funcione, recomendamos incluirlo en API Gateway como práctica recomendada AWS WAF de seguridad.
+ Anime a los consumidores de la API a que actualicen periódicamente a la versión más reciente de su API para que las versiones anteriores queden obsoletas y se eliminen de forma eficiente.
+ Antes de utilizar este enfoque en un entorno de producción, implemente una estrategia de firewall y autorización para su API.
+ Implemente el acceso a la administración de sus AWS recursos Cuenta de AWS mediante el modelo de acceso con [privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ [Para aplicar las mejores prácticas y las recomendaciones de seguridad para las aplicaciones creadas con él AWS CDK, le recomendamos que utilice la utilidad cdk-nag.](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html) 

## Epics
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Preparación del entorno local
<a name="prepare-your-local-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio de la aplicación de ejemplo, ejecute el siguiente ejemplo:<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | Desarrollador de aplicaciones | 
| Navegue hasta el repositorio clonado. | Para ir a la ubicación de la carpeta del repositorio clonado, ejecute el siguiente comando: <pre>cd api-gateway-custom-domain-versioning</pre> | Desarrollador de aplicaciones | 
| Instale las dependencias requeridas. | Para instalar las dependencias necesarias, ejecute el siguiente comando:<pre>npm install </pre> | Desarrollador de aplicaciones | 

### Implemente la pila de enrutamiento CloudFormation
<a name="deploy-the-cfnshort-routing-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Iniciar la implementación de la pila de enrutamiento. | Para iniciar la implementación de la pila de CloudFormation enrutamiento`CustomDomainRouterStack`, ejecute el siguiente comando y `example.com` sustitúyalo por el nombre del dominio del que es propietario:<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>La implementación de la pila no se llevará a cabo correctamente hasta que la siguiente tarea de validación del DNS del dominio se efectúe correctamente. | Desarrollador de aplicaciones | 

### Verificar la propiedad del dominio
<a name="verify-domain-ownership"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Verificar la propiedad de su dominio. | El certificado permanecerá en estado **Pendiente de validación** hasta que demuestre la propiedad del dominio asociado. Para demostrar la propiedad, agregue registros CNAME a la zona alojada asociada al dominio. Para obtener más información, consulte la [validación de DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) en la AWS Certificate Manager documentación. Agregar los registros adecuados permite que la implementación de `CustomDomainRouterStack` se lleve a cabo correctamente. | Desarrollador de aplicaciones, administrador de sistemas de AWS, administrador de redes | 
| Crear un registro de alias que apunte a su dominio personalizado de API Gateway. | Una vez que el certificado se haya emitido y validado correctamente, [cree un registro de DNS](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record) que apunte a la URL del dominio personalizado de Amazon API Gateway. La URL del dominio personalizado se genera exclusivamente mediante el aprovisionamiento del dominio personalizado y se especifica como parámetro de CloudFormation salida. A continuación, se muestra un [ejemplo del registro](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html): **Política de enrutamiento**: enrutamiento sencillo**Nombre del registro:** `demo.api-gateway-custom-domain-versioning.example.com`**Alias**: sí**Tipo de registro**: registro DNS de tipo «A» que apunta a un AWS recurso**Valor**: `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (segundos)**: 300 | Desarrollador de aplicaciones, administrador de sistemas de AWS, administrador de redes | 

### Implemente CloudFormation pilas e invoque la API
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la pila de `ApiStackV1`. | Para implementar la pila de `ApiStackV1`, use el siguiente comando:<pre>npm run deploy-v1</pre>El siguiente código de CDK agrega la asignación de API:<pre>var apiMapping = new CfnApiMapping(this, "ApiMapping", {<br />      apiId: this.lambdaRestApi.restApiId,<br />      domainName: props.customDomainName.domainName,<br />      stage: "api",<br />      apiMappingKey: "api/v1",<br />    });</pre> | Desarrollador de aplicaciones | 
| Implemente la pila de `ApiStackV2`. | Para implementar la pila de `ApiStackV2`, use el siguiente comando:<pre>npm run deploy-v2</pre> | Desarrollador de aplicaciones | 
| Invoque la API . | Para invocar la API y probar los puntos de conexión de la API mediante Bruno, consulte las instrucciones de [Información adicional](#implement-path-based-api-versioning-by-using-custom-domains-additional). | Desarrollador de aplicaciones | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminación de recursos. | Para destruir los recursos asociados a esta aplicación de ejemplo, utilice el comando siguiente:<pre>npx cdk destroy --all</pre>Asegúrese de limpiar todos los registros de DNS de Route 53 que se hayan agregado manualmente para el proceso de verificación de la propiedad del dominio. | Desarrollador de aplicaciones | 

## Resolución de problemas
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La implementación de `CustomDomainRouterStack` agota el tiempo de espera porque el certificado no se puede validar. | Asegúrese de haber agregado los registros CNAME de validación de DNS adecuados, tal como se describió en la tarea anterior. El nuevo certificado podría continuar mostrando el estado **Pendiente de validación** durante un máximo de 30 minutos después de agregar los registros de validación de DNS. Para obtener más información, consulta la [validación de DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) en la AWS Certificate Manager documentación. | 

## Recursos relacionados
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Implementación del control de versiones de API Gateway basado en encabezados con Amazon CloudFront](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/): esta entrada del blog de AWS Compute ofrece una estrategia de control de versiones basada en encabezados como alternativa a la estrategia de control de versiones basada en rutas que se describe en este patrón.
+ [AWS CDK Taller: este taller](https://cdkworkshop.com/20-typescript.html) introductorio se centra en la creación e implementación de aplicaciones mediante el uso de. AWS AWS Cloud Development Kit (AWS CDK) Este taller es compatible con Go, Python y TypeScript. 

## Información adicional
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Prueba de la API con Bruno**

Le recomendamos que utilice [Bruno](https://www.usebruno.com/), una herramienta de prueba de API de código abierto, para comprobar que el enrutamiento basado en rutas funciona correctamente en la aplicación de ejemplo. Este patrón proporciona una colección de ejemplo para facilitar las pruebas de la API de ejemplo.

Para invocar y probar la API, use los siguientes pasos:

1. [Instale Bruno.](https://www.usebruno.com/downloads)

1. Abra Bruno.

1. En el [repositorio de código](https://github.com/aws-samples/path-based-versioning-with-api-gateway) de este patrón, selecciona **Bruno/Sample-API- Gateway-Custom-Domain-Versioning ** y abre la colección.

1. Para ver el menú desplegable **Entornos** en la parte superior derecha de la interfaz de usuario (UI), seleccione cualquier solicitud de la colección.

1. En el menú desplegable **Entornos**, seleccione **Configurar**.

1. Sustituya el valor de `REPLACE_ME_WITH_YOUR_DOMAIN` por su dominio personalizado.

1. Elija **Guardar** y, a continuación, cierre la sección **Configuración**.

1. En **Entorno de pruebas**,** **compruebe que esté seleccionada la opción **Activo**.

1. Invoque su API mediante el botón **->** de la solicitud seleccionada.

1. Observe cómo se gestiona la validación (pasando valores no numéricos) en V1 en comparación con V2.

Para ver capturas de pantalla de ejemplos de invocación de la API y una comparación de las validaciones de V1 y V2, consulte **Testing your sample API** en el archivo `README.md` del [repositorio de código](https://github.com/aws-samples/path-based-versioning-with-api-gateway) de este patrón.

# Importe la biblioteca psycopg2 para interactuar con su base de AWS Lambda datos PostgreSQL
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Resumen
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) es un adaptador de bases de datos de PostgresSQL para Python. Los desarrolladores utilizan la biblioteca `psycopg2` para escribir aplicaciones de Python que interactúan con las bases de datos de PostgreSQL.

En Amazon Web Services (AWS), los desarrolladores también utilizan [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) para ejecutar código de aplicaciones o servicios de backend. Lambda es un servicio de computación sin servidor y basado en eventos que ejecuta código sin necesidad de aprovisionar ni administrar servidores.

De forma predeterminada, cuando se crea una función nueva que utiliza un [tiempo de ejecución de Python compatible con Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), el entorno de tiempo de ejecución de Lambda se crea a partir de una [imagen base de Lambda](https://github.com/aws/aws-lambda-base-images) proporcionada por AWS. Bibliotecas como `pandas` o `psycopg2` no se incluyen en la imagen base. Para usar una biblioteca, debe agruparla en un paquete personalizado y adjuntarla a Lambda.

Hay varias formas de agrupar y adjuntar una biblioteca, incluidas las siguientes:
+ Implemente la función de Lambda desde un [archivo .zip](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html).
+ Implemente la función de Lambda a partir de una imagen de contenedor personalizada.
+ Cree una [capa de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) y adjúntela a su función de Lambda.

Este patrón muestra las dos primeras opciones.

Con un paquete de implementación .zip, agregar la biblioteca `pandas` a la función de Lambda es relativamente sencillo. Cree una carpeta en su máquina Linux, agregue el script de Lambda junto con la biblioteca `pandas` y las dependencias de la biblioteca a la carpeta, comprima la carpeta y proporciónela como origen para su función de Lambda.

Aunque el uso de un paquete de implementación .zip es una práctica habitual, ese enfoque no funciona para la biblioteca `psycopg2`. Este patrón muestra primero el error que se produce si se utiliza un paquete de implementación .zip para agregar la biblioteca `psycopg2` a la función de Lambda. A continuación, el patrón muestra cómo implementar Lambda desde un Dockerfile y editar la imagen de Lambda para que la biblioteca `psycopg2` funcione.

Para obtener información sobre los tres recursos que implementa el patrón, consulte la sección [Información adicional](#import-psycopg2-library-lambda-additional).

## Requisitos previos y limitaciones
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS con permisos suficientes para implementar los recursos utilizados por este patrón AWS 
+ AWS Cloud Development Kit (AWS CDK) instalado globalmente mediante la ejecución `npm install -g aws-cdk`
+ Un cliente Git
+ Python
+ Docker

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para conocer la disponibilidad de las regiones, consulte [Servicios de AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte la página [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Versión de tiempo de ejecución de Python [compatible con Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Versión 2.9.3 de Psycopg2
+ Versión 1.5.2 de pandas

## Arquitectura
<a name="import-psycopg2-library-lambda-architecture"></a>

**Información general de la solución**

Para ilustrar los desafíos a los que puede enfrentarse al utilizar la biblioteca `psycopg2` en Lambda, el patrón implementa dos funciones de Lambda:
+ Una función de Lambda con el tiempo de ejecución de Python creada a partir de un archivo .zip. Las bibliotecas `psycopg2` y `pandas` se instalan en este paquete de implementación .zip mediante [pip](https://pypi.org/project/pip/).
+ Una función de Lambda con el tiempo de ejecución de Python creada a partir de un Dockerfile. El Dockerfile instala las bibliotecas `psycopg2` y `pandas` en la imagen de contenedor de Lambda.

La primera función de Lambda instala la biblioteca `pandas` y sus dependencias en un archivo .zip; y Lambda puede usar esa biblioteca.

La segunda función de Lambda demuestra que, al crear una imagen de contenedor para la función de Lambda, puede ejecutar las bibliotecas `pandas` y `psycopg2` en Lambda.

## Tools (Herramientas)
<a name="import-psycopg2-library-lambda-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) es un marco de desarrollo de software que lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

**Otras herramientas**
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.
+ [pandas](https://pandas.pydata.org/) es una herramienta de código abierto basada en Python para el análisis y la manipulación de datos.
+ [Psycopg](https://www.psycopg.org/docs/) es un adaptador de bases de datos de PostgreSQL para el lenguaje Python diseñado para aplicaciones de varios subprocesos. Este patrón emplea Psycopg2.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

El código de este patrón está disponible en el repositorio [import-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - -. in-lambda-to-interact with-postgres-database GitHub

## Prácticas recomendadas
<a name="import-psycopg2-library-lambda-best-practices"></a>

Este patrón le proporciona un ejemplo práctico de cómo crear una función Lambda AWS CDK a partir de un Dockerfile. Si reutiliza este código en su aplicación, asegúrese de que los recursos implementados cumplan con todos los requisitos de seguridad. Utilice herramientas como [Checkov](https://www.checkov.io/), que analiza las configuraciones de la infraestructura en la nube para detectar errores de configuración antes de implementar la infraestructura.

## Epics
<a name="import-psycopg2-library-lambda-epics"></a>

### Clonación del repositorio y configuración de la implementación
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el GitHub repositorio en su máquina local, ejecute los siguientes comandos:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS general | 
| Configurar su implementación. | Edite el `app.py` archivo con información sobre su Cuenta de AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS general | 

### Inicio de su cuenta de AWS e implementación de la aplicación
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap tu. Cuenta de AWS | Si aún no ha iniciado [su entorno de AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), ejecute los siguientes comandos con las AWS credenciales de su AWS cuenta:<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS general | 
| Implementar el código. | Para implementar la AWS CDK aplicación, ejecute el siguiente comando:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS general | 

### Prueba de las funciones de Lambda desde la Consola de administración de AWS
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Probar la función de Lambda creada a partir del archivo .zip. | Para probar la función de Lambda que se creó a partir del archivo .zip, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Como Lambda no encuentra las bibliotecas de PostgreSQL necesarias en la imagen predeterminada, no puede utilizar la biblioteca `psycopg2`. | AWS general | 
| Probar la función de Lambda creada a partir del Dockerfile. | Para utilizar la biblioteca `psycopg2` en la función de Lambda, debe editar la imagen de máquina de Amazon (AMI) de Lambda.Para probar la función de Lambda que se creó a partir del Dockerfile, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)El código siguiente muestra el Dockerfile que crea la AWS CDK plantilla:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>El Dockerfile toma la imagen AWS Lambda proporcionada para el entorno de ejecución de Python e instala [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), que contiene las bibliotecas necesarias para compilar aplicaciones que interactúan directamente con el servidor de administración de PostgreSQL. El Dockerfile también instala las bibliotecas `pandas` y `psycopg2`, que se indican en el archivo `requirements.txt`. | AWS general | 

## Recursos relacionados
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentación](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentación](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Información adicional
<a name="import-psycopg2-library-lambda-additional"></a>

En este patrón, la AWS CDK plantilla proporciona una AWS pila con tres recursos:
+ Un [rol de AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) para las funciones de Lambda.
+ Una función de Lambda con el tiempo de ejecución de Python. La función se implementa desde el paquete de implementación `Constructs/lambda/lambda_deploy.zip`.
+ Una función de Lambda con el tiempo de ejecución de Python. La función se implementa desde el Dockerfile de la carpeta `Constructs`.

El script de ambas funciones de Lambda comprueba si las bibliotecas `pandas` y `psycopg2` se han importado correctamente:

```
import pandas
print("pandas successfully imported")

import psycopg2
print("psycopg2 successfully imported")

def handler(event, context):
    """Function that checks whether psycopg2  and pandas are successfully imported or not"""
    return {"Status": "psycopg2 and pandas successfully imported"}
```

El paquete de implementación `lambda_deploy.zip` se crea con el script de bash `Constructs/lambda/build.sh`. Este script crea una carpeta, copia el script de Lambda, instala las bibliotecas `pandas` y `psycopg2` y genera el archivo .zip. Para generar el archivo.zip usted mismo, ejecute este script bash y vuelva a implementar la pila. AWS CDK 

El Dockerfile comienza con la imagen base AWS proporcionada para Lambda con un motor de ejecución de Python. El Dockerfile instala las bibliotecas `pandas` y `psycopg2` sobre la imagen predeterminada.

# Integre Amazon API Gateway con Amazon SQS para gestionar el REST asíncrono APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

*Natalia Colantonio Favero y Gustavo Martim, Amazon Web Services*

## Resumen
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-summary"></a>

Al implementar REST APIs, a veces es necesario exponer una cola de mensajes que las aplicaciones cliente puedan publicar. Por ejemplo, es posible que tenga problemas con la latencia de terceros APIs y que se produzcan retrasos en las respuestas, o puede que desee evitar el tiempo de respuesta de las consultas a la base de datos o escalar el servidor cuando hay un gran número de consultas APIs simultáneas. En estos escenarios, las aplicaciones cliente que publican en la cola solo necesitan saber que la API ha recibido los datos, no lo que ocurre después de recibirlos.

Este patrón crea un punto de conexión de la API de REST mediante [Amazon API Gateway](https://aws.amazon.com/api-gateway/) para enviar un mensaje a [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/). Crea una easy-to-implement integración entre los dos servicios que evita el acceso directo a la cola de SQS.

## Requisitos previos y limitaciones
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ [Una cuenta activa AWS](https://portal.aws.amazon.com/billing/signup/iam)

## Arquitectura
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-architecture"></a>

![\[Arquitectura para integrar API Gateway con Amazon SQS\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


En el siguiente diagrama se muestran estos pasos:

1. Solicite un punto de conexión de la API de REST POST mediante una herramienta como Postman, otra API u otras tecnologías.

1. API Gateway publica un mensaje, que se recibe en el cuerpo de la solicitud, en la cola.

1. Amazon SQS recibe el mensaje y envía una respuesta a API Gateway con un código de éxito o error.

## Tools (Herramientas)
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-tools"></a>
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.   

## Epics
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-epics"></a>

### Creación de una cola de SQS
<a name="create-an-sqs-queue"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de una cola. | Para crear una cola de SQS que reciba los mensajes de la API de REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 

### Cómo proporcionar acceso a Amazon SQS
<a name="provide-access-to-sqs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un rol de IAM. | Este rol de IAM proporciona a los recursos de API Gateway acceso completo a Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones, administrador de AWS | 

### Crear una API de REST
<a name="create-a-rest-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una API de REST. | Esta es la API de REST a la que se envían las solicitudes HTTP.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Conectar API Gateway a Amazon SQS. | Este paso permite que el mensaje fluya desde el cuerpo de la solicitud HTTP hasta Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 

### Prueba de la API de REST
<a name="test-the-rest-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Probar la API de REST. | Ejecute una prueba para comprobar si falta alguna configuración:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Cambiar la integración de la API para reenviar la solicitud correctamente a Amazon SQS. | Complete la configuración para corregir el error de integración:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Probar y validar el mensaje en Amazon SQS. | Ejecute una prueba para confirmar que la prueba se haya completado correctamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Probar API Gateway con un carácter especial. | Ejecute una prueba que incluya caracteres especiales (como &) que no sean aceptables en un mensaje:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Esto se debe a que los caracteres especiales no se admiten de forma predeterminada en el cuerpo del mensaje. En el siguiente paso, configurará API Gateway para que admita caracteres especiales. Para obtener más información sobre las conversiones de tipos de contenido, consulte la [documentación de API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | Desarrollador de aplicaciones | 
| Cambiar la configuración de la API para que admita caracteres especiales. | Ajuste la configuración para que acepte caracteres especiales en el mensaje:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)El nuevo mensaje debe incluir el carácter especial. | Desarrollador de aplicaciones | 

### Implementación de la API de REST
<a name="deploy-the-rest-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implementar la API. |  Para implementar la API de REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 
| Probar con una herramienta externa. | Ejecute una prueba con una herramienta externa para confirmar que el mensaje se ha recibido correctamente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desarrollador de aplicaciones | 

### Eliminación
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Eliminar la API. | En la [consola de API Gateway](https://console.aws.amazon.com/apigateway/), elija la API que creó y, a continuación, elija **Eliminar**. | Desarrollador de aplicaciones | 
| Eliminación del rol de IAM. | **En la [consola de IAM](https://console.aws.amazon.com/iam/), en el panel **Funciones**, seleccione **AWSGatewayRoleForSQS** y, a continuación, elija Eliminar.** | Desarrollador de aplicaciones | 
| Eliminar la cola de SQS. | En la [consola de Amazon SQS](https://console.aws.amazon.com/sqs/), en el panel **Colas**, elija la cola de SQS que ha creado y, a continuación, elija **Eliminar**. | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-resources"></a>
+ [SQS- SendMessage](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#SQS-SendMessage) (documentación de API Gateway)
+ [Conversiones de tipo de contenido en API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (documentación de API Gateway)
+ [Variables \$1util](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) (documentación de API Gateway)
+ [¿Cómo puedo integrar una API REST de API Gateway con Amazon SQS y resolver los errores más comunes?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (Artículo de AWS Re:POST)

# Procesamiento de eventos de forma asíncrona con Amazon API Gateway y AWS Lambda
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed y Michael Wallner, Amazon Web Services*

## Resumen
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.

Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.

Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway y. AWS Lambda La arquitectura admite la puesta en marcha de trabajos de procesamiento con una duración de hasta 15 minutos y utiliza una API de REST básica como interfaz.

[Projen](https://pypi.org/project/projen/) [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Projen configura automáticamente un entorno virtual de [Python](https://www.python.org/downloads/) con [pre-commit](https://pre-commit.com/) y las herramientas que se utilizan para garantizar la calidad del código, analizar la seguridad y realizar pruebas unitarias. Para obtener más información, consulte la sección [Herramientas](#process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools).

## Requisitos previos y limitaciones
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS
+ Las siguientes herramientas están instaladas en su estación de trabajo:
  + [AWS Cloud Development Kit (AWS CDK) Kit de herramientas versión 2.85.0](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
  + La versión 20.10.21 de [Docker](https://docs.docker.com/get-docker/)
  + [Versión 18.13.0 de Node.js](https://nodejs.org/en/download/)
  + La versión 0.71.111 de [Projen](https://pypi.org/project/projen/)
  + La versión 3.9.16 de [Python](https://www.python.org/downloads/)

**Limitaciones**
+ El tiempo de ejecución máximo de un trabajo está limitado por el tiempo de ejecución máximo de las funciones de Lambda (15 minutos).
+ El número máximo de solicitudes de trabajo simultáneas está limitado por la simultaneidad reservada de la función de Lambda.

## Arquitectura
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-architecture"></a>

El siguiente diagrama muestra la interacción de la API de trabajos con las funciones Lambda de procesamiento y gestión de errores de eventos, con los eventos almacenados en un archivo de eventos de Amazon. EventBridge 

![\[Nube de AWS architecture showing user interaction with jobs API, Lambda functions, and EventBridge.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.png)


Un flujo de trabajo habitual incluye los siguientes pasos:

1. Usted se autentica con AWS Identity and Access Management (IAM) y obtiene las credenciales de seguridad.

1. Envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, especificando los parámetros del trabajo en el cuerpo de la solicitud.

1. La API de trabajos, que es una API de REST de API Gateway, le devuelve una respuesta HTTP que contiene el identificador del trabajo.

1. La API de trabajos invoca de forma asíncrona la función de Lambda de procesamiento de eventos.

1. La función de procesamiento de eventos procesa el evento y, a continuación, agrega los resultados del trabajo a la tabla de Amazon DynamoDB de trabajos.

1. Envía una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`, con el identificador de trabajo del paso 3 como `{jobId}`.

1. La API de trabajos consulta la tabla `jobs` de DynamoDB para recuperar los resultados del trabajo.

1. La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.

1. Si se produce un error al procesar un evento, la función de procesamiento de eventos envía el evento a la función de gestión de errores.

1. La función de gestión de errores agrega los parámetros del trabajo a la tabla `jobs` de DynamoDB.

1. Puede recuperar los parámetros del trabajo enviando una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`.

1. Si se produce un error en la gestión de errores, la función de gestión de errores envía el evento a un archivo de eventos. EventBridge 

   Puede reproducir los eventos archivados utilizando. EventBridge

## Tools (Herramientas)
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le ayuda a interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, funciones de Lambda, puntos de conexión de invocación HTTP que utilizan destinos de API o buses de eventos en otras Cuentas de AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

**Otras herramientas**
+ [autopep8](https://github.com/hhatto/autopep8) formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) analiza el código de Python para detectar problemas de seguridad comunes.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) un verificador de confirmaciones y generador de `CHANGELOG` de Git.
+ [cfn-lint es un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.
+ [Postman](https://www.postman.com/) es una plataforma de API.
+ [pre-commit](https://pre-commit.com/) es un administrador de enlaces de Git.
+ [Projen](https://github.com/projen/projen) es un generador de proyectos.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) es un marco de Python para escribir pruebas pequeñas y legibles.

**Repositorio de código**

Este ejemplo de código de arquitectura se encuentra en el repositorio [Lambda y procesamiento de eventos GitHub asíncrono con API Gateway](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Prácticas recomendadas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-best-practices"></a>
+ Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) u otra solución de supervisión.
+ Esta arquitectura de ejemplo usa [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir `JobsAPIInvokeRole` podrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un [mecanismo de control de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Cuando un usuario envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, los datos de entrada se validan en dos niveles diferentes:
  + Amazon API Gateway se encarga de la [validación de la primera solicitud](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La función de procesamiento de eventos realiza la segunda solicitud.

    No se hace ninguna validación cuando el usuario realiza una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe la posibilidad de [usar AWS WAF para proteger su API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

## Epics
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-epics"></a>

### Configuración del entorno
<a name="set-up-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk.git</pre> | DevOps ingeniero | 
| Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante [Projen](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-lambda-cdk<br />npx projen</pre> | DevOps ingeniero | 
| Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | DevOps ingeniero | 

### Implementación de la arquitectura de ejemplo
<a name="deploy-the-example-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Para arrancar AWS CDK Cuenta de AWS, ejecuta el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS hogar, ejecute el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Prueba de la arquitectura
<a name="test-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale los requisitos previos de prueba. | Instale en su estación de trabajo [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) y [jq](https://jqlang.github.io/jq/).Se sugiere usar [Postman](https://www.postman.com/downloads/) para probar esta arquitectura de ejemplo, pero no es obligatorio. Si elige una herramienta para probar API alternativa, asegúrese de que sea compatible con la [autenticación de AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y consulte los puntos de conexión de la API expuestos, que se pueden inspeccionar [exportando la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingeniero | 
| Asuma el `JobsAPIInvokeRole`. | [Asuma](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) el `JobsAPIInvokeRole` que apareció en la salida del comando de implementación:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | AWS DevOps | 
| Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, [envíe solicitudes](https://learning.postman.com/docs/sending-requests/requests/#next-steps) a la API de trabajos. Para obtener más información, consulte la [documentación de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingeniero | 

## Resolución de problemas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el [grupo de CloudWatch registros de Amazon Logs `/aws/apigateway/JobsAPIAccessLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | 

## Recursos relacionados
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [Plantilla de mapeo de API Gateway y referencia de variables de registro de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Configurar la invocación asíncrona de la función Lambda de backend](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)

# Procesamiento de eventos de forma asíncrona con Amazon API Gateway y Amazon DynamoDB Streams
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini y Michael Wallner, Amazon Web Services*

## Resumen
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.

Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.

Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway, Amazon DynamoDB Streams y. AWS Lambda La arquitectura admite la puesta en marcha de trabajos de procesamiento en paralelo con los mismos parámetros de entrada y utiliza una API de REST básica como interfaz. En este ejemplo, el uso de Lambda como backend limita la duración de los trabajos a 15 minutos. Puede evitar este límite utilizando un servicio alternativo para procesar los eventos entrantes (por ejemplo,). AWS Fargate

[Projen](https://pypi.org/project/projen/) [se utiliza para configurar el entorno de desarrollo local y para implementar la arquitectura de ejemplo en un objetivo Cuenta de AWS, en combinación con el [AWS Cloud Development Kit (AWS CDK) kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) y Node.js.](https://nodejs.org/en/download/) Projen configura automáticamente un entorno virtual de [Python](https://www.python.org/downloads/) con [pre-commit](https://pre-commit.com/) y las herramientas que se utilizan para garantizar la calidad del código, analizar la seguridad y realizar pruebas unitarias. Para obtener más información, consulte la sección [Herramientas](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools).

## Requisitos previos y limitaciones
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-prereqs"></a>

**Requisitos previos**
+ Un activo Cuenta de AWS
+ Las siguientes herramientas están instaladas en su estación de trabajo:
  + [AWS Cloud Development Kit (AWS CDK) Kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versión 2.85.0 o posterior
  + La versión 20.10.21 o posterior de [Docker](https://docs.docker.com/get-docker/)
  + La versión 18 o posterior de [Node.js](https://nodejs.org/en/download/)
  + La versión 0.71.111 o posterior de [Projen](https://pypi.org/project/projen/)
  + La versión 3.9.16 o posterior de [Python](https://www.python.org/downloads/)

**Limitaciones**
+ El número máximo recomendado de lectores para DynamoDB Streams es de dos para evitar la limitación.
+ El tiempo de ejecución máximo de un trabajo está limitado por el tiempo de ejecución máximo de las funciones de Lambda (15 minutos).
+ El número máximo de solicitudes de trabajo simultáneas está limitado por la simultaneidad reservada de las funciones de Lambda.

## Arquitectura
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Arquitectura**

El siguiente diagrama muestra la interacción de la API de trabajos con DynamoDB Streams y las funciones Lambda de procesamiento y gestión de errores de eventos, con los eventos almacenados en un archivo de eventos de Amazon. EventBridge 

![\[Diagrama de arquitectura y proceso, con los pasos enumerados después del diagrama.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.png)


Un flujo de trabajo habitual incluye los siguientes pasos:

1. Se autentica con (IAM) y se obtienen las credenciales de seguridad AWS Identity and Access Management .

1. Envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, especificando los parámetros del trabajo en el cuerpo de la solicitud.

1. La API de trabajos devuelve una respuesta HTTP que contiene el identificador del trabajo.

1. La API de trabajos agrega los parámetros del trabajo a la tabla `jobs_table` de Amazon DynamoDB.

1. El flujo de DynamoDB de la tabla de DynamoDB `jobs_table` invoca las funciones de Lambda de procesamiento de eventos.

1. Las funciones de Lambda de procesamiento de eventos procesan el evento y, a continuación, agregan los resultados del trabajo a la tabla `jobs_table` de DynamoDB. Para garantizar la coherencia de los resultados, las funciones de procesamiento de eventos implementan un mecanismo de [bloqueo positivo](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html).

1. Envía una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`, con el identificador de trabajo del paso 3 como `{jobId}`.

1. La API de trabajos consulta la tabla `jobs_table` de DynamoDB para recuperar los resultados del trabajo.

1. La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.

1. Si el procesamiento de eventos falla, la asignación de orígenes de la función de procesamiento de eventos envía el evento al tema de Amazon Simple Notification Service (Amazon SNS) de gestión de errores.

1. El tema de gestión de errores de SNS envía el evento de forma asíncrona a la función de gestión de errores.

1. La función de gestión de errores agrega los parámetros del trabajo a la tabla `jobs_table` de DynamoDB.

   Puede recuperar los parámetros del trabajo enviando una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`.

1. Si la gestión de errores falla, la función de gestión de errores envía el evento a un archivo de Amazon EventBridge .

   Puede reproducir los eventos archivados utilizando. EventBridge

## Tools (Herramientas)
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) es un marco de desarrollo de software que lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, las funciones de AWS Lambda, los puntos de conexión de invocación HTTP que utilizan destinos de API o los buses de eventos de otras cuentas de AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.

**Otras herramientas**
+ [autopep8](https://github.com/hhatto/autopep8) formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) analiza el código de Python para detectar problemas de seguridad comunes.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) un verificador de confirmaciones y generador de `CHANGELOG` de Git.
+ [cfn-lint es un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.
+ [Postman](https://www.postman.com/) es una plataforma de API.
+ [pre-commit](https://pre-commit.com/) es un administrador de enlaces de Git.
+ [Projen](https://github.com/projen/projen) es un generador de proyectos.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) es un marco de Python para escribir pruebas pequeñas y legibles.

**Repositorio de código**

Este ejemplo de código de arquitectura se encuentra en el repositorio GitHub [Asynchronous Processing with API Gateway y DynamoDB Streams](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk).

## Prácticas recomendadas
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-best-practices"></a>
+ Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) u otra solución de supervisión.
+ Esta arquitectura de ejemplo usa [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir `JobsAPIInvokeRole` podrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un [mecanismo de control de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Cuando un usuario envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, los datos de entrada se validan en dos niveles diferentes:
  + API Gateway se encarga de la [validación de la primera solicitud](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La función de procesamiento de eventos realiza la segunda solicitud.

    No se hace ninguna validación cuando el usuario realiza una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe su [uso AWS WAF](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) para proteger su API.
+ Para evitar limitaciones, la [documentación de DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) desaconseja a los usuarios hacer operaciones de lectura con más de dos consumidores de la misma partición del flujo. Para escalar horizontalmente el número de consumidores, le recomendamos que utilice [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ En este ejemplo, se ha utilizado el [bloqueo positivo](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) para garantizar actualizaciones coherentes de los elementos de la tabla `jobs_table` de DynamoDB. Según los requisitos del caso de uso, es posible que tenga que implementar mecanismos de bloqueo más fiables, como el bloqueo negativo.

## Epics
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-epics"></a>

### Configuración del entorno
<a name="set-up-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git</pre> | DevOps ingeniero | 
| Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante [Projen](https://github.com/projen/projen):<pre>cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk<br />npx projen</pre> | DevOps ingeniero | 
| Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | DevOps ingeniero | 

### Implementación de la arquitectura de ejemplo
<a name="deploy-the-example-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Para arrancar [AWS CDK](https://aws.amazon.com/cdk/) Cuenta de AWS, ejecuta el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS hogar, ejecute el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Prueba de la arquitectura
<a name="test-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale los requisitos previos de prueba. | Instale en su estación de trabajo [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) y [jq](https://jqlang.github.io/jq/).Se sugiere usar [Postman](https://www.postman.com/downloads/) para probar esta arquitectura de ejemplo, pero no es obligatorio. Si elige una herramienta para probar API alternativa, asegúrese de que sea compatible con la [autenticación de AWA Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y consulte los puntos de conexión de la API expuestos, que se pueden inspeccionar [exportando la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingeniero | 
| Asuma el `JobsAPIInvokeRole`. | [Asuma](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) el `JobsAPIInvokeRole` que apareció en la salida del comando `deploy`:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | AWS DevOps | 
| Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, envíe solicitudes a la API de trabajos. Para obtener más información, consulte la [documentación de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingeniero | 

## Resolución de problemas
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el [grupo de CloudWatch registros de Amazon Logs `/aws/apigateway/JobsAPIAccessLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Recursos relacionados
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-resources"></a>
+ [Plantilla de mapeo de API Gateway y referencia de variables de registro de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Cambiar la captura de datos para DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Bloqueo optimista con número de versión](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Uso de Kinesis Data Streams para capturar los cambios en DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

# Procesamiento de eventos de forma asíncrona con Amazon API Gateway, Amazon SQS y AWS Fargate
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini y Michael Wallner, Amazon Web Services*

## Resumen
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) es un servicio totalmente gestionado que los desarrolladores pueden utilizar para crear, publicar, mantener, supervisar y proteger APIs a cualquier escala. Gestiona las tareas relacionadas con la aceptación y el procesamiento de centenares de miles de llamadas simultáneas a la API.

Una cuota de servicio importante de API Gateway es el tiempo de espera de la integración. El tiempo de espera es el tiempo máximo durante el que un servicio de backend debe devolver una respuesta antes de que la API de REST devuelva un error. El límite estricto de 29 segundos suele ser aceptable para las cargas de trabajo sincrónicas. Sin embargo, ese límite representa un desafío para los desarrolladores que desean usar API Gateway con cargas de trabajo asíncronas.

Este patrón muestra un ejemplo de arquitectura para procesar eventos de forma asíncrona mediante API Gateway, Amazon Simple Queue Service (Amazon SQS) y. AWS Fargate La arquitectura admite la puesta en marcha de trabajos de procesamiento sin restricciones de duración y utiliza una API de REST básica como interfaz.

[Projen](https://pypi.org/project/projen/) [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) Projen configura automáticamente un entorno virtual de [Python](https://www.python.org/downloads/) con [pre-commit](https://pre-commit.com/) y las herramientas que se utilizan para garantizar la calidad del código, analizar la seguridad y realizar pruebas unitarias. Para obtener más información, consulte la sección [Herramientas](#process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools).

## Requisitos previos y limitaciones
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Las siguientes herramientas están instaladas en su estación de trabajo:
  + [AWS Cloud Development Kit (AWS CDK) Kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versión 2.85.0 o posterior
  + La versión 20.10.21 o posterior de [Docker](https://docs.docker.com/get-docker/)
  + La versión 18 o posterior de [Node.js](https://nodejs.org/en/download/)
  + La versión 0.71.111 o posterior de [Projen](https://pypi.org/project/projen/)
  + La versión 3.9.16 o posterior de [Python](https://www.python.org/downloads/)

**Limitaciones**
+ Los trabajos simultáneos están limitados a 500 tareas por minuto, que es el número máximo de tareas que Fargate puede aprovisionar.

## Arquitectura
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-architecture"></a>

El siguiente diagrama muestra la interacción de la API de trabajos con la tabla `jobs` Amazon DynamoDB, el servicio Fargate de procesamiento de eventos y la función de gestión de errores. AWS Lambda Los eventos se almacenan en un archivo de EventBridge eventos de Amazon.

![\[Diagrama de arquitectura con una descripción a continuación del diagrama.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.png)


Un flujo de trabajo habitual incluye los siguientes pasos:

1. Usted se autentica con AWS Identity and Access Management (IAM) y obtiene las credenciales de seguridad.

1. Envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, especificando los parámetros del trabajo en el cuerpo de la solicitud.

1. La API de trabajos, que es una API de REST de API Gateway, le devuelve una respuesta HTTP que contiene el identificador del trabajo.

1. La API de trabajos envía un mensaje a la cola de SQS.

1. Fargate extrae el mensaje de la cola de SQS, procesa el evento y, a continuación, agrega los resultados del trabajo a la tabla `jobs` de DynamoDB.

1. Envía una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`, con el identificador de trabajo del paso 3 como `{jobId}`.

1. La API de trabajos consulta la tabla `jobs` de DynamoDB para recuperar los resultados del trabajo.

1. La API de trabajos devuelve una respuesta HTTP que contiene los resultados del trabajo.

1. Si el procesamiento de eventos falla, la cola de SQS envía el evento a la cola de mensajes fallidos (DLQ).

1. Un EventBridge evento inicia la función de gestión de errores.

1. La función de gestión de errores agrega los parámetros del trabajo a la tabla `jobs` de DynamoDB.

1. Puede recuperar los parámetros del trabajo enviando una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`.

1. Si la gestión de errores falla, la función de gestión de errores envía el evento a un archivo. EventBridge 

   Puede reproducir los eventos archivados utilizando. EventBridge

## Tools (Herramientas)
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)le ayuda a ejecutar contenedores sin necesidad de gestionar servidores o instancias de Amazon Elastic Compute Cloud (Amazon EC2). Se utiliza en conjunto con Amazon Elastic Container Service (Amazon ECS).
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, funciones de Lambda, puntos de conexión de invocación HTTP que utilizan destinos de API o buses de eventos en otras Cuentas de AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.

**Otras herramientas**
+ [autopep8](https://github.com/hhatto/autopep8) formatea automáticamente el código de Python según la guía de estilo Python Enhancement Proposal (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) analiza el código de Python para detectar problemas de seguridad comunes.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) un verificador de confirmaciones y generador de `CHANGELOG` de Git.
+ [cfn-lint es un linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático que revisa si la infraestructura como código (IaC) se ha configurado mal en términos de seguridad y cumplimiento.
+ [jq](https://stedolan.github.io/jq/download/) es una herramienta de línea de comandos para analizar JSON.
+ [Postman](https://www.postman.com/) es una plataforma de API.
+ [pre-commit](https://pre-commit.com/) es un administrador de enlaces de Git.
+ [Projen](https://github.com/projen/projen) es un generador de proyectos.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) es un marco de Python para escribir pruebas pequeñas y legibles.

**Repositorio de código**

Este ejemplo de código de arquitectura se encuentra en el repositorio de SQS [y procesamiento GitHub asíncrono con API Gateway](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk).

## Prácticas recomendadas
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-best-practices"></a>
+ Esta arquitectura de ejemplo no incluye la supervisión de la infraestructura implementada. Si su caso de uso requiere supervisión, evalúe la posibilidad de agregar [CDK Monitoring Constructs](https://constructs.dev/packages/cdk-monitoring-constructs) u otra solución de supervisión.
+ Esta arquitectura de ejemplo usa [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API de trabajos. Cualquier persona autorizada a asumir `JobsAPIInvokeRole` podrá invocar la API de trabajos. Como tal, el mecanismo de control de acceso es binario. Si su caso de uso requiere un modelo de autorización más complejo, evalúe la posibilidad de usar un [mecanismo de control de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Cuando un usuario envía una solicitud `POST` HTTP al punto de conexión de la API de trabajos `/jobs`, los datos de entrada se validan en dos niveles diferentes:
  + API Gateway se encarga de la [validación de la primera solicitud](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + La función de procesamiento de eventos realiza la segunda solicitud.

    No se hace ninguna validación cuando el usuario realiza una solicitud `GET` HTTP al punto de conexión de la API de trabajos `/jobs/{jobId}`. Si su caso de uso requiere una validación de entrada adicional y un mayor nivel de seguridad, evalúe su [uso AWS WAF para](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) proteger su API.

## Epics
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-epics"></a>

### Configuración del entorno
<a name="set-up-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el repositorio localmente, use el siguiente comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git</pre> | DevOps ingeniero | 
| Configure el proyecto. | Cambie el directorio a la raíz del repositorio y configure el entorno virtual de Python y todas las herramientas mediante [Projen](https://github.com/projen/projen):<pre>cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk<br />npx projen</pre> | DevOps ingeniero | 
| Instale enlaces de pre-commit. | Para instalar enlaces de pre-commit, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | DevOps ingeniero | 

### Implementación de la arquitectura de ejemplo
<a name="deploy-the-example-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap. AWS CDK | Para arrancar [AWS CDK](https://aws.amazon.com/cdk/) Cuenta de AWS, ejecuta el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implemente la arquitectura de ejemplo. | Para implementar la arquitectura de ejemplo en su Cuenta de AWS servidor, ejecute el siguiente comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Prueba de la arquitectura
<a name="test-the-architecture"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instale los requisitos previos de prueba. | Instale en su estación de trabajo [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/) y [jq](https://jqlang.github.io/jq/).Se sugiere usar [Postman](https://www.postman.com/downloads/) para probar esta arquitectura de ejemplo, pero no es obligatorio. Si elige una herramienta para probar API alternativa, asegúrese de que sea compatible con la [autenticación de AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y consulte los puntos de conexión de la API expuestos, que se pueden inspeccionar [exportando la API de REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html). | DevOps ingeniero | 
| Asuma el `JobsAPIInvokeRole`. | [Asuma](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) el `JobsAPIInvokeRole` que apareció en la salida del comando `deploy`:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure Postman. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Pruebe la arquitectura de ejemplo. | Para probar la arquitectura de ejemplo, envíe solicitudes a la API de trabajos. Para obtener más información, consulte la [documentación de Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps ingeniero | 

## Resolución de problemas
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La destrucción y posterior redespliegue de la arquitectura de ejemplo fallan porque el [grupo de CloudWatch registros de Amazon Logs `/aws/apigateway/JobsAPIAccessLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 
| La destrucción y posterior redespliegue de la arquitectura del ejemplo fallan porque el [grupo de CloudWatch registros `/aws/ecs/EventProcessingServiceLogs` ya existe](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 

## Recursos relacionados
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-resources"></a>
+ [Plantilla de mapeo de API Gateway y referencia de variables de registro de acceso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [¿Cómo integro una API de REST de API Gateway con Amazon SQS y soluciono los errores comunes?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)

# Puesta en marcha de las tareas de Automatización de AWS Systems Manager de forma sincrónica desde AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El khoury, Amazon Web Services*

## Resumen
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Este patrón explica cómo integrarse AWS Step Functions con AWS Systems Manager. Utiliza las integraciones de servicios del AWS SDK para llamar a la **startAutomationExecution**API de Systems Manager con un token de tarea de un flujo de trabajo de una máquina de estado y se detiene hasta que el token regresa con una llamada correcta o errónea. Para demostrar la integración, este patrón implementa un encapsulador de documentos (manuales de procedimientos) de Automatización en torno a los documentos `AWS-RunShellScript` o `AWS-RunPowerShellScript`; además, usa `.waitForTaskToken` para llamar de forma sincrónica a `AWS-RunShellScript` o `AWS-RunPowerShellScript`. Para obtener más información sobre las integraciones de servicios del AWS SDK en Step Functions, consulta la [Guía para AWS Step Functions desarrolladores](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** es un servicio de flujo de trabajo visual de bajo código que puede utilizar para crear aplicaciones distribuidas, automatizar los procesos empresariales y de TI y crear canalizaciones de datos y aprendizaje automático mediante AWS el uso de servicios. Los flujos de trabajo gestionan los errores, los reintentos, la paralelización, las integraciones de servicios y la observabilidad para que pueda centrarse en una lógica empresarial de mayor valor.

La automatización, una capacidad de AWS Systems Manager, simplifica las tareas comunes de mantenimiento, implementación y corrección para empresas Servicios de AWS como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift y Amazon Simple Storage Service (Amazon S3). Automation le ofrece un control granular sobre la concurrencia de sus automatizaciones. Por ejemplo, puede especificar a cuántos recursos desea dirigirse simultáneamente y cuántos errores pueden producirse antes de que se detenga una automatización.

Para obtener detalles sobre la implementación, incluidos los pasos, parámetros y ejemplos del manual de procedimientos, consulte la sección [Información adicional](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Requisitos previos y limitaciones
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Requisitos previos **
+  AWS Una cuenta activa
+ AWS Identity and Access Management (IAM) para acceder a Step Functions y Systems Manager
+ Una EC2 instancia con el Agente Systems Manager (SSM Agent) [instalado](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) en la instancia
+ [Un perfil de instancia de IAM para Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) adjunto a la instancia en la que planea ejecutar el manual de procedimientos
+ Un rol de Step Functions que tenga los siguientes permisos de IAM (que sigan el principio de privilegio mínimo):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Versiones de producto**
+ Versión de esquema de documento de SSM 0.3 o posterior
+ SSM Agent versión 2.3.672.0 o posterior

## Arquitectura
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Pila de tecnología de destino**
+ AWS Step Functions
+ AWS Systems Manager Automation

**Arquitectura de destino**

![\[Arquitectura para ejecutar tareas de automatización de Systems Manager de forma sincrónica desde Step Functions\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automatización y escala**
+ Este patrón proporciona una AWS CloudFormation plantilla que puede usar para implementar los manuales de ejecución en varias instancias. (Consulte el repositorio de [implementación de GitHub Step Functions y Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken)).

## Tools (Herramientas)
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-tools"></a>

**Servicios de AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en todas Cuentas de AWS las regiones.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) lo ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones esenciales para la empresa.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) lo ayuda a administrar las aplicaciones y la infraestructura que se ejecutan en la Nube de AWS. Simplifica la administración de aplicaciones y recursos, reduce el tiempo necesario para detectar y resolver problemas operativos y le ayuda a administrar sus recursos de forma segura y a escala. AWS 

**Código**

El código de este patrón está disponible en el repositorio de [implementación de GitHub Step Functions y Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Epics
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Creación de manuales de procedimientos
<a name="create-runbooks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue la CloudFormation plantilla. | Descarga la `ssm-automation-documents.cfn.json` plantilla de la `cloudformation ` carpeta del GitHub repositorio. | AWS DevOps | 
| Cree manuales de procedimientos. | Inicie sesión en Consola de administración de AWS, abra la [CloudFormation consola](https://console.aws.amazon.com/cloudformation/) e implemente la plantilla. Para obtener más información sobre la implementación de CloudFormation plantillas, consulte [Crear una pila en la CloudFormation consola](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) en la CloudFormation documentación. La CloudFormation plantilla implementa tres recursos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Crear una máquina de estado de muestra
<a name="create-a-sample-state-machine"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una máquina de estado de prueba.  | Siga las instrucciones de la [Guía para desarrolladores de AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) para crear y poner en marcha una máquina de estados. Para la definición, utilice el siguiente código. Asegúrese de actualizar el valor `InstanceIds` con el ID de una instancia válida habilitada para Systems Manager en su cuenta.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Este código llama al manual de procedimientos para ejecutar dos comandos que demuestran la llamada `waitForTaskToken` a Systems Manager Automation.El valor del parámetro `shell` (`Shell` o `PowerShell`) determina si el documento de Automatización se pone en marcha en `AWS-RunShellScript` o `AWS-RunPowerShellScript`.La tarea escribe en el `/home/ssm-user/automation.log` archivo «Se trata de un waitForTask token de automatización en ejecución de pruebas» y, a continuación, se suspende durante 100 segundos antes de responder con el token de la tarea y lanzar la siguiente tarea del flujo de trabajo.Si, en vez de eso, quiere llamar al manual de procedimientos `SfnRunCommandByTargets`, sustituya la sección `Parameters` del código anterior por la siguiente:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Actualice el rol de IAM de la máquina de estado. | El paso anterior crea automáticamente un rol de IAM dedicado para la máquina de estados. Sin embargo, no concede permisos para llamar al manual de procedimientos. Actualice el rol añadiendo los permisos siguientes:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Valide las llamadas sincrónicas. | Ejecute la máquina de estados para validar la llamada sincrónica entre Step Functions y Systems Manager Automation. Para ver un ejemplo de salida, consulte la sección [Información adicional](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Recursos relacionados
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Cómo empezar con AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guía para AWS Step Functions desarrolladores*)
+ [Espere a que le devuelvan la llamada con el token de la tarea](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*guía para AWS Step Functions desarrolladores*, patrones de integración de servicios)
+ Llamadas a las API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) y [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) (documentación de Boto3) 
+ [AWS Systems Manager Automatización](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*guía AWS Systems Manager del usuario*)

## Información adicional
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Detalles de la implementación**

Este patrón proporciona una CloudFormation plantilla que despliega dos manuales de ejecución de Systems Manager:
+ `SfnRunCommandByInstanceIds`ejecuta el `AWS-RunPowerShellScript` comando `AWS-RunShellScript` o mediante la instancia. IDs
+ `SfnRunCommandByTargets` pone en marcha el comando `AWS-RunShellScript` o `AWS-RunPowerShellScript` usando destinos.

Cada manual de procedimientos implementa cuatro pasos para lograr una llamada sincrónica cuando se usa la opción `.waitForTaskToken` de Step Functions.


| 
| 
| Paso | Action | Description (Descripción) | 
| --- |--- |--- |
| **1** | `Branch` | Comprueba el valor del parámetro `shell` (`Shell` o `PowerShell`) para decidir si poner en marcha `AWS-RunShellScript` en Linux o `AWS-RunPowerShellScript` en Windows. | 
| **2** | `RunCommand_Shell` o `RunCommand_PowerShell` | Recibe varias entradas y pone en marcha el comando `RunShellScript` o `RunPowerShellScript`. Para obtener más información, consulte la pestaña **Detalles** de `RunCommand_Shell` o `RunCommand_PowerShell` del documento de Automatización en la consola de Systems Manager. | 
| **3** | `SendTaskFailure` | Se ejecuta cuando se anula o cancela el paso 2. Llama a la API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) de Step Functions, que acepta tres parámetros como entrada: el token pasado por la máquina de estados, el error de error y una descripción de la causa del error. | 
| **4** | `SendTaskSuccess` | Se ejecuta cuando el paso 2 se realiza correctamente. Llama a la API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) de Step Functions, que acepta el token pasado por la máquina de estados como entrada. | 

**Parámetros del manual de procedimientos**

Manual de procedimientos `SfnRunCommandByInstanceIds`:


| 
| 
| Nombre del parámetro | Tipo | Opcional u obligatorio | Description (Descripción) | 
| --- |--- |--- |--- |
| `shell` | Cadena | Obligatorio | El intérprete de comandos de las instancias para decidir si poner en marcha `AWS-RunShellScript` para Linux o `AWS-RunPowerShellScript` para Windows. | 
| `deliveryTimeout` | Entero | Opcional | La cantidad, en segundos, de espera para que un comando se envíe a SSM Agent de una instancia. Este parámetro tiene un valor mínimo de 30 (0,5 minutos) y un valor máximo de 2 592 000 (720 horas). | 
| `executionTimeout` | Cadena | Opcional | El tiempo, en segundos, para que un comando se complete antes de considerar que se ha producido un error. El valor predeterminado es de 3600 (1 hora). El valor máximo es 172800 (48 horas). | 
| `workingDirectory` | Cadena | Opcional | La ruta al directorio de trabajo en la instancia. | 
| `Commands` | StringList | Obligatorio | El script o comando del intérprete de comandos que se va a ejecutar. | 
| `InstanceIds` | StringList | Obligatorio | La IDs de las instancias en las que desea ejecutar el comando. | 
| `taskToken` | Cadena | Obligatorio | El token de tarea que se utilizará para las respuestas de devolución de llamada. | 

Manual de procedimientos `SfnRunCommandByTargets`:


| 
| 
| Name | Tipo | Opcional u obligatorio | Description (Descripción) | 
| --- |--- |--- |--- |
| `shell` | Cadena | Obligatorio | El intérprete de comandos de las instancias para decidir si poner en marcha `AWS-RunShellScript` para Linux o `AWS-RunPowerShellScript` para Windows. | 
| `deliveryTimeout` | Entero | Opcional | La cantidad, en segundos, de espera para que un comando se envíe a SSM Agent de una instancia. Este parámetro tiene un valor mínimo de 30 (0,5 minutos) y un valor máximo de 2 592 000 (720 horas). | 
| `executionTimeout` | Entero | Opcional | El tiempo, en segundos, para que un comando se complete antes de considerar que se ha producido un error. El valor predeterminado es de 3600 (1 hora). El valor máximo es 172800 (48 horas). | 
| `workingDirectory` | Cadena | Opcional | La ruta al directorio de trabajo en la instancia. | 
| `Commands` | StringList | Obligatorio | El script o comando del intérprete de comandos que se va a ejecutar. | 
| `Targets` | MapList | Obligatorio | Una matriz de criterios de búsqueda que identifica las instancias utilizando los pares clave-valor que usted especifique. Por ejemplo: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | Cadena | Obligatorio | El token de tarea que se utilizará para las respuestas de devolución de llamada. | 

**Resultados de ejemplo**

La siguiente tabla proporciona un ejemplo de salida de la función step. Muestra que el tiempo total de ejecución es superior a 100 segundos entre el paso 5 (`TaskSubmitted`) y el paso 6 (`TaskSucceeded`). Esto demuestra que la función de Step Functions esperó a que finalizara el comando `sleep 100` antes de pasar a la siguiente tarea del flujo de trabajo.


| 
| 
| ID | Tipo | Paso | Recurso | Tiempo transcurrido (ms) | Timestamp | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 de marzo de 2022 02:50:34.303 p.m. | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 de marzo de 2022 02:50:34.343 p.m. | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 de marzo de 2022 02:50:34.343 p.m. | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 de marzo de 2022 02:50:34.457 p.m. | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 de marzo de 2022 02:50:34.960 p.m. | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 de marzo de 2022 02:52:18.138 p.m. | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 de marzo de 2022 02:52:18.163 p.m. | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 de marzo de 2022 02:52:18.200 p.m. | 

# Ejecute lecturas paralelas de objetos S3 mediante Python en una AWS Lambda función
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

## Resumen
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-summary"></a>

Puede utilizar este patrón para recuperar y resumir una lista de documentos de buckets de Amazon Simple Storage Service (Amazon S3) en tiempo real. El patrón proporciona código de ejemplo para leer en paralelo objetos de buckets de S3 en Amazon Web Services (AWS). El patrón muestra cómo ejecutar eficientemente tareas I/O enlazadas con AWS Lambda funciones usando Python.

Una empresa financiera utilizó este patrón en una solución interactiva para aprobar o rechazar manualmente las transacciones financieras correlacionadas en tiempo real. Los documentos de las transacciones financieras se almacenaron en un bucket de S3 relacionado con el mercado. Un operador seleccionó una lista de documentos del bucket de S3, analizó el valor total de las transacciones calculadas por la solución y decidió aprobar o rechazar el lote seleccionado.

Las tareas vinculadas a operacioness de E/S admiten varios subprocesos. En este código de ejemplo, el [concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)se utiliza con un máximo de 30 subprocesos simultáneos, aunque las funciones Lambda admiten hasta 1024 subprocesos (uno de los cuales es el proceso principal). Este límite se debe a que demasiados subprocesos crean problemas de latencia debido al cambio de contexto y al uso de los recursos de computación. También es necesario aumentar el número máximo de conexiones del grupo en `botocore` para que todos los subprocesos puedan descargar el objeto de S3 de forma simultánea.

El código de ejemplo usa un objeto de 8,3 KB, con datos JSON en un bucket de S3. El objeto se lee varias veces. Cuando la función de Lambda lee el objeto, los datos JSON se decodifican en un objeto de Python. En diciembre de 2024, el resultado tras ejecutar este ejemplo fue de 1000 lecturas procesadas en 2,3 segundos y 10 000 lecturas procesadas en 27 segundos mediante una función Lambda configurada con 2304 MB de memoria. AWS Lambda admite configuraciones de memoria de 128 MB a 10 240 MB (10 GB), aunque aumentar la memoria Lambda a más de 2304 MB no ayudó a reducir el tiempo de ejecución de esta tarea específica vinculada a la E/S.

La herramienta [AWS Lambda Power Tuning](https://github.com/alexcasalboni/aws-lambda-power-tuning) se utilizó para probar diferentes configuraciones de memoria Lambda y verificar la mejor performance-to-cost relación para la tarea. Para obtener más información, consulte la sección [Información adicional](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Requisitos previos y limitaciones
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Competencia en desarrollo con Python.

**Limitaciones**
+ Una función de Lambda puede tener como máximo [1024 procesos o subprocesos de puesta en marcha](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution).
+  Cuentas de AWS Los nuevos tienen un límite de memoria Lambda de 3.008 MB. Ajuste la herramienta de ajuste AWS Lambda de potencia en consecuencia. Para obtener más información, consulte la sección [Solución de problemas](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ Amazon S3 tiene un límite de [5500 GET/HEAD solicitudes por segundo por prefijo particionado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html).

**Versiones de producto**
+ Python 3.9 o posterior
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) versión 2
+ AWS Lambda Power Tuning 4.3.6 (opcional)

## Arquitectura
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-architecture"></a>

**Pila de tecnología de destino**
+ AWS Lambda
+ Amazon S3
+ AWS Step Functions (si se ha implementado AWS Lambda Power Tuning)

**Arquitectura de destino**

En el siguiente diagrama, se muestra una función de Lambda que lee objetos de un bucket de S3 en paralelo. El diagrama también incluye un flujo de trabajo de Step Functions para que la herramienta AWS Lambda Power Tuning ajuste con precisión la memoria de funciones Lambda. Este refinamiento permite lograr un buen equilibrio entre el costo y el rendimiento.

![\[Diagrama que muestra la función de Lambda, el bucket de S3 y AWS Step Functions.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Automatización y escala**

Las funciones de Lambda se escalan rápidamente cuando es necesario. Para evitar los errores 503 de ralentización de Amazon S3 cuando hay mucha demanda, le recomendamos que ponga algunos límites al escalado.

## Tools (Herramientas)
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código. La infraestructura de ejemplo se creó para implementarla con AWS CDK.
+ [AWS Command Line InterfaceAWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)es una herramienta de código abierto que le ayuda a interactuar Servicios de AWS mediante comandos en su shell de línea de comandos. En este patrón, la AWS CLI versión 2 se utiliza para cargar un archivo JSON de ejemplo.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que le permite almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otros servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general. La [reutilización de subprocesos de trabajo inactivos](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) se introdujo en la versión 3.8 de Python, y el código de la función de Lambda de este patrón se creó para la versión 3.9 y posteriores de Python.

**Repositorio de código**

El código de este patrón está disponible en el repositorio. [aws-lambda-parallel-download](https://github.com/aws-samples/aws-lambda-parallel-download) GitHub 

## Prácticas recomendadas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+ Esta AWS CDK construcción se basa en sus permisos Cuenta de AWS de usuario para implementar la infraestructura. [Si tienes pensado usar AWS CDK Pipelines o despliegues multicuenta, consulta los sintetizadores Stack.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers)
+ Esta aplicación de ejemplo no tiene habilitados los registros de acceso en el bucket de S3. Se recomienda habilitar los registros de acceso en el código de producción.

## Epics
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-epics"></a>

### Preparación del entorno de desarrollo
<a name="prepare-the-development-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe la versión instalada de Python. | Este código se probó específicamente en Python 3.9 y Python 3.13, y debería funcionar en todas las versiones entre estas versiones. Para comprobar su versión de Python, use el comando `python3 -V` en su terminal e instale una versión más reciente si es necesario.Para verificar que los módulos necesarios estén instalados, use `python3 -c "import pip, venv"`. Si no aparece ningún mensaje de error, significa que los módulos están instalados correctamente y que todo está listo para poner en marcha este ejemplo.  | Arquitecto de la nube | 
| Instala. AWS CDK | Para instalarlo AWS CDK si aún no está instalado, siga las instrucciones que aparecen en [Introducción al AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Para confirmar que la AWS CDK versión instalada es 2.0 o posterior, ejecute`cdk –version`. | Arquitecto de la nube | 
| Arranque su entorno de . | Para arrancar su entorno, si aún no lo ha hecho, siga las instrucciones de [Bootstrap your environment for use with the AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html). | Arquitecto de la nube | 

### Clonación del repositorio de ejemplo
<a name="clone-the-example-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para instalar la versión más reciente del repositorio, use el siguiente comando:<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Arquitecto de la nube | 
| Cambie el directorio de trabajo al repositorio clonado. | Use el siguiente comando:<pre>cd aws-lambda-parallel-download</pre> | Arquitecto de la nube | 
| Cree un entorno virtual de Python. | Para crear un entorno virtual de Python, use el siguiente comando:<pre>python3 -m venv .venv</pre> | Arquitecto de la nube | 
| Active el entorno virtual. | Para activar el entorno virtual, puede usar el siguiente comando:<pre>source .venv/bin/activate</pre> | Arquitecto de la nube | 
| Instalar las dependencias. | Para instalar las dependencias de Python, use el comando `pip`:<pre>pip install -r requirements.txt</pre> | Arquitecto de la nube | 
| Examine el código. | (Opcional) El código de ejemplo que descarga un objeto del bucket de S3 está en `resources/parallel.py`.El código de la infraestructura está en la carpeta `parallel_download`. | Arquitecto de la nube | 

### Implementación y pruebas de la aplicación
<a name="deploy-and-test-the-app"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la aplicación. | Ejecute `cdk deploy`.Anote los AWS CDK resultados:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arquitecto de la nube | 
| Cargue un archivo JSON de ejemplo. | El repositorio contiene un archivo JSON de ejemplo de unos 9 KB. Para cargar el archivo en el bucket de S3 de la pila creada, use el siguiente comando:<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>Reemplace `<ParallelDownloadStack.SampleS3BucketName>` con el valor correspondiente de la AWS CDK salida. | Arquitecto de la nube | 
| Ejecute la aplicación. | Para poner en marcha la aplicación, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arquitecto de la nube | 
| Agregue el número de descargas. | (Opcional) Para poner en marcha 1500 llamadas a get object, use el siguiente JSON en **Evento JSON** del parámetro `Test`:<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Arquitecto de la nube | 

### Opcional: ejecute Power Tuning AWS Lambda
<a name="optional-run-lamlong-power-tuning"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la herramienta AWS Lambda de ajuste de potencia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)Al final de la ejecución, el resultado aparecerá en la pestaña **Entrada y salida de ejecución**. | Arquitecto de la nube | 
| Vea los resultados del ajuste de AWS Lambda potencia en un gráfico. | En la pestaña **Entrada y salida de ejecución**, copie el enlace de la propiedad `visualization` y péguelo en una nueva pestaña del navegador. | Arquitecto de la nube | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine los objetos del bucket de S3. | Antes de destruir los recursos implementados, debe eliminar todos los objetos del bucket de S3:<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>Recuerde `<ParallelDownloadStack.SampleS3BucketName>` sustituir por el valor de las AWS CDK salidas. | Arquitecto de la nube | 
| Destruya los recursos. | Para destruir todos los recursos que se hayan creado para este piloto, use el siguiente comando:<pre>cdk destroy</pre> | Arquitecto de la nube | 

## Resolución de problemas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | En el caso de las cuentas nuevas, es posible que no pueda configurar más de 3008 MB en las funciones de Lambda. Para probar con AWS Lambda Power Tuning, añada la siguiente propiedad en el JSON de entrada al iniciar la ejecución de Step Functions:<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Recursos relacionados
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python: futuros simultáneos. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Cuotas de Lambda: Configuración, implementación y ejecución de funciones](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Trabajando con el AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Funciones de creación de perfiles con AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Información adicional
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Código**

El siguiente fragmento de código realiza el procesamiento paralelo I/O :

```
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
  for result in executor.map(a_function, (the_arguments)):
    ...
```

`ThreadPoolExecutor` reutiliza los subprocesos cuando están disponibles.

**Pruebas y resultados**

Estas pruebas se realizaron en diciembre de 2024.

La primera prueba procesó 2500 lecturas de objetos, con el siguiente resultado:

![\[El tiempo de invocación disminuye, mientras que el costo de la invocación es mayor a medida que aumenta la memoria.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


A partir de 3009 MB, el nivel de tiempo de procesamiento se mantuvo prácticamente igual para cualquier incremento de memoria, pero el costo se hacía mayor a medida que aumentaba el tamaño de la memoria.

En otra prueba, se investigó el intervalo entre 1536 MB y 3072 MB de memoria. Se utilizaron valores que eran múltiplos de 256 MB y se procesaron 10 000 lecturas de objetos; los resultados son los siguientes:

![\[Se redujo la diferencia entre el descenso del tiempo de invocación y el aumento del costo de la invocación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


La mejor performance-to-cost relación fue con la configuración Lambda de 2.304 MB de memoria.

A modo de comparación, un proceso secuencial de 2500 lecturas de objetos tardó 47 segundos. El proceso paralelo con la configuración de Lambda de 2304 MB tardó 7 segundos, lo que supone un 85 por ciento menos.

![\[Gráfico que muestra la disminución del tiempo al cambiar del procesamiento secuencial al procesamiento paralelo.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Envíe datos de telemetría desde y AWS Lambda OpenSearch para análisis y visualización en tiempo real
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

*Tabby Ward, Guy Bachar y David Kilzer, Amazon Web Services*

## Resumen
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-summary"></a>

Las aplicaciones modernas están cada vez más distribuidas y se basan cada vez más en eventos, lo que refuerza la necesidad de monitoreo y observabilidad en tiempo real. AWS Lambda es un servicio de computación sin servidor que desempeña un papel crucial en la creación de arquitecturas escalables y basadas en eventos. Sin embargo, la supervisión y la solución de problemas de las funciones de Lambda pueden resultar complicadas si se confía únicamente en Amazon CloudWatch Logs, que puede introducir latencia y períodos de retención limitados.

Para abordar este desafío, AWS presentó la API de telemetría Lambda, que permite a las funciones de Lambda enviar datos de telemetría directamente a herramientas de monitoreo y observabilidad de terceros. Esta API admite la transmisión en tiempo real de registros, métricas y seguimientos, y proporciona una visión completa y puntual del rendimiento y el estado de las funciones de Lambda.

Este patrón explica cómo integrar la API de telemetría Lambda con [OpenSearch](https://opensearch.org/docs/latest/)un motor de búsqueda y análisis distribuido de código abierto. OpenSearch ofrece una plataforma potente y escalable para la ingesta, el almacenamiento y el análisis de grandes volúmenes de datos, lo que la convierte en la opción ideal para los datos de telemetría Lambda. En concreto, este patrón muestra cómo enviar registros desde una función de Lambda escrita en Python directamente a un OpenSearch clúster mediante una extensión de Lambda proporcionada por. AWS Esta solución es flexible y personalizable, por lo que puede crear su propia extensión de Lambda o modificar el código fuente del ejemplo para cambiar el formato de salida según lo desee.

El patrón explica cómo configurar y configurar la integración de la API de telemetría Lambda con OpenSearch la API de telemetría de Lambda e incluye las prácticas recomendadas en materia de seguridad, optimización de costes y escalabilidad. El objetivo es que pueda obtener información más detallada sobre las funciones de Lambda y mejorar la observabilidad general de sus aplicaciones sin servidor.


| 
| 
| Nota: Este patrón se centra en la integración de la API de telemetría Lambda con la gestionada. OpenSearch Sin embargo, los principios y las técnicas analizados también son aplicables a la búsqueda automática y a la búsqueda automática OpenSearch . | 
| --- |

## Requisitos previos y limitaciones
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Antes de comenzar el proceso de integración, asegúrese de que cumple los requisitos previos que se indican a continuación:

**Cuenta de AWS**: Un activo Cuenta de AWS con los permisos adecuados para crear y administrar los siguientes recursos: AWS 
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch Service (si utilizas un OpenSearch clúster gestionado)

**OpenSearch clúster**:
+ Puede utilizar un OpenSearch clúster autogestionado existente o un servicio gestionado como OpenSearch Service.
+ Si utilizas el OpenSearch Servicio, configura el OpenSearch clúster siguiendo las instrucciones de [Introducción a Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) en la documentación del OpenSearch Servicio.
+ Asegúrese de que se pueda acceder al OpenSearch clúster desde la función Lambda y de que esté configurado con los ajustes de seguridad necesarios, como las políticas de acceso, el cifrado y la autenticación.
+ Configure el OpenSearch clúster con las asignaciones de índices y los ajustes necesarios para ingerir los datos de telemetría de Lambda. Para obtener más información, consulta [Cómo cargar datos de streaming en Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html) en la documentación del OpenSearch servicio.

**Conectividad de red**:
+ Asegúrese de que la función Lambda tenga la conectividad de red necesaria para acceder al OpenSearch clúster. Para obtener orientación sobre cómo configurar los ajustes de la nube privada virtual (VPC), consulte [Lanzar sus dominios de Amazon OpenSearch Service dentro de una VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) en la documentación del servicio. OpenSearch 

**Roles y políticas de IAM**:
+ Cree un rol de IAM con los permisos necesarios para que su función Lambda pueda acceder al clúster y acceder a OpenSearch las credenciales almacenadas en él. AWS Secrets Manager
+ Adjunte las políticas de IAM adecuadas al rol, como la `AWSLambdaBasicExecutionRole` política y cualquier permiso adicional necesario para interactuar con él. OpenSearch
+ Compruebe que los permisos de IAM concedidos a la función Lambda le permiten escribir datos en el clúster. OpenSearch Para obtener información sobre la administración de los permisos de IAM, consulte [Definición de permisos de funciones de Lambda con un rol de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) en la documentación de Lambda.

**Conocimientos del lenguaje de programación**:
+ Necesitará conocimientos básicos de Python (o del lenguaje de programación que prefiera) para comprender y modificar el código de ejemplo de la función de Lambda y la extensión de Lambda.

**Entorno de desarrollo**:
+ Configure un entorno de desarrollo local con las herramientas y dependencias necesarias para crear e implementar funciones y extensiones de Lambda. 

**AWS CLI o: Consola de administración de AWS**
+ Instale y configure el [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) o utilícelo Consola de administración de AWS con las credenciales adecuadas para interactuar con lo requerido Servicios de AWS.

**Supervisión y registro**:
+ Familiarícese con las mejores prácticas de monitoreo y registro AWS, incluidos servicios como Amazon, CloudWatch y AWS CloudTrail con fines de monitoreo y auditoría.
+ Compruebe CloudWatch los registros de su función de Lambda para identificar cualquier error o excepción relacionados con la integración de la API de telemetría de Lambda. Para obtener orientación sobre la solución de problemas, consulte la [documentación de la API de telemetría de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

## Arquitectura
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-architecture"></a>

Este patrón utiliza OpenSearch Service para almacenar registros y datos de telemetría generados por las funciones de Lambda. Este enfoque le permite transmitir rápidamente los registros directamente a su OpenSearch clúster, lo que reduce la latencia y los costes asociados al uso de CloudWatch Logs como intermediario.


| 
| 
| [El código de extensión de Lambda puede enviar la telemetría al OpenSearch Servicio, ya sea directamente mediante la OpenSearch API o mediante una biblioteca cliente. OpenSearch ](https://opensearch.org/docs/latest/clients/index/) La extensión Lambda puede usar las operaciones masivas compatibles con la OpenSearch API para agrupar eventos de telemetría y enviarlos a OpenSearch Service en una sola solicitud. | 
| --- |

El siguiente diagrama de flujo de trabajo ilustra el flujo de trabajo de registro para las funciones de Lambda cuando se utiliza un OpenSearch clúster como punto final.

![\[Flujo de trabajo para enviar datos de telemetría a un clúster. OpenSearch\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


La arquitectura incluye los siguientes componentes:
+ Función de Lambda: función sin servidor que genera registros y datos de telemetría durante la puesta en marcha.
+ Extensión Lambda: extensión basada en Python que usa la API de telemetría de Lambda para integrarse directamente con el clúster. OpenSearch Las extensiones se ponen en marcha en el mismo entorno de ejecución que la función de Lambda.
+ API de telemetría de Lambda: la API que permite a las extensiones de Lambda enviar datos de telemetría, como registros, métricas y trazas, directamente a herramientas de supervisión y observabilidad de terceros.
+ Clúster de Amazon OpenSearch Service: OpenSearch clúster gestionado que se aloja en AWS. Este clúster es responsable de ingerir, almacenar e indexar los datos de registro transmitidos desde la función de Lambda a través de la extensión de Lambda.

El flujo de trabajo consta de los pasos siguientes:

1. Se llama a la función de Lambda y genera registros y datos de telemetría durante su puesta en marcha.

1. La extensión de Lambda se pone en marcha junto con la función para capturar los registros y los datos de telemetría mediante la API de telemetría de Lambda.

1. La extensión Lambda establece una conexión segura con el clúster de OpenSearch servicios y transmite los datos de registro en tiempo real.

1. El clúster de OpenSearch servicios ingiere, indexa y almacena los datos de registro para que estén disponibles para su búsqueda, análisis y visualización mediante el uso de herramientas como Kibana u otras aplicaciones compatibles.

Al evitar los CloudWatch registros y enviar los datos de registro directamente al OpenSearch clúster, esta solución ofrece varias ventajas:
+ Transmisión y análisis de registros en tiempo real, lo que permite una resolución de problemas más rápida y una mejor observabilidad.
+ Reducción de la latencia y posibles limitaciones de retención asociadas CloudWatch a los registros.
+ Flexibilidad para personalizar la extensión de Lambda o crear su propia extensión para formatos de salida específicos o procesamiento adicional.
+ Integración con las capacidades de búsqueda, análisis y visualización del OpenSearch Servicio para el análisis y la supervisión de los registros.

La sección [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) proporciona step-by-step instrucciones para configurar la extensión Lambda, configurar la función Lambda e integrarla con el clúster de servicios. OpenSearch Para ver las consideraciones de seguridad, las estrategias de optimización de costos y los consejos para supervisar y solucionar problemas de la solución, consulte la sección [Prácticas recomendadas](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices).

## Tools (Herramientas)
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-tools"></a>

**Servicios de AWS**
+ [AWS Lambda](https://aws.amazon.com/lambda/) es un servicio automático que permite ejecutar código sin aprovisionar ni administrar servidores. Lambda ejecuta su código solo cuando es necesario y escala de manera automática, desde unas pocas solicitudes por día hasta miles por segundo.
+ [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) es un servicio totalmente gestionado que proporciona y AWS que facilita la implementación, el funcionamiento y el escalado de OpenSearch clústeres en la nube.
+ Las [extensiones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) amplían la funcionalidad de las funciones de Lambda al poner en marcha código personalizado junto con ellas. Puede utilizar extensiones de Lambda para integrar Lambda con varias herramientas de supervisión, observabilidad, seguridad y gobernanza.
+ AWS Lambda La [API de telemetría](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) le permite usar extensiones para capturar datos mejorados de monitoreo y observabilidad directamente desde Lambda y enviarlos al destino que elija.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)le ayuda a modelar y configurar sus AWS recursos para que pueda dedicar menos tiempo a gestionarlos y más tiempo a centrarse en sus aplicaciones.

**Repositorios de código**
+ [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) incluye demostraciones y proyectos de AWS muestra de AWS socios que le ayudarán a empezar a crear sus propias extensiones.
+ [Ejemplo de integraciones de telemetría Lambda para proporciona OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) un ejemplo de extensión de Lambda que muestra cómo enviar registros desde una función de Lambda a un clúster. OpenSearch 

**Otras herramientas**
+ [OpenSearch](https://opensearch.org/faq/)es un motor de búsqueda y análisis distribuido de código abierto que proporciona una plataforma potente para la ingesta, el almacenamiento y el análisis de grandes volúmenes de datos.
+ Kibana es una herramienta de exploración y visualización de datos de código abierto con la que puedes usarla. OpenSearch Tenga en cuenta que la implementación de la visualización y el análisis están fuera del alcance de este patrón. Para obtener más información, consulte la [documentación de Kibana](https://www.elastic.co/guide/en/kibana/current/index.html) y otros recursos.

## Prácticas recomendadas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices"></a>

Al integrar la API de telemetría Lambda con OpenSearch, tenga en cuenta las siguientes prácticas recomendadas.

**Seguridad y control de acceso**
+ **Comunicación segura**: cifre todas las comunicaciones entre las funciones de Lambda y OpenSearch el clúster mediante HTTPS. Configure los SSL/TLS ajustes necesarios en la extensión y OpenSearch configuración de Lambda.
+ **Permisos de IAM:**
  + Las extensiones se ponen en marcha en el mismo entorno de ejecución que la función de Lambda, por lo que heredan el mismo nivel de acceso a los recursos, como el sistema de archivos, las redes y las variables de entorno.
  + Otorgue los permisos de IAM mínimos necesarios a sus funciones de Lambda para acceder a la API de telemetría de Lambda y escribir datos en el clúster. OpenSearch Aplique el [principio de privilegio mínimo](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) para limitar el alcance de los permisos.
+ **OpenSearch control de acceso**: implemente un control de acceso detallado en su OpenSearch clúster para restringir el acceso a los datos confidenciales. Utilice las funciones de seguridad integradas, como la autenticación de usuarios, el control de acceso basado en roles y los permisos a nivel de índice, en. OpenSearch
+ **Extensiones fiables**: instale siempre las extensiones que provengan únicamente de una fuente fiable. Utilice herramientas de infraestructura como código (IaC) CloudFormation para simplificar el proceso de adjuntar la misma configuración de extensión, incluidos los permisos de IAM, a varias funciones de Lambda. Las herramientas de IaC también proporcionan un registro de auditoría de las extensiones y versiones utilizadas anteriormente.
+ **Gestión de información confidencial**: al crear extensiones, evite registrar información confidencial. Limpie las cargas útiles y los metadatos antes de registrarlos o conservarlos con fines de auditoría.

**Optimización de costos**
+ **Supervisión y alertas**: configure mecanismos de supervisión y alerta para realizar un seguimiento del volumen de datos que se envían OpenSearch desde las funciones de Lambda. Esto le permitirá identificar y abordar cualquier posible sobrecosto.
+ **Retención de datos**: considere detenidamente el período de retención de datos adecuado para sus datos de telemetría Lambda en. OpenSearch Los periodos de retención más prolongados pueden aumentar los costos de almacenamiento, así que equilibre sus necesidades de observabilidad con la optimización de costos.
+ **Compresión e indexación**: habilite la compresión de datos y optimice su estrategia de OpenSearch indexación para reducir el espacio de almacenamiento de sus datos de telemetría Lambda.
+ **Menor dependencia** de CloudWatch: al integrar directamente la API de telemetría Lambda con ella OpenSearch, puede reducir potencialmente su dependencia de los CloudWatch registros, lo que puede suponer un ahorro de costes. Esto se debe a que la API de telemetría Lambda le permite enviar registros directamente a OpenSearch, lo que evita la necesidad de almacenar y procesar los datos en ella. CloudWatch

**Escalabilidad y fiabilidad**
+ Procesamiento **asíncrono: utilice patrones de procesamiento** asíncrono, como Amazon Simple Queue Service (Amazon SQS) o Amazon Kinesis, para desacoplar la ejecución de la función Lambda de la ingesta de datos. OpenSearch Esto ayuda a mantener la capacidad de respuesta de las funciones de Lambda y mejora la fiabilidad general del sistema.
+ **OpenSearch escalado de clústeres**: supervise el rendimiento y la utilización de los recursos de su OpenSearch clúster y amplíelo o reduzca según sea necesario para gestionar el creciente volumen de datos de telemetría de Lambda.
+ **Conmutación por error y recuperación ante desastres**: implemente una estrategia sólida de recuperación ante desastres para su OpenSearch clúster, que incluya copias de seguridad periódicas y la capacidad de restaurar los datos rápidamente en caso de que se produzca un error.

**Observabilidad y supervisión**
+ **Paneles y visualizaciones**: utilice Kibana u otras herramientas de paneles para crear paneles y visualizaciones personalizados que proporcionen información sobre el rendimiento y el estado de sus funciones de Lambda en función de los datos de telemetría incluidos. OpenSearch
+ **Alertas y notificaciones**: configure alertas y notificaciones para supervisar de forma proactiva cualquier anomalía, error o problema de rendimiento en las funciones de Lambda. Integre estas alertas y notificaciones con sus procesos de administración de incidentes existentes.
+ **Rastreo y correlación**: asegúrese de que sus datos de telemetría Lambda incluyan información de seguimiento relevante, como la IDs solicitud o la IDs correlación, para end-to-end permitir la observabilidad y la solución de problemas en sus aplicaciones distribuidas sin servidor.

Si sigue estas prácticas recomendadas, puede asegurarse de que la integración de la API de telemetría Lambda con OpenSearch es segura, rentable y escalable, y proporciona una capacidad de observación completa para sus aplicaciones sin servidor.

## Epics
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics"></a>

### Creación e implementación la capa de extensión de Lambda
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue el código fuente. | Descargue las extensiones de ejemplo del repositorio [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions). | Desarrollador de aplicaciones, arquitecto de la nube | 
| Vaya a la carpeta `python-example-telemetry-opensearch-extension`. | El repositorio [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) que descargó contiene numerosos ejemplos de varios casos de uso y tiempos de ejecución de varios lenguajes. Navegue hasta la carpeta [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) para usar la OpenSearch extensión Python, que envía los registros a OpenSearch. | Desarrollador de aplicaciones, arquitecto de la nube | 
| Agregue permisos para poner en marcha el punto de conexión de la extensión. | Use el siguiente comando para poner en marcha el punto de conexión de la extensión.<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 
| Instale las dependencias de la extensión de forma local. | Use el siguiente comando para instalar manualmente las dependencias para el código en Python:<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Estas dependencias se montarán junto con el código de la extensión. | Desarrollador de aplicaciones, arquitecto de la nube | 
| Cree un paquete .zip para que la extensión se implemente como una capa. | El archivo .zip de la extensión debe contener un directorio raíz denominado`extensions/`, donde se encuentra el ejecutable de la extensión, y otro directorio raíz denominado `python-example-telemetry-opensearch-extension/`, donde se encuentran la lógica central de la extensión y sus dependencias.Cree el paquete .zip para la extensión:<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 
| Implemente la extensión como una capa de Lambda. | Publique la capa mediante el archivo .zip de su extensión y el siguiente comando:<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 

### Integración de la extensión en la función
<a name="integrate-the-extension-into-your-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue la capa a la función. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Para obtener más información sobre la adición de una capa a su función de Lambda, consulte la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html). | Desarrollador de aplicaciones, arquitecto de la nube | 
| Configure las variables de entorno para la función. | En la página de funciones, seleccione la pestaña **Configuración** y agregue las siguientes variables de entorno a la función:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | Desarrollador de aplicaciones, arquitecto de la nube | 

### Adición de declaraciones de registro y pruebas de la función
<a name="add-logging-statements-and-test-your-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue declaraciones de registro a la función. | Agregue declaraciones de registro a su función mediante uno de los [mecanismos de registro integrados](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) o el módulo de registro que prefiera. A continuación, se muestran ejemplos de registro de mensajes en Python:<pre>print("Your Log Message Here")<br />logger = logging.getLogger(__name__)<br /><br />logger.info("Test Info Log.")<br />logger.error("Test Error Log.")</pre> | Desarrollador de aplicaciones, arquitecto de la nube | 
| Comprobación de la función de . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Debería ver **Ejecutando la función: listo** si todo funciona correctamente. | Desarrollador de aplicaciones, arquitecto de la nube | 

### Vea sus inicios de sesión OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Consulte sus índices. | En OpenSearch, ejecuta el siguiente comando para consultar tus índices:<pre>SELECT * FROM index-name</pre>Sus registros deberían mostrarse en los resultados de la consulta. | Arquitecto de la nube | 

## Resolución de problemas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Problemas de conectividad | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Errores de ingesta de datos | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Recursos relacionados
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Ejemplo de integraciones de telemetría Lambda](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) para (repositorio) OpenSearch GitHub 
+ [Aumente las funciones de Lambda utilizando extensiones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) (documentación de Lambda)
+ [API de telemetría de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) (documentación de Lambda)
+ [Presentamos la API de AWS Lambda telemetría](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/) (entrada de blog)AWS 
+ [Integración de la API de AWS Lambda telemetría con Prometheus](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch) y (entrada del blog) OpenSearch AWS 

## Información adicional
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Alteración de la estructura de los registros**

De forma predeterminada, la extensión envía los registros como un documento anidado. OpenSearch Esto le permite realizar consultas anidadas para recuperar valores de columnas individuales.

Si la salida de registro predeterminada no satisface sus necesidades específicas, puede personalizarla modificando el código fuente de la extensión Lambda proporcionada por. AWS AWS anima a los clientes a adaptar la producción a los requisitos de su empresa. Para cambiar la salida del registro, busque la función `dispatch_to_opensearch` en el archivo `telemetry_dispatcher.py` dentro del código fuente de la extensión y realice las modificaciones necesarias.

# Configuración de un router de celdas sin servidor para una arquitectura basada en celdas
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq and Ioannis Lioupras, Amazon Web Services*

## Resumen
<a name="serverless-cell-router-architecture-summary"></a>

Como punto de entrada al sistema de una aplicación global basada en células, el enrutador de celdas es responsable de asignar de manera eficiente los usuarios a las celdas adecuadas y de proporcionar los puntos de conexión a los usuarios. El enrutador de celdas maneja funciones tales como almacenar user-to-cell mapeos, monitorear la capacidad de la celda y solicitar nuevas celdas cuando sea necesario. Es importante mantener la funcionalidad del router de celdas durante interrupciones posibles.

El marco de diseño de los enrutadores de celdas de este patrón se centra en la resiliencia, la escalabilidad y la optimización general del rendimiento. El patrón utiliza un enrutamiento estático, en el que los clientes almacenan en caché los puntos de conexión al iniciar sesión por primera vez y se comunican directamente con las celdas. Esta disociación mejora la resiliencia del sistema, ya que ayuda a garantizar la funcionalidad ininterrumpida de la aplicación basada en celdas durante una afectación del router de celdas.

Este patrón utiliza una AWS CloudFormation plantilla para implementar la arquitectura. Para obtener detalles sobre lo que implementa la plantilla o para implementar la misma configuración mediante el Consola de administración de AWS, consulte la sección de [información adicional](#serverless-cell-router-architecture-additional).

**importante**  
La demostración, el código y la CloudFormation plantilla que se presentan en este patrón tienen únicamente fines explicativos. El material proporcionado tiene la finalidad única de ilustrar el patrón de diseño y ayudar a la comprensión. La demostración y el código no están listos para la producción y no deben utilizarse para ninguna actividad de producción en directo. Se recomienda no utilizar el código o la demostración en un entorno de producción. Hacerlo será bajo su propia responsabilidad. Recomendamos consultar con los profesionales adecuados y hacer pruebas exhaustivas antes de implementar este patrón o sus componentes en un entorno de producción.

## Requisitos previos y limitaciones
<a name="serverless-cell-router-architecture-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa
+ La última versión de [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Credenciales de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) con los permisos necesarios para crear la CloudFormation pila, AWS Lambda las funciones y los recursos relacionados

**Versiones de producto**
+ Python 3.12

## Arquitectura
<a name="serverless-cell-router-architecture-architecture"></a>

En el diagrama siguiente se muestra un diseño general del router de celdas.

![\[El proceso de cinco pasos del enrutador de celdas.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


En el diagrama se muestra el flujo de trabajo siguiente:

1. El usuario se pone en contacto con Amazon API Gateway, que sirve de interfaz para los puntos de conexión de la API del router de celdas.

1. Amazon Cognito gestiona la autenticación y la autorización.

1. El AWS Step Functions flujo de trabajo consta de los siguientes componentes:
   + **Orchestrator**: se `Orchestrator` utiliza AWS Step Functions para crear un flujo de trabajo o una máquina de estados. La API del router de celdas desencadena el flujo de trabajo. `Orchestrator` ejecuta funciones de Lambda según la ruta del recurso.
   + **Dispatcher**: la función `Dispatcher` de Lambda identifica y asigna una celda estática por cada usuario registrado nuevo. La función busca la celda con el menor número de usuarios, la asigna al usuario y devuelve los puntos de conexión.
   + **Mapper** ‒ La `Mapper` operación gestiona las user-to-cell asignaciones dentro de la base de datos `RoutingDB` Amazon DynamoDB creada por la plantilla. CloudFormation Cuando se desencadena, la función `Mapper` proporciona sus puntos de conexión a los usuarios ya asignados.
   + **Scaler**: la función `Scaler` hace un seguimiento de la ocupación de las celdas y de la capacidad disponible. Cuando sea necesario, la función `Scaler` puede enviar una solicitud a través de Amazon Simple Queue Service (Amazon SQS) a la capa de aprovisionamiento e implementación para solicitar celdas nuevas.
   + **Validator**: la función `Validator` valida los puntos de conexión de las celdas y detecta problemas posibles.

1. `RoutingDB`Almacena la información y los atributos de las celdas (puntos finales de la API, estado, Región de AWS métricas).

1. Cuando la capacidad disponible de las celdas supera un umbral, el router de celdas solicita servicios de aprovisionamiento e implementación a través de Amazon SQS para crear celdas nuevas.

Cuando se crean celdas nuevas, `RoutingDB` se actualiza desde la capa de aprovisionamiento e implementación. Sin embargo, ese proceso está fuera del ámbito de este patrón. Para obtener información general de las premisas de diseño de la arquitectura basada en celdas y detalles sobre el diseño del router de celdas que se utiliza en este patrón, consulte la sección [Información adicional](#serverless-cell-router-architecture-additional).

## Tools (Herramientas)
<a name="serverless-cell-router-architecture-tools"></a>

**Servicios de AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el Cuentas de AWS mundo Regiones de AWS.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar funciones de Lambda y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio Serverless-Cell-Router. GitHub ](https://github.com/aws-samples/Serverless-Cell-Router/) 

## Prácticas recomendadas
<a name="serverless-cell-router-architecture-best-practices"></a>

Para conocer las mejores prácticas a la hora de crear arquitecturas basadas en celdas, consulte la siguiente guía de Well-Architected AWS :
+ [Reducing the Scope of Impact with Cell-Based Architecture](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Pilar de confiabilidad de un marco bien diseñado REL1: 0-BP04 Utilice arquitecturas de mamparo para limitar el alcance del impacto](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Epics
<a name="serverless-cell-router-architecture-epics"></a>

### Preparación del archivo de origen
<a name="prepare-source-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código de muestra. | Para clonar el Serverless-Cell-Router GitHub repositorio en su ordenador, utilice el siguiente comando:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Desarrollador | 
| Configure las credenciales AWS CLI temporales. | Configure el AWS CLI con las credenciales para su Cuenta de AWS. Este tutorial utiliza las credenciales temporales proporcionadas por la **línea de comandos de AWS IAM Identity Center o la opción de acceso programático**. Esto establece las variables de `AWS_SESSION_TOKEN` AWS entorno y `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, con las credenciales adecuadas para su uso con. AWS CLI | Desarrollador | 
| Cree un bucket de S3. | Cree un bucket de S3 que se utilizará para almacenar y acceder a las funciones de Serverless-Cell-Router Lambda para su despliegue mediante la CloudFormation plantilla. Para crear el bucket de S3, utilice el comando siguiente: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Desarrollador | 
| Cree los archivos .zip. | Cree un archivo .zip para cada función de Lambda ubicada en el directorio [Functions](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions). Estos archivos .zip se utilizarán para implementar las funciones de Lambda. En un equipo Mac, utilice los comandos `zip` siguientes:<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | Desarrollador | 
| Copie los archivos .zip en el bucket de S3. | Para copiar todos los archivos .zip de la función de Lambda al bucket de S3, utilice los comandos siguientes:<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | Desarrollador | 

### Cree la pila CloudFormation
<a name="create-the-cfn-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la CloudFormation plantilla. | Para implementar la CloudFormation plantilla, ejecute el siguiente AWS CLI comando:<pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | Desarrollador | 
| Compruebe el progreso. | Inicia sesión en Consola de administración de AWS, abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation/]()y comprueba el progreso del desarrollo de la pila. Cuando el estado sea `CREATE_COMPLETE`, la pila se habrá implementado correctamente. | Desarrollador | 

### Evaluación y verificación
<a name="assess-and-verify"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Asigne celdas al usuario. | Para iniciar `Orchestrator`, ejecute el comando curl siguiente:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre>`Orchestrator` desencadena la ejecución de la función `Dispatcher`. `Dispatcher`, a su vez, verifica la existencia del usuario. Si se encuentra el usuario, `Dispatcher` devuelve el ID de celda y el punto final asociados URLs. Si no se encuentra al usuario, `Dispatcher` asigna una celda y envía el ID de celda a la función `Scaler` para evaluar la capacidad residual de la celda asignada.La respuesta de la función `Scaler` es la siguiente:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Desarrollador | 
| Recupere las celdas de los usuarios. | Para utilizar `Orchestrator` para ejecutar la función `Mapper`, ejecute el comando siguiente:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre>`Orchestrator`Busca la celda asignada al usuario y devuelve el ID de la celda y URLs obtiene la siguiente respuesta:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Desarrollador | 

### Limpieza
<a name="clean-up"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie los recursos. | Para evitar el cobro de otros cargos en su cuenta, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="serverless-cell-router-architecture-resources"></a>

**Referencias**
+ [Estabilidad estática con zonas de disponibilidad](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [AWS Fault Isolation Boundaries: Static stability](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: Cell-based Architecture to Provide Higher Availability on Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6 ¿Iknq? RZMFic controles = 0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Información adicional
<a name="serverless-cell-router-architecture-additional"></a>

**Premisas de diseño de arquitectura basada en celdas**

Si bien este patrón se centra en el router de celdas, es importante comprender todo el entorno. El entorno está estructurado en tres capas discretas:
+ La capa de enrutamiento, o capa delgada, que contiene el enrutador de celdas
+ La capa de celdas, que comprende varias celdas
+ La capa de aprovisionamiento e implementación, que aprovisiona las celdas e implementa la aplicación

Cada capa mantiene su funcionalidad incluso en el caso de que las deficiencias afecten a otras capas. Cuentas de AWS sirven como límite de aislamiento de fallas.

En el diagrama siguiente se muestran las capas en un nivel general. La capa de celdas y la capa de aprovisionamiento e implementación quedan fuera del alcance de este patrón.

![\[La capa de enrutamiento, la capa de celdas con varias cuentas de celdas y la capa de aprovisionamiento e implementación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Para más información sobre la arquitectura basada en celdas, consulte [Reducing the Scope of Impact with Cell-Based Architecture: Cell routing](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Patrón de diseño de router de celdas**

El enrutador de celdas es un componente compartido en las celdas. Para mitigar los impactos posibles, es importante que la capa de enrutamiento utilice un diseño simplista y escalable horizontalmente que sea lo más delgado posible. La capa de enrutamiento, que sirve como punto de entrada al sistema, consta solo de los componentes necesarios para asignar a los usuarios de manera eficiente a las celdas adecuadas. Los componentes de esta capa no participan en la administración ni en la creación de celdas.

Este patrón utiliza el enrutamiento estático, lo que significa que el cliente almacena los puntos de conexión en las memorias caché durante el inicio de sesión inicial y, posteriormente, establece una comunicación directa con la celda. Se inician interacciones periódicas entre el cliente y el router de celdas para confirmar el estado actual o recuperar las actualizaciones. Este desacoplamiento intencionado permite a los usuarios actuales operar sin interrupciones en caso de que haya tiempo de inactividad del router de celdas y proporciona una funcionalidad y resiliencia continuas al sistema.

En este patrón, el router de celdas admite las funcionalidades siguientes:
+ Recuperación de datos de celdas a partir de la base de datos de celdas en la capa de aprovisionamiento e implementación. Almacenamiento o actualización de la base de datos local.
+ Asignación de una celda a cada usuario registrado nuevo de la aplicación mediante el algoritmo de asignación de celdas.
+ Almacenar el user-to-cells mapeo en la base de datos local.
+ Comprobación de la capacidad de las celdas durante la asignación de usuarios. Generación de un evento para la máquina expendedora a la capa de aprovisionamiento e implementación para crear celdas.
+ Uso del algoritmo de criterios de creación de celdas para proporcionar esta funcionalidad.
+ Responder a las solicitudes de los usuarios recién registrados proporcionando URLs las celdas estáticas. Se URLs almacenarán en caché en el cliente con un tiempo de vida (TTL).
+ Respuesta a las solicitudes de los usuarios existentes sobre una URL no válida al proporcionar una URL nueva o actualizada.

Para comprender mejor el router celular de demostración que se configura mediante la CloudFormation plantilla, revise los siguientes componentes y pasos:

1. Defina y configure el grupo de usuarios de Amazon Cognito.

1. Defina y configure la API de API Gateway para el router de celdas.

1. Crear una tabla de DynamoDB.

1. Cree y configure una cola de SQS.

1. Implemente la función `Orchestrator`.

1. Implemente las funciones de Lambda: `Dispatcher`, `Scaler`, `Mapper`, `Validator`.

1. Evalúe y verifique.

El supuesto es que la capa de aprovisionamiento e implementación ya está establecida. Los detalles de su implementación quedan fuera del alcance de este artefacto.

Como estos componentes se configuran y configuran mediante una CloudFormation plantilla, los siguientes pasos se presentan de forma descriptiva y de alto nivel. Se supone que tiene los AWS conocimientos necesarios para completar la instalación y la configuración.

*1. Defina y configure el grupo de usuarios de Amazon Cognito*

Inicie sesión en y abra la Consola de administración de AWS consola de Amazon Cognito en. [https://console.aws.amazon.com/cognito/]() Defina y configure un grupo de usuarios de Amazon Cognito denominado `CellRouterPool`, con integración de aplicaciones, interfaz de usuario alojada y permisos necesarios.

*2. Defina y configure la API de API Gateway para el router de celdas*

Abra la consola de API Gateway en [https://console.aws.amazon.com/apigateway/](). Defina y configure una API denominada `CellRouter`, mediante un autorizador de Amazon Cognito integrado con el grupo de usuarios `CellRouterPool` de Amazon Cognito. Implemente los elementos siguientes:
+ Recursos de API `CellRouter`, tal como los métodos `POST`
+ Integración con el flujo de trabajo de Step Functions implementada en el paso 5
+ Autorización a través del autorizador de Amazon Cognito
+ Asignaciones de solicitudes y respuestas de integración
+ Asignación de los permisos necesarios

*3. Crear una tabla de DynamoDB*

Abra la consola de DynamoDB [https://console.aws.amazon.com/dynamodb/]()en y cree una tabla de DynamoDB estándar llamada con la siguiente configuración: `tbl_router`
+ **Clave de partición ‒** `marketId`
+ **Clave de clasificación** ‒ `cellId`
+ **Modo de capacidad**: provisioned
+ **Point-in-time recuperación (PITR) ‒ Desactivada**

En la pestaña **Índices**, cree un índice secundario global llamado `marketId-currentCapacity-index`. La función de Lambda `Scaler` utilizará el índice para hacer búsquedas eficaces en la celda con el menor número de usuarios asignados.

Cree la estructura de tabla con los atributos siguientes:
+ `marketId`: Europe
+ `cellId`: cell-0002
+ `currentCapacity`: 2
+ `endPoint_1`: <su punto de conexión de la primera región>
+ `endPoint_2`: <su punto de conexión de la segunda región>
+ `IsHealthy`: true
+ `maxCapacity`: 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`: <su dirección de correo electrónico>

*4. Cree y configure una cola de SQS*

**Abra la consola de Amazon SQS en [https://console.aws.amazon.com/sqs/]()y cree una cola SQS estándar denominada configurada con cifrado de claves `CellProvisioning` Amazon SQS.**

*5. Implemente la función Orchestrator*

Desarrolle un flujo de trabajo de Step Functions que sirva de `Orchestrator` para el router. Se puede acceder al flujo de trabajo a través de la API del enrutador de celdas. El flujo de trabajo ejecuta las funciones de Lambda designadas según la ruta de recursos. Integre la función step con la API de API Gateway para el router de celdas `CellRouter` y configure los permisos necesarios para invocar las funciones de Lambda.

El siguiente diagrama muestra el flujo de trabajo. El estado de elección invoca una de las funciones de Lambda. Si la función de Lambda se ejecuta de manera correcta, el flujo de trabajo termina. Si se produce un error en la función de Lambda, se invoca el estado de error.

![\[Un diagrama del flujo de trabajo con las cuatro funciones y que termina en estado de error.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implemente las funciones de Lambda*

Implemente las funciones `Dispatcher`, `Mapper`, `Scaler` y `Validator`. Al definir y configurar cada función en la demostración, defina un rol para la función y asigne los permisos necesarios para realizar las operaciones necesarias en la tabla de DynamoDB `tbl_router`. Además, integre cada función en el flujo de trabajo `Orchestrator`.

*Función dispatcher*

La función `Dispatcher` se encarga de identificar y asignar una única celda estática para cada nuevo usuario registrado. Cuando un usuario nuevo se registra en la aplicación global, la solicitud se dirige a la función `Dispatcher`. La función procesa la solicitud mediante criterios de evaluación predefinidos, como los siguientes:

1. **Región**: seleccione la celda del mercado donde se encuentra el usuario. Por ejemplo, si el usuario accede a la aplicación global desde Europa, seleccione una celda que se utilice Regiones de AWS en Europa.

1. **Proximidad o latencia**: seleccione la celda más cercana al usuario. Por ejemplo, si el usuario accede a la aplicación desde Holanda, la función considerará una celda que utilice Fráncfort e Irlanda. La decisión sobre qué celda está más cerca se basa en métricas como la latencia entre la ubicación del usuario y las regiones de la celda. Para este patrón de ejemplo, la información se suministra de manera estática desde la capa de aprovisionamiento e implementación.

1. **Estado**: la función `Dispatcher` comprueba si es correcto el estado de la celda seleccionada según el estado de la celda proporcionado (Correcto = verdadero o falso).

1. **Capacidad**: la distribución de usuarios se basa en la lógica del *número mínimo de usuarios de una celda*, por lo que el usuario se asigna a la celda que tiene el menor número de usuarios.

**nota**  
Estos criterios se presentan solo para explicar este patrón de ejemplo. Para una implementación real de un router de celdas, puede definir criterios más refinados y basados en casos de uso.

La función `Orchestrator` invoca la función Dispatcher para asignar usuarios a las celdas. En esta función de demostración, el valor de mercado es un parámetro estático definido como `europe`.

La función `Dispatcher` evalúa si una celda ya está asignada al usuario. Si la celda ya está asignada, la función `Dispatcher` devuelve los puntos de conexión de la celda. Si no se asigna ninguna celda al usuario, la función busca la celda con el menor número de usuarios, la asigna al usuario y devuelve los puntos de conexión. La eficacia de la consulta de búsqueda de celdas se optimiza mediante el uso del índice secundario global.

*Función mapper*

La `Mapper` función supervisa el almacenamiento y el mantenimiento de las user-to-cell asignaciones en la base de datos. Se asigna una celda única a cada usuario registrado. Cada celda tiene dos celdas distintas URLs, una para cada región de AWS. Funcionan como puntos finales de API alojados en API Gateway y URLs funcionan como puntos de entrada a la aplicación global.

Cuando la `Mapper` función recibe una solicitud de la aplicación cliente, ejecuta una consulta en la `tbl_router` tabla de DynamoDB para recuperar user-to-cell la asignación asociada al ID de correo electrónico proporcionado. Si encuentra una celda asignada, la `Mapper` función proporciona inmediatamente las dos de la celda. URLs La `Mapper` función también monitorea activamente las alteraciones de la celda URLs e inicia notificaciones o actualizaciones de la configuración del usuario.

*Función scaler*

La función `Scaler` administra la capacidad residual de la celda. Para cada nueva solicitud de registro de usuario, la función `Scaler` evalúa la capacidad disponible de la celda que la función `Dispatcher` asignó al usuario. Si la celda ha alcanzado su límite predeterminado de acuerdo con los criterios de evaluación especificados, la función inicia una solicitud a través de una cola de Amazon SQS a la capa de aprovisionamiento e implementación, y solicita el aprovisionamiento y la implementación de celdas nuevas. El escalado de las celdas se puede ejecutar según un conjunto de criterios de evaluación, como los siguientes:

1. **Usuarios máximos**: cada celda puede tener un número máximo de 500 usuarios.

1. **Capacidad del búfer**: la capacidad del búfer de cada celda es del 20 %, lo que significa que cada celda se puede asignar a 400 usuarios en cualquier momento. El 20 % restante de la capacidad de búfer se reserva para futuros casos de uso y para la gestión de situaciones inesperadas (por ejemplo, cuando los servicios de creación y aprovisionamiento de celdas no están disponibles).

1. **Creación de celdas**: en cuanto una celda existente alcanza el 70 % de su capacidad, se activa una solicitud para crear una celda adicional.

**nota**  
Estos criterios se presentan solo para explicar este patrón de ejemplo. Para una implementación real de un router de celdas, puede definir criterios más refinados y basados en casos de uso.

El código `Scaler` de demostración es ejecutado por la función `Orchestrator` después de que la función `Dispatcher` ha asignado correctamente una celda al usuario recién registrado. La función `Scaler`, tras recibir el ID de la celda por parte de la función `Dispatcher`, evalúa si la celda designada tiene la capacidad adecuada para alojar a más usuarios, según los criterios de evaluación predefinidos. Si la capacidad de la celda es insuficiente, la función `Scaler` envía un mensaje al servicio Amazon SQS. El servicio recupera este mensaje en la capa de aprovisionamiento e implementación e inicia el aprovisionamiento de una celda nueva.

**Función validator**

La función `Validator` identifica y resuelve los problemas relacionados con el acceso a la celda. Cuando un usuario inicia sesión en la aplicación global, la aplicación recupera las celdas de la configuración del perfil URLs del usuario y dirige las solicitudes de los usuarios a una de las dos regiones asignadas dentro de la celda. Si no URLs se puede acceder a ellas, la aplicación puede enviar una solicitud de validación de URL al router móvil. El router de celdas de la función `Orchestrator` invoca a la función `Validator`. La función `Validator` inicia el proceso de validación. La validación puede incluir, entre otras comprobaciones, las siguientes:
+ Hacer una referencia cruzada de la celda URLs de la solicitud con la URLs almacenada en la base de datos para identificar y procesar posibles actualizaciones
+ Hacer una comprobación de estado exhaustiva (por ejemplo, una solicitud `HTTP GET` al punto de conexión de la celda)

En conclusión, la función `Validator` responde a las solicitudes de los clientes y proporciona el estado de la validación y las medidas correctivas necesarias.

La función `Validator` está diseñada para mejorar la experiencia del usuario. Imagine un escenario en el que usuarios determinados tengan dificultades para acceder a la aplicación global porque un incidente provoca que las celdas no estén disponibles temporalmente. En lugar de presentar errores genéricos, la función `Validator` puede proporcionar pasos de corrección instructivos. Entre estos pasos se pueden incluir los siguientes:
+ Informe a los usuarios acerca del incidente.
+ Proporcione un tiempo de espera aproximado antes de la disponibilidad del servicio.
+ Proporcione un número de contacto de asistencia para obtener información adicional.

El código de demostración de la `Validator` función verifica que la celda proporcionada por el usuario URLs en la solicitud coincida con los registros almacenados en la tabla. `tbl_router` La función `Validator` también comprueba si el estado de las celdas es correcto.

# Configuración del acceso privado a un bucket de Amazon S3 a través de un punto de conexión de VPC
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint"></a>

*Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama y Joaquin Rinaudo, Amazon Web Services*

## Resumen
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-summary"></a>

En Amazon Simple Storage Service (Amazon S3), los URLs prefirmados permiten compartir archivos de tamaño arbitrario con los usuarios de destino. De forma predeterminada, URLs se puede acceder a Amazon S3 prefirmados desde Internet dentro de un período de tiempo de caducidad, lo que facilita su uso. Sin embargo, los entornos corporativos a menudo requieren que el acceso a Amazon S3 esté prefirmado URLs para estar limitado únicamente a una red privada.

Este patrón presenta una solución sin servidor para interactuar de forma segura con los objetos de S3 mediante el uso de objetos prefirmados URLs desde una red privada sin acceso a Internet. En la arquitectura, los usuarios acceden a un equilibrador de carga de aplicación a través de un nombre de dominio interno. El tráfico se enruta de manera interna a través de Amazon API Gateway y un punto de conexión de nube privada virtual (VPC) del bucket de S3. La AWS Lambda función genera descargas de archivos prefirmados URLs a través del punto final de la VPC privada, lo que ayuda a mejorar la seguridad y la privacidad de los datos confidenciales.

## Requisitos previos y limitaciones
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Requisitos previos **
+ Una VPC que incluye una subred implementada en una Cuenta de AWS que está conectada a la red corporativa (por ejemplo, a través de). AWS Direct Connect

**Limitaciones**
+ El bucket S3 debe tener el mismo nombre que el dominio, por lo que le recomendamos que consulte [Reglas de nomenclatura de buckets de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
+ Este ejemplo de arquitectura no incluye características de supervisión para la infraestructura implementada. Si su caso de uso requiere supervisión, considere la posibilidad de añadir [servicios de supervisión de AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Este ejemplo de arquitectura no incluye la validación de entradas. Si su caso de uso requiere la validación de las entradas y un mayor nivel de seguridad, considere [utilizarla AWS WAF para proteger su API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Esta arquitectura de ejemplo no incluye el registro de acceso con el equilibrador de carga de aplicación Si el caso de uso requiere el registro de acceso, considere la posibilidad de habilitar los [registros de acceso del equilibrador de carga](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

**Versiones**
+ Python versión 3.11 o posterior
+ Terraform versión 1.6 o posterior

## Arquitectura
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-architecture"></a>

**Pila de tecnología de destino**

Los servicios siguientes de AWS se utilizan en la pila de tecnologías de destino:
+ **Amazon S3** es el servicio de almacenamiento principal que se utiliza para cargar, descargar y almacenar archivos de manera segura.
+ **Amazon API Gateway** expone los recursos y puntos de conexión para interactuar con el bucket de S3. Este servicio desempeña un papel en la generación de datos prefirmados URLs para descargar o cargar.
+ **AWS Lambda**genera archivos prefirmados URLs para descargar desde Amazon S3. API Gateway llama a la función de Lambda.
+ **Amazon VPC** implementa recursos en una VPC para proporcionar aislamiento de la red. La VPC incluye subredes y tablas de enrutamiento para controlar el flujo de tráfico.
+ El **equilibrador de carga de aplicación** dirige el tráfico entrante a API Gateway o al punto de conexión de VPC del bucket de S3. Permite a los usuarios de la red corporativa acceder a los recursos de manera interna.
+ El **punto de conexión de VPC para Amazon S3** permite la comunicación directa y privada entre los recursos de la VPC y Amazon S3 sin tener que atravesar la Internet pública.
+ **AWS Identity and Access Management (IAM)** controla el acceso a AWS los recursos. Los permisos se configuran para garantizar interacciones seguras con la API y otros servicios.

**Arquitectura de destino**

![\[Configuración del acceso privado a un bucket de S3 a través de un punto de conexión de VPC\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


En el siguiente diagrama se ilustra lo siguiente:

1. Los usuarios de la red corporativa pueden acceder al equilibrador de carga de aplicación a través de un nombre de dominio interno. Suponemos que existe una conexión entre la red corporativa y la subred de la intranet Cuenta de AWS (por ejemplo, a través de una Direct Connect conexión).

1. El Application Load Balancer dirige el tráfico entrante a API Gateway para generar datos prefirmados URLs para descargar o cargar en Amazon S3, o al punto final de VPC del bucket de S3. En ambos casos, las solicitudes se enrutan internamente y no es necesario que atraviesen Internet.

1. API Gateway expone los recursos y puntos de conexión para interactuar con el bucket de S3. En este ejemplo, proporcionamos un punto de conexión para descargar archivos del bucket de S3, pero esto podría ampliarse para proporcionar también la funcionalidad de carga.

1. La función de Lambda genera la URL prefirmada para descargar un archivo de Amazon S3 mediante el nombre de dominio del equilibrador de carga de aplicación en lugar del dominio público de Amazon S3.

1. El usuario recibe la URL prefirmada y la utiliza para descargar el archivo de Amazon S3 mediante el equilibrador de carga de aplicación. El equilibrador de carga incluye una ruta predeterminada para enviar el tráfico que no está destinado a la API hacia el punto de conexión de VPC del bucket de S3.

1. El punto de conexión de VPC enruta la URL prefirmada con el nombre de dominio personalizado al bucket de S3. El bucket de S3 debe tener el mismo nombre que el dominio.

**Automatización y escala**

Este patrón utiliza Terraform para implementar la infraestructura del repositorio de código en una Cuenta de AWS.

## Tools (Herramientas)
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-tools"></a>

**Herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.
+ [Terraform](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que te ayuda a interactuar con los AWS servicios mediante comandos en tu consola de línea de comandos.

**Repositorio de código**

[El código de este patrón está disponible en un GitHub repositorio en private-s3-vpce. https://github.com/aws-samples/](https://github.com/aws-samples/private-s3-vpce)

## Prácticas recomendadas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-best-practices"></a>

La arquitectura de ejemplo para este patrón utiliza [permisos de IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar el acceso a la API. Cualquier persona que tenga credenciales de IAM válidas puede llamar a la API. Si su caso de uso requiere un modelo de autorización más complejo, es posible que quiera [utilizar un mecanismo de control de acceso distinto](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

## Epics
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-epics"></a>

### Implemente la solución en un Cuenta de AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Obtenga AWS las credenciales. | Revise sus AWS credenciales y el acceso a su cuenta. Para obtener instrucciones, consulte los [ajustes de configuración y del archivo de credenciales](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) en la AWS CLI documentación. | AWS DevOps, AWS general | 
| Clonar el repositorio. | Clona el GitHub repositorio proporcionado con este patrón:<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, AWS general | 
| Configure las variables | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS general | 
| Implemente la solución. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS general | 

### Pruebe la solución
<a name="test-the-solution"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un archivo de prueba. | Cargue un archivo en Amazon S3 para crear un escenario de prueba para la descarga del archivo. Puede utilizar la [consola Amazon S3](https://console.aws.amazon.com/s3/) o el siguiente AWS CLI comando:<pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, AWS general | 
| Pruebe la funcionalidad de las URL prefirmadas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS general | 
| Elimine recursos. | Asegúrese de eliminar los recursos cuando ya no sean necesarios:<pre>terraform destroy</pre> | AWS DevOps, AWS general | 

## Resolución de problemas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Los nombres de clave de objetos de S3 con caracteres especiales, como signos numéricos (\$1), infringen los parámetros de la URL y provocan errores. | Codifique los parámetros de URL correctamente y asegúrese de que el nombre de la clave del objeto S3 siga las [directrices de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

## Recursos relacionados
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-resources"></a>

Amazon S3:
+ [Compartir objetos con prefirmados URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Controlar el acceso desde los puntos finales de la VPC con políticas de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway:
+ [Usa políticas de puntos finales de VPC de forma privada APIs en API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Equilibrador de carga de aplicación:
+ [Alojamiento de sitios web estáticos HTTPS internos con ALB, S3 y PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) (AWS entrada de blog)

# Solucione problemas de estados AWS Step Functions mediante Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar y Sangam Kushwaha, Amazon Web Services*

## Resumen
<a name="troubleshooting-states-in-aws-step-functions-summary"></a>

AWS Step Functions Las capacidades de gestión de errores pueden ayudarlo a detectar un error que se produce durante un estado de un [flujo de trabajo](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), pero aun así puede resultar difícil encontrar la causa raíz de un error y depurarlo. Este patrón aborda ese desafío y muestra cómo Amazon Bedrock puede serle útil para resolver los errores que se producen durante los estados de Step Functions. 

Step Functions orquesta el flujo de trabajo, lo que facilita a los desarrolladores la automatización de los procesos. Step Functions también proporciona una funcionalidad de gestión de errores que ofrece las ventajas siguientes:
+ Los desarrolladores pueden crear aplicaciones más resilientes que no fallen por completo cuando algo sale mal.
+ Los flujos de trabajo pueden incluir lógica condicional para gestionar los distintos tipos de errores de otra manera.
+ El sistema puede volver a intentar las operaciones erróneas de manera automática, tal vez con un retroceso exponencial.
+ Se pueden definir rutas de ejecución alternativas para los escenarios de error, lo que permite que el flujo de trabajo se adapte y continúe procesándose.

Cuando se produce un error en un flujo de trabajo de Step Functions, este patrón muestra cómo se pueden enviar el mensaje de error y el contexto a un modelo fundacional (FM) como Claude 3, compatible con Step Functions. El FM puede analizar el error, clasificarlo y sugerir posibles medidas de corrección.

## Requisitos previos y limitaciones
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS
+ Comprensión básica de los [flujos de trabajo de AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)
+ [Conectividad con la API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html) de Amazon Bedrock

**Limitaciones**
+ Puede utilizar el enfoque de este patrón para varios Servicios de AWS. Sin embargo, los resultados pueden variar en función del mensaje creado por AWS Lambda Amazon Bedrock y evaluado posteriormente.
+ Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="troubleshooting-states-in-aws-step-functions-architecture"></a>

En el siguiente diagrama se muestran los componentes de la arquitectura y el flujo de trabajo de esta aplicación.

![\[Flujo de trabajo para la gestión y notificación de errores mediante Step Functions, Amazon Bedrock y Amazon SNS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


En el diagrama se muestra el flujo de trabajo automatizado para la gestión y notificación de errores en una máquina de estados de Step Functions:

1. El desarrollador inicia la ejecución de una máquina de estados.

1. La máquina de estados de Step Functions comienza a procesar sus estados. Hay dos resultados posibles:
   + (a) Si todos los estados se ejecutan correctamente, el flujo de trabajo pasa de manera directa a Amazon SNS para recibir una notificación de operación correcta por correo electrónico.
   + (b) Si se produce un error en algún estado, el flujo de trabajo pasa a la función de Lambda de gestión de errores.

1. En caso de error, sucede lo siguiente:
   + (a) Se desencadena la función de Lambda (controlador de errores). La función de Lambda extrae el mensaje de error de los datos del evento que le pasó la máquina de estados de Step Functions. A continuación, la función de Lambda prepara una petición según este mensaje de error y la envía a Amazon Bedrock. La petición solicita soluciones y sugerencias relacionadas con el error específico encontrado.
   + (b) Amazon Bedrock, que aloja el modelo de IA generativa, procesa la petición de entrada. (Este patrón utiliza el modelo de base Anthropic Claude 3 (FM), que es uno de los muchos FMs que admite Amazon Bedrock). El modelo de IA analiza el contexto del error. A continuación, el modelo genera una respuesta que puede incluir explicaciones de por qué se produjo el error, soluciones posibles para resolverlo y sugerencias para evitar cometer los mismos errores en el futuro.

     Amazon Bedrock devuelve su respuesta generada por IA a la función de Lambda. La función de Lambda procesa la respuesta y, posiblemente, la formatea o extrae información clave. A continuación, la función de Lambda envía la respuesta a la salida de la máquina de estados.

1. Tras la gestión del error o una ejecución correcta, el flujo de trabajo finaliza con la activación de Amazon SNS para que envíe una notificación por correo electrónico.

## Tools (Herramientas)
<a name="troubleshooting-states-in-aws-step-functions-tools"></a>

**Servicios de AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) es un servicio totalmente gestionado que pone a su disposición modelos básicos de alto rendimiento (FMs) de las principales empresas emergentes de IA y Amazon a través de una API unificada.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones esenciales para la empresa.

## Prácticas recomendadas
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Dado que Amazon Bedrock es un modelo de IA generativo que aprende de los datos entrenados, también utiliza esos datos para entrenar y generar contexto. Como práctica recomendada, oculte la información privada que pueda provocar problemas de filtración de datos. 
+ Si bien la IA generativa puede proporcionar información valiosa, una persona debe supervisar las decisiones críticas relacionadas con la gestión de errores, sobre todo en los entornos de producción.

## Epics
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Creación de una máquina de estados para un flujo de trabajo
<a name="create-a-state-machine-for-your-workflow"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear una máquina de estado  | Para crear una máquina de estados que sea adecuada para el flujo de trabajo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Crear una función de Lambda
<a name="create-a-lam-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Creación de una función de Lambda.  | Para crear una función de Lambda, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Configure la lógica requerida en el código de Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html)<pre>client = boto3.client(<br />        service_name="bedrock-runtime", region_name="selected-region"<br />    )<br /><br />    # Invoke Claude 3 with the text prompt<br />    model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format<br /><br />    try:<br />        response = client.invoke_model(<br />            modelId=model_id,<br />            body=json.dumps(<br />                {<br />                    "anthropic_version": "bedrock-2023-05-31",<br />                    "max_tokens": 1024,<br />                    "messages": [<br />                        {<br />                            "role": "user",<br />                            "content": [{"type": "text", "text": prompt}],<br />                        }<br />                    ],<br />                }<br />            ),<br />        )<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Integración de Step Functions con Lambda
<a name="integrate-sfn-with-lam"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure Lambda para gestionar los errores en Step Functions. | Para configurar Step Functions a fin de gestionar los errores sin interrumpir el flujo de trabajo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Resolución de problemas
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Lambda no puede acceder a la API de Amazon Bedrock (no tiene autorización para realizar la operación) | Este error se produce cuando el rol de Lambda no tiene permiso para acceder a la API de Amazon Bedrock. Para resolver este problema, agregue la política `AmazonBedrockFullAccess` para el rol de Lambda. Para obtener más información, consulte [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)la *Guía de referencia de políticas AWS administradas*. | 
| Error del tiempo de espera de Lambda | A veces, es posible que tarde más de 30 segundos en generar una respuesta y enviarla, según la petición. Para resolver este problema, aumente el tiempo de configuración. Para más información, consulte [Configure Lambda function timeout](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) en la *AWS Lambda Developer Guide*. | 

## Recursos relacionados
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon Bedrock API access](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Cree su primera función Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Desarrollo de flujos de trabajo con Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/developing-workflows.html#development-run-debug)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

# Más patrones
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Acceder, consultar y unirse a las tablas de Amazon DynamoDB con Athena](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [Automatice las CodeGuru revisiones de Amazon para aplicaciones de AWS CDK Python mediante GitHub Actions](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatice la evaluación de recursos de AWS](automate-aws-resource-assessment.md)
+ [Automatice la implementación de aplicaciones anidadas mediante SAM de AWS](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatice el despliegue de lagos de AWS Supply Chain datos en una configuración de múltiples repositorios mediante GitHub Actions, Artifactory y Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatice la replicación de las instancias de Amazon RDS en Cuentas de AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Archivar automáticamente los elementos en Amazon S3 con DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [Detecta automáticamente los cambios e inicia diferentes CodePipeline canalizaciones para un monorepo en CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Cree una arquitectura sin servidor multiusuario en Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Cree un visor de archivos de unidad central avanzada en la nube de AWS](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Calcule el valor en riesgo (VaR) mediante los servicios de AWS](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Copiar los productos de AWS Service Catalog en diferentes cuentas y regiones de AWS](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.md)
+ [Crear automáticamente canalizaciones de CI dinámicas para proyectos de Java y Python](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Descomponga monolitos en microservicios mediante CQRS y abastecimiento de eventos](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [Implemente una aplicación de una sola página basada en React en Amazon S3 y CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Implemente una API de Amazon API Gateway en un sitio web interno mediante puntos de conexión privados y un Equilibrador de carga de aplicación](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Implementar y administrar un lago de datos sin servidor en la nube de AWS mediante el uso de la infraestructura como código](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Implemente un caso de uso de RAG AWS mediante Terraform y Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Desarrollo de un asistente basado en el chat totalmente automatizado con los agentes y las bases de conocimiento de Amazon Bedrock](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [Desarrolle asistentes avanzados de IA generativa basados en chat mediante RAG y solicitudes ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Genere dinámicamente una política de IAM con IAM Access Analyzer mediante Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.md)
+ [Incorpore componentes visuales de Amazon Quick Sight en aplicaciones web mediante Amazon Cognito y la automatización iAC](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Asegúrese de que el registro de Amazon EMR en Amazon S3 esté habilitado en el lanzamiento](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Estime el costo de una tabla de DynamoDB para la capacidad bajo demanda](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Genere recomendaciones personalizadas y reclasificadas con Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Genere datos de prueba con un trabajo de AWS Glue y Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [Implemente SHA1 el hash para los datos de PII al migrar de SQL Server a PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Implementar el patrón saga sin servidor mediante AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.md)
+ [Mejore el rendimiento operativo habilitando Amazon DevOps Guru en varias regiones y cuentas de AWS y OUs con la CDK de AWS](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Lance un CodeBuild proyecto en todas las cuentas de AWS mediante Step Functions y una función de proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Migración de cargas de trabajo de Apache Cassandra a Amazon Keyspaces mediante AWS Glue](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Supervise el uso de una imagen de máquina de Amazon compartida en múltiples Cuentas de AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Optimice las implementaciones sin servidor con varias cuentas mediante los flujos de trabajo y Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [Organice una canalización de ETL con validación, transformación y particionamiento mediante AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Consulta de las tablas de Amazon DynamoDB con SQL mediante Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Ejecute cargas de trabajo programadas y basadas en eventos a escala con AWS Fargate.](run-event-driven-and-scheduled-workloads-at-scale-with-aws-fargate.md)
+ [Envío de atributos personalizados a Amazon Cognito e ingesta en los tokens](send-custom-attributes-cognito.md)
+ [Sirva contenido estático en un bucket de Amazon S3 a través de una VPC mediante Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Simplificación del desarrollo y la implementación de los bots de Amazon Lex mediante un flujo de trabajo automatizado](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Estructure un proyecto de Python en una arquitectura hexagonal con AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Traduce el lenguaje natural a consultas (DSL) para consultas de Elasticsearch OpenSearch y consultas de Elasticsearch](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Descarga de datos de un clúster de Amazon Redshift entre las cuentas a Amazon S3](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [Coordine la dependencia de los recursos y la ejecución de tareas mediante la construcción AWS Fargate WaitCondition hook](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Uso de agentes de Amazon Bedrock para automatizar la creación de controles de entrada de acceso en Amazon EKS mediante peticiones basadas en texto](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)