

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.

# Implementación y prueba de la aplicación de ejemplo de canalizaciones de bifurcación de eventos de Amazon SNS
<a name="sns-deploy-test-fork-pipelines-sample-application"></a>

Para acelerar el desarrollo de sus aplicaciones basadas en eventos, puede suscribir canales de gestión de eventos (impulsados por Event Fork AWS Pipelines) a temas de Amazon SNS. AWS **Event Fork Pipelines es un conjunto de [aplicaciones anidadas de código abierto, basadas en el modelo de aplicaciones AWS](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html) [sin servidor](https://aws.amazon.com/serverless/sam/) (AWS SAM), que puede implementar directamente desde el paquete [AWS Event Fork Pipelines (elija Mostrar aplicaciones que creen funciones de IAM personalizadas o políticas de recursos) en su cuenta](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines).** AWS Para obtener más información, consulte [Cómo funciona AWS Event Fork Pipelines](sns-fork-pipeline-as-subscriber.md#how-sns-fork-works).

En esta página, se muestra cómo puede utilizarla Consola de administración de AWS para implementar y probar la aplicación de ejemplo Event Fork Pipelines. AWS 

**importante**  
Para evitar incurrir en costes no deseados una vez que termine de implementar la aplicación de ejemplo AWS Event Fork Pipelines, elimine su pila. CloudFormation Para obtener más información, consulte [Eliminación de una pila en la consola de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) en la *Guía del usuario de AWS CloudFormation *.

# AWS Ejemplo de caso de uso de Event Fork Pipelines
<a name="example-sns-fork-use-case"></a>

El siguiente escenario describe una aplicación de comercio electrónico sin servidor y basada en eventos que utiliza AWS Event Fork Pipelines. Puede utilizar este [ejemplo de aplicación de comercio electrónico](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-example-ecommerce-checkout-api) en la consola AWS Serverless Application Repository y, a continuación, implementarla en la suya Cuenta de AWS mediante la AWS Lambda consola, donde podrá probarla y examinar su código fuente. GitHub

![\[La arquitectura de una aplicación de comercio electrónico sin servidor que integra Servicios de AWS. Describe el flujo de los usuarios de comercio electrónico que realizan pedidos a través de una API Gateway con diferentes canalizaciones de procesamiento, incluidos el almacenamiento de pedidos, el análisis de búsquedas y la reproducción, con el fin de demostrar cómo se administran y analizan los eventos a través de Amazon SNS, Lambda, Amazon SQS, DynamoDB y Kibana.\]](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/sns-fork-example-use-case.png)


Esta aplicación de comercio electrónico recibe los pedidos de los compradores a través de una RESTful API alojada en API Gateway y respaldada por la AWS Lambda función`CheckoutApiBackendFunction`. Con esta función, se publican todos los pedidos recibidos en un tema de Amazon SNS llamado `CheckoutEventsTopic` que, a su vez, distribuye los pedidos a cuatro canalizaciones diferentes.

La primera canalización es la canalización normal de procesamiento de pago que ha diseñado e implementado el propietario de la aplicación de comercio electrónico. Esta canalización incluye la cola Amazon SQS `CheckoutQueue` que almacena en búfer todos los pedidos recibidos, una AWS Lambda función denominada `CheckoutFunction` que sondea la cola para procesar estos pedidos y la tabla DynamoDB que guarda de forma segura todos los pedidos realizados. `CheckoutTable`

## Aplicando Event Fork AWS Pipelines
<a name="applying-sns-fork-pipelines"></a>

Los componentes de la aplicación de comercio electrónico controlan la lógica de negocio central. Sin embargo, el propietario de la aplicación de comercio electrónico también debe tener en cuenta lo siguiente:
+ **Conformidad**: copias de seguridad seguras y comprimidas, encriptadas en reposo, y saneamiento de la información confidencial.
+ **Resistencia**: reproducción de los pedidos más recientes en caso de que se interrumpa el proceso de gestión logística.
+ **Capacidad de búsqueda**: ejecutar análisis y generar métricas en pedidos realizados.

En lugar de implementar esta lógica de procesamiento de eventos, el propietario de la aplicación puede suscribir AWS Event Fork Pipelines al tema `CheckoutEventsTopic` Amazon SNS.
+ [Canalización de almacenamiento y copia de seguridad de eventos](sns-fork-pipeline-as-subscriber.md#sns-fork-event-storage-and-backup-pipeline) se ha configurado para transformar los datos a fin de eliminar los detalles de la tarjeta de crédito, almacenar en búfer los datos durante 60 segundos, comprimirlos mediante GZIP y cifrarlos mediante la clave administrada por el cliente predeterminada para Amazon S3. Esta clave es administrada AWS y alimentada por AWS Key Management Service ()AWS KMS.

  Para obtener más información, consulte [Choose Amazon S3 For Your Destination](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-s3), [Amazon Data Firehose Data Transformation](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html) y [Configure Settings](https://docs.aws.amazon.com/firehose/latest/dev/create-configure.html) en la *Guía para desarrolladores de Amazon Data Firehose*.
+ [Canalización de búsqueda y análisis de eventos](sns-fork-pipeline-as-subscriber.md#sns-fork-event-search-and-analytics-pipeline) se ha configurado con una duración de reintento de índice de 30 segundos, un bucket para almacenar los pedidos que no se han indexado en el dominio de búsqueda y una política de filtro para restringir el conjunto de pedidos indexados.

  Para obtener más información, consulte [Elija un OpenSearch servicio para su destino](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-elasticsearch) en la Guía para *desarrolladores de Amazon Data Firehose*.
+ [Canalización de reproducción de eventos](sns-fork-pipeline-as-subscriber.md#sns-fork-event-replay-pipeline) se ha configurado con la parte de cola de Amazon SQS de la canalización normal de procesamiento de pedidos que ha diseñado e implementado el propietario de la aplicación de comercio electrónico.

  Para obtener más información, consulte [Nombre y URL de la cola](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-general-identifiers.html#queue-name-url) en la *Guía para desarrolladores de Amazon Simple Queue Service*.

La siguiente política de filtro de JSON se establece en la configuración para la canalización de búsqueda y análisis de eventos. Solo coincide con los pedidos entrantes en los que el importe total es de 100 USD o superior. Para obtener más información, consulte [Filtrado de mensajes en Amazon SNS](sns-message-filtering.md).

```
{				
   "amount": [{ "numeric": [ ">=", 100 ] }]
}
```

Al utilizar el patrón AWS Event Fork Pipelines, el propietario de la aplicación de comercio electrónico puede evitar la sobrecarga de desarrollo que suele implicar la programación de una lógica indiferenciada para la gestión de eventos. En su lugar, puede implementar AWS Event Fork Pipelines directamente desde dentro de ella. AWS Serverless Application Repository Cuenta de AWS

# Paso 1: implementar la aplicación de ejemplo de Amazon SNS
<a name="deploy-sample-application"></a>

1. Inicie sesión en la [consola de AWS Lambda](https://console.aws.amazon.com/lambda/).

1. En el panel de navegación, elija **Functions (Funciones)** y, a continuación, **Create function (Crear función)**.

1. En la página **Create function (Crear función)**, proceda del modo siguiente:

   1. Elija **Examinar el repositorio de aplicaciones sin servidor**, **Aplicaciones públicas**, **Mostrar aplicaciones que crean roles de IAM personalizados o políticas de recursos**.

   1. Busque `fork-example-ecommerce-checkout-api` y, a continuación, elija la aplicación.

1. En la página **fork-example-ecommerce-checkout-api**, haga lo siguiente:

   1. En la sección **Application settings (Configuración de la aplicación)**, escriba el valor de **Application name (Nombre de aplicación)** (por ejemplo, `fork-example-ecommerce-my-app`).
**nota**  
Para encontrar fácilmente sus recursos más tarde, mantenga el prefijo `fork-example-ecommerce`.
Para cada implementación, el nombre de la aplicación debe ser único. Si reutilizas el nombre de una aplicación, la implementación solo actualizará la CloudFormation pila implementada anteriormente (en lugar de crear una nueva).

   1. (Opcional) Introduzca una de las siguientes **LogLevel**configuraciones para la ejecución de la función Lambda de la aplicación:
      + `DEBUG`
      + `ERROR`
      + `INFO` (predeterminado)
      + `WARNING`

1. Elija **I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications (Confirmo que esta aplicación crea políticas de recursos o roles de IAM personalizados e implementa aplicaciones anidadas)** y, a continuación, en la parte inferior de la página, elija **Deploy (Implementar)**.

En la *my-app* página **Estado de despliegue de fork-example-ecommerce -**, Lambda muestra el estado **Su aplicación se está desplegando**.

En la sección **Recursos**, CloudFormation comienza a crear la pila y muestra el **estado CREATE\$1IN\$1PROGRESS** de cada recurso. **Cuando se completa el proceso, muestra el estado CREATE\$1COMPLETE. CloudFormation **

**nota**  
La implementación de todos los recursos puede tardar entre 20 y 30 minutos.

Cuando se haya completado la implementación, Lambda muestra el estado **La aplicación se ha implementado**.

# Paso 2: ejecutar la aplicación de ejemplo vinculada a SNS
<a name="execute-sample-application"></a>

1. **En la AWS Lambda consola, en el panel de navegación, selecciona Aplicaciones.**

1. En la página **Applications (Aplicaciones)**, en el campo de búsqueda, busque `serverlessrepo-fork-example-ecommerce-my-app` y, a continuación, seleccione la aplicación.

1. En la sección **Resources (Recursos)**, haga lo siguiente:

   1. Para buscar el recurso cuyo tipo es **ApiGatewayRestApi**, por ejemplo, ordene los recursos por **tipo** y`ServerlessRestApi`, a continuación, amplíe el recurso.

   1. Se muestran dos recursos anidados, de los tipos **ApiGatewayDeployment** y **ApiGatewayStage**.

   1. Copie el enlace **Prod API endpoint (Punto de enlace de la API de Prod)** y añádale `/checkout`, por ejemplo: 

      ```
      https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
      ```

1. Copie el siguiente código JSON a un archivo denominado `test_event.json`.

   ```
   {
      "id": 15311,
      "date": "2019-03-25T23:41:11-08:00",
      "status": "confirmed",
      "customer": {
         "id": 65144,		
   	 "quantity": 2,
         "price": 25.00,
         "subtotal": 50.00
      }]
   }
   ```

1. Para enviar una solicitud HTTPS a su punto de enlace de la API, pase la carga de evento de muestra como entrada mediante la ejecución de un comando `curl`, por ejemplo:

   ```
   curl -d "$(cat test_event.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   La API devuelve la siguiente respuesta vacía, lo que indica que la ejecución es correcta:

   ```
   { }
   ```

# Paso 3: verificar el rendimiento de la aplicación y las canalizaciones de Amazon SNS
<a name="verify-sample-application-pipelines"></a>

## Paso 1: verificar la ejecución de la canalización de pago de ejemplo
<a name="verify-execution-checkout-pipeline"></a>

1. Inicie sesión en la [consola de Amazon DynamoDB](https://console.aws.amazon.com/dynamodb/).

1. En el panel de navegación, elija **Tables (Tablas)**.

1. Busque `serverlessrepo-fork-example` y elija `CheckoutTable`.

1. En la página de detalles de tabla, elija **Items (Elementos)** y, a continuación, el elemento creado.

   Se muestran los atributos almacenados.

## Paso 2: verificar la ejecución de la canalización de almacenamiento y copia de seguridad de eventos
<a name="verify-execution-event-storage-backup-pipeline"></a>

1. Inicie sesión en la [consola de Amazon S3](https://console.aws.amazon.com/s3/).

1. En el panel de navegación, elija **Buckets**.

1. Busque `serverlessrepo-fork-example` y, a continuación, elija `CheckoutBucket`.

1. Navegue por la jerarquía de directorios hasta que encuentre un archivo con la extensión `.gz`.

1. Para descargar el archivo, elija **Actions (Acciones)**, **Open (Abrir)**.

1. La canalización se configura con una función Lambda con la que se sanea la información de la tarjeta de crédito por razones de conformidad.

   Para verificar que la carga de JSON almacenada no contiene información de tarjeta de crédito, descomprima el archivo.

## Paso 3: verificar la ejecución de la canalización de búsqueda y análisis de eventos
<a name="verify-execution-event-search-analytics-pipeline"></a>

1. Inicie sesión en la [consola OpenSearch de servicio](https://console.aws.amazon.com/aos/).

1. En el panel de navegación, en **My domains (Mis dominios)**, elija su dominio con el prefijo `serverl-analyt`.

1. La canalización se configura con una política de filtro de suscripciones de Amazon SNS con la que se establece una condición de coincidencia numérica.

   ****Para comprobar que el evento está indexado porque se refiere a una orden cuyo valor es superior a 100 USD, en la *abcdefgh1ijk* página **serverl-analyt-**, seleccione Indices, checkout\$1events.****

## Paso 4: verificar la ejecución de la canalización de reproducción de eventos
<a name="verify-execution-event-replay-pipeline"></a>

1. Inicie sesión en la [consola de Amazon SQS](https://console.aws.amazon.com/sqs/).

1. En la lista de colas, busque `serverlessrepo-fork-example` y elija `ReplayQueue`.

1. Seleccione **Enviar y recibir mensajes**.

1. **En el cuadro de *123ABCD4E5F6* diálogo **Enviar y recibir mensajes en fork-example-ecommerce -*my-app*... ReplayP- ReplayQueue -, seleccione Sondear** los mensajes.** 

1. Para verificar que el evento está en cola, seleccione **More Details (Más detalles)** junto al mensaje que aparece en la cola.

# Paso 4: simular un problema y reproducir eventos para la recuperación
<a name="simulate-issue-replay-events-for-recovery"></a>

## Paso 1: habilitar el problema simulado y enviar una segunda solicitud de API
<a name="enable-simulated-issue-send-second-api-request"></a>

1. Inicie sesión en la [consola de AWS Lambda](https://console.aws.amazon.com/lambda/).

1. En el panel de navegación, elija **Functions (Funciones)**.

1. Busque `serverlessrepo-fork-example` y elija `CheckoutFunction`.

1. En el **fork-example-ecommerce- - *my-app* -... CheckoutFunction *ABCDEF*** **página, en la sección **Variables de entorno**, defina la variable **BUG\$1ENABLED en** **true** y, a continuación, seleccione Guardar.**

1. Copie el siguiente código JSON a un archivo denominado `test_event_2.json`.

   ```
   {
   	   "id": 9917,
   	   "date": "2019-03-26T21:11:10-08:00",
   	   "status": "confirmed",
   	   "customer": {
   	      "id": 56999,
   "quantity": 1,
   	      "price": 75.00,
   	      "subtotal": 75.00
   	   }]
   	}
   ```

1. Para enviar una solicitud HTTPS a su punto de enlace de la API, pase la carga de evento de muestra como entrada mediante la ejecución de un comando `curl`, por ejemplo:

   ```
   curl -d "$(cat test_event_2.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   La API devuelve la siguiente respuesta vacía, lo que indica que la ejecución es correcta:

   ```
   { }
   ```

## Paso 2: verificar la corrupción de datos simulada
<a name="verify-simulated-data-corruption"></a>

1. Inicie sesión en la [consola de Amazon DynamoDB](https://console.aws.amazon.com/dynamodb/).

1. En el panel de navegación, elija **Tables (Tablas)**.

1. Busque `serverlessrepo-fork-example` y elija `CheckoutTable`.

1. En la página de detalles de tabla, elija **Items (Elementos)** y, a continuación, el elemento creado.

   Se muestran los atributos almacenados, algunos marcados como **CORRUPTED\$1 (Dañados)**.

## Paso 3: deshabilitar el problema simulado
<a name="disable-simulated-issue"></a>

1. Inicie sesión en la [consola de AWS Lambda](https://console.aws.amazon.com/lambda/).

1. En el panel de navegación, elija **Functions (Funciones)**.

1. Busque `serverlessrepo-fork-example` y elija `CheckoutFunction`.

1. En el **fork-example-ecommerce- - *my-app* -... CheckoutFunction *ABCDEF*** **página, en la sección **Variables de entorno**, defina la variable **BUG\$1ENABLED en** **false** y, a continuación, seleccione Guardar.**

## Paso 4: habilitar la reproducción para la recuperación del problema
<a name="enable-replay-recover-from-simulated-issue"></a>

1. **En la AWS Lambda consola, en el panel de navegación, selecciona Funciones.**

1. Busque `serverlessrepo-fork-example` y elija `ReplayFunction`.

1. Expanda la sección **Designer (Diseñador)**, elija el mosaico **SQS** y, a continuación, en la sección **SQS**, elija **Enabled (Habilitado)**.
**nota**  
El desencadenador de fuentes de eventos de Amazon SQS tarda aproximadamente un minuto en habilitarse.

1. Seleccione **Save**.

1. Para ver los atributos recuperados, vuelva a la consola de Amazon DynamoDB.

1. Para deshabilitar la reproducción, regrese a la AWS Lambda consola y desactive el activador de la fuente de eventos de Amazon SQS para. `ReplayFunction`