

# Uso de Amazon SQS, Amazon SNS y Lambda
<a name="how-to-enable-disable-notification-intro"></a>

La habilitación de notificaciones es una operación de bucket. Almacene la información de configuración de notificaciones en el subrecurso de *notificación* asociado a un bucket. Después de crear o cambiar la configuración de notificación del bucket, normalmente lleva alrededor de cinco minutos para que los cambios surtan efecto. Cuando la notificación se habilita por primera vez, se produce `s3:TestEvent`. Puede utilizar cualquiera de los siguientes métodos para administrar la configuración de notificación:
+ **Uso de la consola de Amazon S3**: puede utilizar la interfaz de usuario de la consola para configurar una notificación en un bucket sin tener que escribir ningún código. Para obtener más información, consulte [Habilitación y configuración de notificaciones de eventos mediante la consola de Amazon S3](enable-event-notifications.md).
+ **Uso de los SDK de AWS mediante programación**: internamente, tanto la consola como los SDK llaman a la API de REST de Amazon S3 para administrar los subrecursos de *notificación* asociados al bucket. Para obtener ejemplos de configuraciones de notificación que utilizan AWS SDK, consulte [Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)](ways-to-add-notification-config-to-bucket.md).
**nota**  
También puede realizar llamadas a la API de REST de Amazon S3 directamente desde su código. Sin embargo, esto puede ser engorroso porque para ello debe escribir el código para autenticar las solicitudes. 

Independientemente del método que utilice, Amazon S3 almacena la configuración de notificación como XML en el subrecurso de *notificación* asociado a un bucket. Para obtener información acerca de los subrecursos de bucket, consulte [Opciones de configuración de buckets de uso general](UsingBucket.md#bucket-config-options-intro).

**nota**  
Si tiene varias notificaciones de eventos erróneas debido a la eliminación de destinos, es posible que reciba el mensaje **No se pudieron validar las siguientes configuraciones de destino** al intentar eliminarlas. Puede resolver este problema en la consola de S3 mediante la eliminación de todas las notificaciones erróneas al mismo tiempo.

**Topics**
+ [Conceder permisos para publicar mensajes de notificación de eventos en un destino](grant-destinations-permissions-to-s3.md)
+ [Habilitación y configuración de notificaciones de eventos mediante la consola de Amazon S3](enable-event-notifications.md)
+ [Configuración de notificaciones de eventos mediante programación](#event-notification-configuration)
+ [Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)](ways-to-add-notification-config-to-bucket.md)
+ [Configuración de notificaciones de eventos mediante el filtrado de nombres de clave de objeto](notification-how-to-filtering.md)
+ [Estructura de mensaje de evento](notification-content-structure.md)

# Conceder permisos para publicar mensajes de notificación de eventos en un destino
<a name="grant-destinations-permissions-to-s3"></a>

Debe conceder a la entidad principal de Amazon S3 los permisos necesarios para llamar a la API pertinente a fin de publicar mensajes en un tema SNS, una cola SQS o una función de Lambda. Esto permite que Amazon S3 pueda publicar mensajes de notificación de eventos en un destino.

Para solucionar problemas de publicación de mensajes de notificación de eventos en un destino, consulte [Solucionar problemas para publicar notificaciones de eventos de Amazon S3 en un tema de Amazon Simple Notification Service](https://repost.aws/knowledge-center/sns-not-receiving-s3-event-notifications).

**Topics**
+ [Conceder permisos para invocar una función AWS Lambda](#grant-lambda-invoke-permission-to-s3)
+ [Conceder permisos para publicar mensajes en un tema de SNS o una cola de SQS](#grant-sns-sqs-permission-for-s3)

## Conceder permisos para invocar una función AWS Lambda
<a name="grant-lambda-invoke-permission-to-s3"></a>

Para publicar mensajes de eventos en AWS Lambda, Amazon S3 invoca una función de Lambda y proporciona el mensaje de evento como un argumento.

Cuando utiliza la consola de Amazon S3 para configurar notificaciones de eventos en un bucket de Amazon S3 para una función de Lambda, la consola configura los permisos necesarios en la función de Lambda. Esto permite que Amazon S3 tenga permisos para invocar la función desde el bucket. Para obtener más información, consulte [Habilitación y configuración de notificaciones de eventos mediante la consola de Amazon S3](enable-event-notifications.md). 

También puede conceder permisos a Amazon S3 desde AWS Lambda para invocar su función de Lambda. Para obtener más información, consulte [Tutorial: utilizar AWS Lambda con Amazon S3](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) en la *Guía para desarrolladores de AWS Lambda*.

## Conceder permisos para publicar mensajes en un tema de SNS o una cola de SQS
<a name="grant-sns-sqs-permission-for-s3"></a>

Debe asociar una política de AWS Identity and Access Management (IAM) al tema de SNS o la cola de SQS de destino a fin de conceder a Amazon S3 permisos para publicar mensajes en el tema de SNS o la cola de SQS. 

Para ver un ejemplo de cómo asociar una política a un tema de SNS o una cola de SQS, consulte [Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)](ways-to-add-notification-config-to-bucket.md). Para obtener más información acerca de estos permisos, consulte los siguientes temas:
+ [Casos de ejemplo para el control de acceso de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/AccessPolicyLanguage_UseCases_Sns.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*
+ [Identity and Access Management en Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html) en la *guía para desarrolladores de Amazon Simple Queue Service*

### Política de IAM para un tema de SNS de destino
<a name="sns-topic-policy"></a>

A continuación, se muestra un ejemplo de una política de AWS Identity and Access Management (IAM) que se asocia al tema de SNS de destino. Para obtener instrucciones sobre cómo utilizar esta política para configurar un tema de Amazon SNS de destino para las notificaciones de eventos, consulte [Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)](ways-to-add-notification-config-to-bucket.md).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "Example SNS topic policy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SNS:Publish"
            ],
            "Resource": "arn:aws:sns:us-east-1:111122223333:example-sns-topic",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-123456789012"
                }
            }
        }
    ]
}
```

------

### Política de IAM para una cola de SQS de destino
<a name="sqs-queue-policy"></a>

A continuación se muestra un ejemplo de una política de IAM que se asocia a la cola de SQS de destino. Para obtener instrucciones sobre cómo utilizar esta política para configurar una cola de Amazon SQS de destino para las notificaciones de eventos, consulte [Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)](ways-to-add-notification-config-to-bucket.md).

Para utilizar esta política, debe actualizar el ARN de la cola de Amazon SQS, el nombre del bucket y el ID de la Cuenta de AWS del propietario del bucket.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "example-statement-ID",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SQS:SendMessage"
            ],
            "Resource": "arn:aws:sqs:us-east-1:111122223333:queue-name",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket"
                },
                "StringEquals": {
                    "aws:SourceAccount": "bucket-owner-123456789012"
                }
            }
        }
    ]
}
```

------

Tanto para las políticas de IAM de Amazon SNS como de Amazon SQS puede especificar la condición `StringLike` en la política, en lugar de la condición `ArnLike`.

Cuando se usa `ArnLike`, las partes del ARN de partición, servicio, ID de cuenta, tipo de recurso e ID de recurso parcial deben coincidir exactamente con el ARN en el contexto de la solicitud. Solo la región y la ruta del recurso permiten la coincidencia parcial.

 Cuando se usa `StringLike` en lugar de `ArnLike`, la coincidencia ignora la estructura del ARN y permite la coincidencia parcial, independientemente de la parte sustituida por el carácter comodín. Para obtener más información, consulte [Elementos de la política JSON de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) en la *Guía del usuario de IAM*.

```
"Condition": {         
  "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket" }
  }
```

### AWS KMSPolítica de claves de
<a name="key-policy-sns-sqs"></a>

Si la cola de SQS o los temas de SNS están cifrados con una clave administrada por el cliente AWS Key Management Service (AWS KMS), debe conceder a la entidad principal del servicio Amazon S3 permiso para trabajar con la cola o los temas cifrados. Para conceder el permiso principal de servicio de Amazon S3, agregue la siguiente declaración a la política de claves para la clave administrada por el cliente.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "example-statement-ID",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Para obtener más información acerca de las políticas de claves de AWS KMS, consulte [Uso de las políticas de claves en AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

Para obtener más información acerca del uso del cifrado del lado del servidor con AWS KMS para Amazon SQS y Amazon SNS, consulte lo siguiente:
+ [Key management (Administración de claves)](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.
+ [Key management (Administración de claves)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html) en la *Guía para desarrolladores de Amazon Simple Queue Service*.
+ [Encrypting messages published to Amazon SNS with AWS KMS](https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/) en el *Blog de cómputo de AWS*.

# Habilitación y configuración de notificaciones de eventos mediante la consola de Amazon S3
<a name="enable-event-notifications"></a>

Puede habilitar determinados eventos de bucket de uso general de Amazon S3 para enviar un mensaje de notificación a un destino cada vez que se produzcan estos eventos. En esta sección se explica cómo usar la consola de Amazon S3 para habilitar la notificación de eventos. Para obtener información acerca de cómo utilizar notificaciones de eventos con los SDK de AWS y las API de REST de Amazon S3, consulte [Configuración de notificaciones de eventos mediante programación](how-to-enable-disable-notification-intro.md#event-notification-configuration). 

**Requisitos previos**: antes de habilitar las notificaciones de eventos para el bucket, debe configurar uno de los tipos de destino y, a continuación, configurar los permisos. Para obtener más información, consulte [Destinos de eventos admitidos](notification-how-to-event-types-and-destinations.md#supported-notification-destinations) y [Conceder permisos para publicar mensajes de notificación de eventos en un destino](grant-destinations-permissions-to-s3.md).

**nota**  
No se admiten colas FIFO (First-In-First-Out) de Amazon Simple Queue Service como destino de la notificación de eventos de Amazon S3. Para enviar una notificación de un evento de Amazon S3 a una cola FIFO de Amazon SQS, puede utilizar Amazon EventBridge. Para obtener más información, consulte [Activación de Amazon EventBridge](enable-event-notifications-eventbridge.md).

**Topics**
+ [Habilitación de notificaciones de Amazon SNS, Amazon SQS o Lambda mediante la consola de Amazon S3](#enable-event-notifications-sns-sqs-lam)

## Habilitación de notificaciones de Amazon SNS, Amazon SQS o Lambda mediante la consola de Amazon S3
<a name="enable-event-notifications-sns-sqs-lam"></a>

**Para habilitar y configurar notificaciones de eventos para un bucket de S3**

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

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

1. En la lista de buckets, seleccione el nombre del bucket para el que desea habilitar eventos.

1. Seleccione **Properties (Propiedades)**.

1. Acceda a la sección **Notificaciones de eventos** y elija **Creación de notificación de eventos**.

1. En la sección **Configuración general**, especifique el nombre del evento descriptivo para la notificación de eventos. Opcionalmente, también puede especificar un prefijo y un sufijo para limitar las notificaciones a objetos con claves que terminen en los caracteres especificados.

   1. Introduzca una descripción para el **nombre del evento**.

      Si no escribe un nombre, se genera un identificador único global (GUID) que se utiliza para el nombre. 

   1. (Opcional) Para filtrar notificaciones de eventos por prefijo, ingrese un **prefijo**. 

      Por ejemplo, puede configurar un filtro de prefijo para recibir notificaciones solo cuando se añadan archivos a una carpeta específica (por ejemplo: )., `images/`). 

   1. (Opcional) Para filtrar notificaciones de eventos por sufijo, ingrese un **sufijo**. 

      Para obtener más información, consulte [Configuración de notificaciones de eventos mediante el filtrado de nombres de clave de objeto](notification-how-to-filtering.md). 

1. En la sección **Event types** (Tipos de evento), seleccione uno o varios tipos de eventos para los que desee recibir notificaciones. 

   Para obtener una lista de los diferentes tipos de eventos, consulte [Tipos de eventos admitidos para SQS, SNS y Lambda](notification-how-to-event-types-and-destinations.md#supported-notification-event-types).

1. En la sección **Destino**, elija el destino de notificación de eventos. 
**nota**  
Antes de poder publicar notificaciones de eventos, debe conceder a la entidad principal de Amazon S3 los permisos necesarios para llamar a la API correspondiente. De este modo, puede publicar notificaciones en una función de Lambda, un tema SNS o una cola SQS.

   1. Seleccione el tipo de destino: **función de Lambda**, **Tema SNS** o **Cola SQS**.

   1. Después de elegir el tipo de destino, elija una función, un tema o una cola de la lista.

   1. O bien, si prefiere especificar un nombre de recurso de Amazon (ARN), seleccione **Enter ARN (Escribir ARN)** y escríbalo.

   Para obtener más información, consulte [Destinos de eventos admitidos](notification-how-to-event-types-and-destinations.md#supported-notification-destinations).

1. Seleccione **Guardar cambios** y Amazon S3 enviará un mensaje de prueba al destino de notificación de eventos.

## Configuración de notificaciones de eventos mediante programación
<a name="event-notification-configuration"></a>

De forma predeterminada, las notificaciones no están habilitadas para ningún tipo de evento. Por lo tanto, el subrecurso de *notificación* inicialmente almacena las configuraciones vacías.

```
<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
</NotificationConfiguration>
```

Para permitir las notificaciones de eventos de determinado tipo, debe reemplazar el XML con la configuración adecuada que identifique los tipos de eventos que desea que Amazon S3 publique y el destino donde desea publicar los eventos. Para cada destino, debe añadir la configuración XML correspondiente. 

**Para publicar mensajes de evento en una cola SQS**  
A fin de establecer una cola SQS como destino de notificación para uno o varios tipos de eventos, agregue `QueueConfiguration`.

```
<NotificationConfiguration>
  <QueueConfiguration>
    <Id>optional-id-string</Id>
    <Queue>sqs-queue-arn</Queue>
    <Event>event-type</Event>
    <Event>event-type</Event>
     ...
  </QueueConfiguration>
   ...
</NotificationConfiguration>
```

**Para publicar mensajes de evento en un tema SNS**  
A fin de establecer un tema SNS como destino de notificación para tipos de eventos específicos, agregue `TopicConfiguration`.

```
<NotificationConfiguration>
  <TopicConfiguration>
     <Id>optional-id-string</Id>
     <Topic>sns-topic-arn</Topic>
     <Event>event-type</Event>
     <Event>event-type</Event>
      ...
  </TopicConfiguration>
   ...
</NotificationConfiguration>
```

**Para invocar la función de AWS Lambda y proporcionar un mensaje de evento como argumento**  
A fin de establecer una función de Lambda como destino de notificación para tipos de eventos específicos, agregue `CloudFunctionConfiguration`.

```
<NotificationConfiguration>
  <CloudFunctionConfiguration>   
     <Id>optional-id-string</Id>   
     <CloudFunction>cloud-function-arn</CloudFunction>        
     <Event>event-type</Event>      
     <Event>event-type</Event>      
      ...  
  </CloudFunctionConfiguration>
   ...
</NotificationConfiguration>
```

**Para eliminar todas las notificaciones configuradas en un bucket**  
Para eliminar todas las notificaciones configuradas en un bucket, guarde un `<NotificationConfiguration/>` elemento vacío en el subrecurso de *notificación* . 

Cuando Amazon S3 detecta un evento del tipo específico, publica un mensaje con la información del evento. Para obtener más información, consulte [Estructura de mensaje de evento](notification-content-structure.md). 

Para obtener más información acerca de la configuración de notificaciones de eventos, consulte los temas siguientes: 
+ [Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)](ways-to-add-notification-config-to-bucket.md).
+ [Configuración de notificaciones de eventos mediante el filtrado de nombres de clave de objeto](notification-how-to-filtering.md)

# Explicación: configuración de un bucket para notificaciones (tema de SNS o cola de SQS)
<a name="ways-to-add-notification-config-to-bucket"></a>

Puede recibir notificaciones de Amazon S3 mediante Amazon Simple Notification Service (Amazon SNS) o Amazon Simple Queue Service (Amazon SQS). En este tutorial, agregue una configuración de notificación al bucket mediante un tema de Amazon SNS y una cola de Amazon SQS.

**nota**  
No se admiten colas FIFO (First-In-First-Out) de Amazon Simple Queue Service como destino de la notificación de eventos de Amazon S3. Para enviar una notificación de un evento de Amazon S3 a una cola FIFO de Amazon SQS, puede utilizar Amazon EventBridge. Para obtener más información, consulte [Activación de Amazon EventBridge](enable-event-notifications-eventbridge.md).

**Topics**
+ [Resumen del tutorial](#notification-walkthrough-summary)
+ [Paso 1: Crear una cola de Amazon SQS](#step1-create-sqs-queue-for-notification)
+ [Paso 2: Crear un tema sobre Amazon SNS](#step1-create-sns-topic-for-notification)
+ [Paso 3: Agregar una configuración de notificación al bucket](#step2-enable-notification)
+ [Paso 4: Probar la configuración](#notification-walkthrough-1-test)

## Resumen del tutorial
<a name="notification-walkthrough-summary"></a>

Esta explicación lo ayuda a hacer lo siguiente:
+ Publique eventos de tipo `s3:ObjectCreated:*` en una cola de Amazon SQS.
+ que publique eventos de tipo `s3:ReducedRedundancyLostObject` en un tema de Amazon SNS.

Para obtener información acerca de la configuración de notificación, consulte [Uso de Amazon SQS, Amazon SNS y Lambda](how-to-enable-disable-notification-intro.md).

Puede realizar todos estos pasos con la consola sin escribir ningún código. Además, se brindan ejemplos de código con los SDK de AWS para Java y .NET, con el fin de ayudarlo a agregar configuraciones de notificación mediante programación.

El procedimiento incluye los pasos siguientes:

1. Cree una cola de Amazon SQS.

   Con la consola de Amazon SQS, cree una cola de SQS. Puede acceder a cualquier mensaje que Amazon S3 envía a la cola mediante programación. Sin embargo, para esta explicación, va a verificar los mensajes de notificación en la consola. 

   Debe asociar una política de acceso a la cola para otorgarle permiso a Amazon S3 para publicar mensajes.

1. Cree un tema de Amazon SNS.

   Con la consola de Amazon SNS, cree un tema SNS y suscríbase al tema. De esta forma, cualquier evento que se publique en él se le entregará a usted. Debe especificar el correo electrónico como protocolo de comunicación. Después de crear un tema, Amazon SNS envía un correo electrónico. Utilice el enlace del correo electrónico para confirmar la suscripción al tema. 

   Debe asociar una política de acceso al tema para otorgarle a Amazon S3 permiso para publicar mensajes. 

1. Añada una configuración de notificación a un bucket. 

## Paso 1: Crear una cola de Amazon SQS
<a name="step1-create-sqs-queue-for-notification"></a>

Siga los pasos para crear y suscribirse a una cola de Amazon Simple Queue Service (Amazon SQS)

1. Con la consola de Amazon SQS, cree una cola. Para obtener instrucciones, consulte [Introducción a Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html) en la *Guía para desarrolladores de Amazon Simple Queue Service*. 

1. Sustituya la política de acceso asociada a la cola por la siguiente política.

   1. En la consola de Amazon SQS, en la lista de **colas**, elija el nombre de la cola.

   1. En la pestaña **Access policy** (Política de acceso), elija **Edit** (Editar).

   1. Sustituya la política de acceso asociada a la cola. En ella, proporcione el ARN de Amazon SQS, el nombre del bucket de origen y el ID de cuenta del propietario del bucket.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Id": "example-ID",
          "Statement": [
              {
                  "Sid": "example-statement-ID",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "s3.amazonaws.com"
                  },
                  "Action": [
                      "SQS:SendMessage"
                  ],
                  "Resource": "arn:aws:sqs:us-west-2:111122223333:s3-notification-queue",
                  "Condition": {
                      "ArnLike": {
                          "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1"
                      },
                      "StringEquals": {
                          "aws:SourceAccount": "bucket-owner-123456789012"
                      }
                  }
              }
          ]
      }
      ```

------

   1. Seleccione **Save**.

1. (Opcional) Si la cola de Amazon SQS o el tema de Amazon SNS tienen habilitado el cifrado del lado del servidor con AWS Key Management Service (AWS KMS), agregue la siguiente política a la clave administrada por el cliente de cifrado simétrica. 

   Debe agregar la política a una clave administrada por el cliente porque no puede modificar la clave administrada por AWS para Amazon SQS o Amazon SNS. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "example-ID",
       "Statement": [
           {
               "Sid": "example-statement-ID",
               "Effect": "Allow",
               "Principal": {
                   "Service": "s3.amazonaws.com"
               },
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   Para obtener más información acerca del uso de SSE para Amazon SQS y Amazon SNS con AWS KMS, consulte lo siguiente:
   + [Key management (Administración de claves)](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.
   + [Key management (Administración de claves)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html) en la *Guía para desarrolladores de Amazon Simple Queue Service*.

1. Anote el ARN de la cola. 

   La cola SQS que creó es otro recurso de la Cuenta de AWS. Tiene un nombre de recurso de Amazon (ARN) único. Necesitará este ARN en el siguiente paso. El ARN tiene el siguiente formato:

   ```
   arn:aws:sqs:aws-region:account-id:queue-name
   ```

## Paso 2: Crear un tema sobre Amazon SNS
<a name="step1-create-sns-topic-for-notification"></a>

Siga los pasos para crear y suscribirse a un tema de Amazon SNS.

1. Con la consola de Amazon SNS, cree un tema. Para obtener instrucciones, consulte el [tema Creación de un Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*. 

1. Suscríbase al tema. Para este ejercicio, utilice el correo electrónico como el protocolo de comunicación. Para obtener instrucciones, consulte el [tema Suscribirse a un 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 Simple Notification Service*. 

   Recibirá un correo electrónico donde deberá confirmar su suscripción al tema. Confirme la suscripción. 

1. Sustituya la política de acceso asociada al tema por la siguiente política. En ella, proporcione el ARN del tema de SNS, el nombre del bucket y el ID de cuenta del propietario del bucket.

1. Apunte el ARN del tema.

   El tema de SNS que creó es otro recurso de su Cuenta de AWS y tiene un ARN único. Necesitará este ARN en el siguiente paso. El ARN tendrá el siguiente formato:

   ```
   arn:aws:sns:aws-region:account-id:topic-name
   ```

## Paso 3: Agregar una configuración de notificación al bucket
<a name="step2-enable-notification"></a>

Puede habilitar las notificaciones del bucket con la consola de Amazon S3 o mediante programación con los SDK de AWS. Seleccione cualquiera de las opciones para configurar las notificaciones en su bucket. En esta sección, se brindan ejemplos de códigos en los que se utilizan los SDK de AWS para Java y .NET.

### Opción A: habilitar notificaciones en un bucket mediante la consola
<a name="step2-enable-notification-using-console"></a>

Mediante la consola de Amazon S3, agregue una configuración de notificación al solicitar a Amazon S3 que realice lo siguiente:
+ Publicar eventos del tipo **Todos los objeto crean eventos** en su cola de Amazon SQS.
+ Publicar eventos del tipo **Objeto perdido en RRS** para su tema de Amazon SNS.

Después de guardar la configuración de notificación, Amazon S3 publica un mensaje de prueba que usted recibe por correo electrónico. 

Para obtener instrucciones, consulte [Habilitación y configuración de notificaciones de eventos mediante la consola de Amazon S3](enable-event-notifications.md). 

### Opción B: habilitar notificaciones en un bucket mediante los SDK de AWS
<a name="step2-enable-notification-using-awssdk-dotnet"></a>

------
#### [ .NET ]

El siguiente ejemplo de código C\$1 brinda un listado completo de códigos que añade una configuración de notificación a un bucket. Debe actualizar el código y proporcionar el nombre del bucket y el ARN del tema de SNS. Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte [Introducción al SDK de AWS para .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) en la *Guía para desarrolladores del SDK de AWS para .NET*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class EnableNotificationsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string snsTopic = "*** SNS topic ARN ***";
        private const string sqsQueue = "*** SQS topic ARN ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            EnableNotificationAsync().Wait();
        }

        static async Task EnableNotificationAsync()
        {
            try
            {
               PutBucketNotificationRequest request = new PutBucketNotificationRequest
                {
                    BucketName = bucketName
                };

                TopicConfiguration c = new TopicConfiguration
                {
                    Events = new List<EventType> { EventType.ObjectCreatedCopy },
                    Topic = snsTopic
                };
                request.TopicConfigurations = new List<TopicConfiguration>();
                request.TopicConfigurations.Add(c);
                request.QueueConfigurations = new List<QueueConfiguration>();
                request.QueueConfigurations.Add(new QueueConfiguration()
                {
                    Events = new List<EventType> { EventType.ObjectCreatedPut },
                    Queue = sqsQueue
                });
                
                PutBucketNotificationResponse response = await client.PutBucketNotificationAsync(request);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' ", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown error encountered on server. Message:'{0}' ", e.Message);
            }
        }
    }
}
```

------
#### [ Java ]

Para ver ejemplos de cómo configurar las notificaciones de bucket con el AWS SDK para Java, consulte [Procesar las notificaciones de eventos de S3](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_ProcessS3EventNotification_section.html) en la *Referencia de la API de Amazon S3*.

------

## Paso 4: Probar la configuración
<a name="notification-walkthrough-1-test"></a>

Ahora puede cargar un objeto en el bucket y verificar la notificación de eventos en la consola de Amazon SQS para probar la configuración. Para obtener instrucciones, consulte [Receiving a Message](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.htmlReceiveMessage.html) en la *sección "Getting Started" de Amazon Simple Queue Service Developer Guide*. 

# Configuración de notificaciones de eventos mediante el filtrado de nombres de clave de objeto
<a name="notification-how-to-filtering"></a>

Al configurar una notificación de evento de Amazon S3, debe especificar qué tipos de eventos de Amazon S3 admitidos hacen que Amazon S3 envíe la notificación. Si se produce un tipo de evento que no ha especificado en el bucket de S3, Amazon S3 no envía la notificación.

Puede configurar las notificaciones para que se filtren por el prefijo y el sufijo del nombre de clave de objetos. Por ejemplo, puede establecer una configuración para recibir una notificación solo cuando se agregan archivos de imagen con una extensión de nombre de archivo “`.jpg`” a un bucket. O bien, puede establecer una configuración que envíe una notificación a un tema de Amazon SNS cuando se agregue un objeto con el prefijo “`images/`” al bucket y, al mismo tiempo, enviar notificaciones por objetos con un prefijo “`logs/`” en el mismo bucket a una función de AWS Lambda. 

**nota**  
No se puede usar un carácter comodín (“\$1”) en los filtros como prefijo o sufijo. Si el prefijo o el sufijo contienen un espacio, debe sustituirlo por el carácter “\$1”. Si utiliza otros caracteres especiales en el valor del prefijo o sufijo, debe escribirlos en [formato codificado en URL (codificado en porcentaje)](https://en.wikipedia.org/wiki/Percent-encoding). Para obtener una lista completa de los caracteres especiales que se deben convertir a un formato codificado en URL cuando se utilizan en un prefijo o sufijo para las notificaciones de eventos, consulte [Caracteres seguros](object-keys.md#object-key-guidelines-safe-characters).

Puede establecer configuraciones de notificaciones que utilicen el filtrado de nombre de clave de objeto en la consola de Amazon S3. Para ello, puede utilizar las API de Amazon S3 a través de los SDK de AWS o las API de REST directamente. Para obtener información sobre el uso de la interfaz de usuario de la consola para establecer una configuración de notificación en un bucket, consulte [Habilitación y configuración de notificaciones de eventos mediante la consola de Amazon S3](enable-event-notifications.md). 

Amazon S3 guarda la configuración de notificación como XML en el subrecurso *notificación* asociado a un bucket según lo descrito en [Uso de Amazon SQS, Amazon SNS y Lambda](how-to-enable-disable-notification-intro.md). Puede utilizar la estructura XML `Filter` para definir las reglas para filtrar las notificaciones según el prefijo o sufijo de un nombre de clave de objeto. Para obtener información acerca de la estructura XML de `Filter`, consulte [Notificación de bucket PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html) en la *Referencia de la API de Amazon Simple Storage Service*. 

Las configuraciones de notificaciones que utilizan `Filter` no pueden definir las reglas de filtrado con prefijos superpuestos, sufijos superpuestos o superposición de prefijo y sufijo. En las siguientes secciones se presentan ejemplos de configuraciones de notificación válidas con filtrado de nombres de clave de objeto. También contienen ejemplos de configuraciones de notificación que no son válidas debido a la superposición de prefijo y sufijo. 

**Topics**
+ [Ejemplos de configuraciones de notificaciones válidas con filtrado de nombre de clave de objeto](#notification-how-to-filtering-example-valid)
+ [Ejemplos de configuraciones de notificación con superposición de prefijo o sufijo no válido](#notification-how-to-filtering-examples-invalid)

## Ejemplos de configuraciones de notificaciones válidas con filtrado de nombre de clave de objeto
<a name="notification-how-to-filtering-example-valid"></a>

La siguiente configuración de notificación incluye una configuración de cola que identifica una cola de Amazon SQS donde Amazon S3 puede publicar eventos del tipo `s3:ObjectCreated:Put`. Los eventos se publican siempre que se envíe una solicitud PUT para un objeto con un prefijo de `images/` y un sufijo `jpg` a un bucket. 

```
<NotificationConfiguration>
  <QueueConfiguration>
      <Id>1</Id>
      <Filter>
          <S3Key>
              <FilterRule>
                  <Name>prefix</Name>
                  <Value>images/</Value>
              </FilterRule>
              <FilterRule>
                  <Name>suffix</Name>
                  <Value>jpg</Value>
              </FilterRule>
          </S3Key>
     </Filter>
     <Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue>
     <Event>s3:ObjectCreated:Put</Event>
  </QueueConfiguration>
</NotificationConfiguration>
```

La siguiente configuración de notificación tiene varios prefijos no superpuestos. La configuración define que las notificaciones para solicitudes PUT en la carpeta `images/` van a la cola A, mientas que las notificaciones para solicitudes PUT en la carpeta `logs/` van a la cola B.

```
<NotificationConfiguration>
  <QueueConfiguration>
     <Id>1</Id>
     <Filter>
            <S3Key>
                <FilterRule>
                    <Name>prefix</Name>
                    <Value>images/</Value>
                </FilterRule>
            </S3Key>
     </Filter>
     <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue>
     <Event>s3:ObjectCreated:Put</Event>
  </QueueConfiguration>
  <QueueConfiguration>
     <Id>2</Id>
     <Filter>
            <S3Key>
                <FilterRule>
                    <Name>prefix</Name>
                    <Value>logs/</Value>
                </FilterRule>
            </S3Key>
     </Filter>
     <Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue>
     <Event>s3:ObjectCreated:Put</Event>
  </QueueConfiguration>
</NotificationConfiguration>
```

La siguiente configuración de notificación tiene varios sufijos no superpuestos. Mediante la configuración, se define que todas las imágenes `.jpg` recientemente agregadas al bucket se procesan mediante la función de nube A de Lambda y todas las imágenes `.png` recientemente agregadas se procesan mediante la función de nube B. Los sufijos `.png` y `.jpg` no se superponen a pesar de terminar con la misma letra. Si una determinada cadena puede finalizar con ambos sufijos, los dos sufijos se consideran superpuestos. Una cadena no puede finalizar con `.png` y `.jpg`, por lo que los sufijos en la configuración de ejemplo no son sufijos superpuestos. 

```
<NotificationConfiguration>
  <CloudFunctionConfiguration>
     <Id>1</Id>
     <Filter>
            <S3Key>
                <FilterRule>
                    <Name>suffix</Name>
                    <Value>.jpg</Value>
                </FilterRule>
            </S3Key>
     </Filter>
     <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
     <Event>s3:ObjectCreated:Put</Event>
  </CloudFunctionConfiguration>
  <CloudFunctionConfiguration>
     <Id>2</Id>
     <Filter>
            <S3Key>
                <FilterRule>
                    <Name>suffix</Name>
                    <Value>.png</Value>
                </FilterRule>
            </S3Key>
     </Filter>
     <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
     <Event>s3:ObjectCreated:Put</Event>
  </CloudFunctionConfiguration>
</NotificationConfiguration>
```

Las configuraciones de notificación que utilizan `Filter` no pueden definir reglas de filtrado con prefijos superpuestos para los mismos tipos de eventos. Solo pueden hacerlo si los prefijos superpuestos que se utilizan con sufijos que no se superponen. La siguiente configuración de ejemplo muestra cómo los objetos creados con un prefijo común pero sufijos no superpuestos se pueden enviar a diferentes destinos.

```
<NotificationConfiguration>
  <CloudFunctionConfiguration>
     <Id>1</Id>
     <Filter>
            <S3Key>
                <FilterRule>
                    <Name>prefix</Name>
                    <Value>images</Value>
                </FilterRule>
                <FilterRule>
                    <Name>suffix</Name>
                    <Value>.jpg</Value>
                </FilterRule>
            </S3Key>
     </Filter>
     <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</CloudFunction>
     <Event>s3:ObjectCreated:Put</Event>
  </CloudFunctionConfiguration>
  <CloudFunctionConfiguration>
     <Id>2</Id>
     <Filter>
            <S3Key>
                <FilterRule>
                    <Name>prefix</Name>
                    <Value>images</Value>
                </FilterRule>
                <FilterRule>
                    <Name>suffix</Name>
                    <Value>.png</Value>
                </FilterRule>
            </S3Key>
     </Filter>
     <CloudFunction>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</CloudFunction>
     <Event>s3:ObjectCreated:Put</Event>
  </CloudFunctionConfiguration>
</NotificationConfiguration>
```

## Ejemplos de configuraciones de notificación con superposición de prefijo o sufijo no válido
<a name="notification-how-to-filtering-examples-invalid"></a>

En su mayoría, las configuraciones de notificación que utilizan `Filter` no pueden definir reglas de filtrado con prefijos superpuestos, sufijos superpuestos ni combinaciones de prefijos y sufijos superpuestos para los mismos tipos de eventos. Puede tener prefijos superpuestos siempre que los sufijos no se superpongan. Para ver un ejemplo, consulte [Configuración de notificaciones de eventos mediante el filtrado de nombres de clave de objeto](#notification-how-to-filtering).

Puede utilizar filtros de nombre de clave de objeto superpuestos con diferentes tipos de eventos. Por ejemplo, puede crear una configuración de notificación que utilice el prefijo `image/` para el tipo de evento `ObjectCreated:Put` y el prefijo `image/` para el tipo de evento `ObjectRemoved:*`. 

Se recibe un mensaje de error si se intenta guardar una configuración de notificación que tiene filtros de nombre superpuestos no válidos para los mismos tipos de eventos, o cuando se utiliza la consola o la API de Amazon S3. En esta sección, se muestran ejemplos de configuraciones de notificación que no son válidas debido a los filtros de nombre superpuestos. 

Se asume que cualquier regla de configuración de notificación existente tiene un prefijo y un sufijo predeterminados que coinciden con cualquier otro prefijo y sufijo respectivamente. La siguiente configuración de notificación no es válida porque incluye prefijos superpuestos. En concreto, el prefijo raíz se superpone con cualquier otro prefijo. Lo mismo sucede si utiliza un sufijo en lugar de un prefijo en este ejemplo. El sufijo raíz se superpone con cualquier otro sufijo.

```
<NotificationConfiguration>
     <TopicConfiguration>
         <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic>
         <Event>s3:ObjectCreated:*</Event>
    </TopicConfiguration>
    <TopicConfiguration>
         <Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic>
         <Event>s3:ObjectCreated:*</Event>
         <Filter>
             <S3Key>
                 <FilterRule>
                     <Name>prefix</Name>
                     <Value>images</Value>
                 </FilterRule>
            </S3Key>
        </Filter>
    </TopicConfiguration>             
</NotificationConfiguration>
```

La siguiente configuración de notificación no es válida porque incluye sufijos superpuestos. Si una determinada cadena puede finalizar con ambos sufijos, los dos sufijos se consideran superpuestos. Una cadena puede finalizar con `jpg` y `pg`. Por lo tanto, los sufijos se superponen. Lo mismo se aplica a los prefijos. Si una cadena dada puede comenzar con ambos prefijos, los dos prefijos se consideran superpuestos.

```
 <NotificationConfiguration>
     <TopicConfiguration>
         <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
         <Event>s3:ObjectCreated:*</Event>
         <Filter>
             <S3Key>
                 <FilterRule>
                     <Name>suffix</Name>
                     <Value>jpg</Value>
                 </FilterRule>
            </S3Key>
        </Filter>
    </TopicConfiguration>
    <TopicConfiguration>
         <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
         <Event>s3:ObjectCreated:Put</Event>
         <Filter>
             <S3Key>
                 <FilterRule>
                     <Name>suffix</Name>
                     <Value>pg</Value>
                 </FilterRule>
            </S3Key>
        </Filter>
    </TopicConfiguration>
</NotificationConfiguration
```

La siguiente configuración de notificación no es válida porque incluye prefijos y sufijos superpuestos. 

```
<NotificationConfiguration>
     <TopicConfiguration>
         <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
         <Event>s3:ObjectCreated:*</Event>
         <Filter>
             <S3Key>
                 <FilterRule>
                     <Name>prefix</Name>
                     <Value>images</Value>
                 </FilterRule>
                 <FilterRule>
                     <Name>suffix</Name>
                     <Value>jpg</Value>
                 </FilterRule>
            </S3Key>
        </Filter>
    </TopicConfiguration>
    <TopicConfiguration>
         <Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
         <Event>s3:ObjectCreated:Put</Event>
         <Filter>
             <S3Key>
                 <FilterRule>
                     <Name>suffix</Name>
                     <Value>jpg</Value>
                 </FilterRule>
            </S3Key>
        </Filter>
    </TopicConfiguration>
</NotificationConfiguration>
```

# Estructura de mensaje de evento
<a name="notification-content-structure"></a>

El mensaje de notificación que Amazon S3 envía para publicar un evento está en formato JSON.

Para obtener información general e instrucciones sobre cómo configurar notificaciones de eventos, consulte [Notificaciones de eventos de Amazon S3](EventNotifications.md).

En este ejemplo se muestra *versión 2.1* de la estructura JSON de notificación de eventos. Amazon S3 utiliza *versiones 2.1*, *2.2* y *2.3* de esta estructura de eventos. Amazon S3 utiliza la versión 2.2 para las notificaciones de eventos de replicación entre regiones. Utiliza la versión 2.3 para S3 Lifecycle, S3 Intelligent-Tiering, la ACL de objetos, el etiquetado de objetos y los eventos de eliminación de restauración de objetos. Estas versiones contienen información adicional específica de estas operaciones. Las versiones 2.2 y 2.3 son compatibles con la versión 2.1, que Amazon S3 utiliza actualmente para todos los demás tipos de notificaciones de eventos.

```
{  
   "Records":[  
      {  
         "eventVersion":"2.1",
         "eventSource":"aws:s3",
         "awsRegion":"us-west-2",
         "eventTime":"The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z) when Amazon S3 finished processing the request",
         "eventName":"The event type",
         "userIdentity":{  
            "principalId":"The unique ID of the IAM resource that caused the event"
         },
         "requestParameters":{  
            "sourceIPAddress":"The IP address where the request came from"
         },
         "responseElements":{  
            "x-amz-request-id":"The Amazon S3 generated request ID",
            "x-amz-id-2":"The Amazon S3 host that processed the request"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"The ID found in the bucket notification configuration",
            "bucket":{  
               "name":"The name of the bucket, for example, amzn-s3-demo-bucket",
               "ownerIdentity":{  
                  "principalId":"The Amazon retail customer ID of the bucket owner"
               },
               "arn":"The bucket Amazon Resource Name (ARN)"
            },
            "object":{  
               "key":"The object key name",
               "size":"The object size in bytes (as a number)",
               "eTag":"The object entity tag (ETag)",
               "versionId":"The object version if the bucket is versioning-enabled; null or not present if the bucket isn't versioning-enabled",
               "sequencer": "A string representation of a hexadecimal value used to determine event sequence; only used with PUT and DELETE requests"
            }
         },
         "glacierEventData": {
            "restoreEventData": {
               "lifecycleRestorationExpiryTime": "The time, in ISO-8601 format (for example, 1970-01-01T00:00:00.000Z), when the temporary copy of the restored object expires",
               "lifecycleRestoreStorageClass": "The source storage class for restored objects"
            }
         }
      }
   ]
}
```

Tenga en cuenta lo siguiente en relación con la estructura de mensajes de eventos:
+ El valor de clave `eventVersion` contiene una versión principal y una versión secundaria con el formato `major`.`minor`.

  La versión principal se incrementa si Amazon S3 realiza un cambio en la estructura del evento que no es compatible con versiones anteriores. Esto incluye eliminar un campo JSON existente o cambiar la forma en que se representa el contenido de un campo (por ejemplo: un formato de fecha).

  La versión secundaria se incrementa si Amazon S3 añade campos a la estructura del evento. Esto puede ocurrir si se proporciona información nueva para algunos o todos los eventos existentes. Esto también puede ocurrir si se proporciona información nueva solo sobre los tipos de eventos recientemente ingresados. Para mantener la compatibilidad con versiones secundarias nuevas de la estructura de eventos, recomendamos que las aplicaciones ignoren los campos nuevos.

  Si se ingresan tipos de eventos nuevos, pero la estructura del evento no se modifica de ninguna otra forma, la versión del evento no cambia.

  Para asegurarse de que las aplicaciones pueden analizar la estructura de eventos correctamente, le recomendamos que haga una comparación de igualdad con el número de la versión principal. Para asegurarse de que los campos previstos por la aplicación están presentes, también recomendamos realizar una comparación mayor o igual que con la versión secundaria.
+ El valor de la clave `eventName` hace referencia a la lista de [tipos de notificaciones de eventos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html), pero no contiene el prefijo `s3:`.
+ El valor de la clave `userIdentity` hace referencia al identificador único del recurso de AWS Identity and Access Management (IAM) (un usuario, un rol, un grupo, etc.) que provocó el evento. Para obtener una definición de cada prefijo de identificación de IAM (por ejemplo, AIDA, AROA, AGPA) e información sobre cómo conseguir el identificador único, consulte [Identificadores únicos](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html##identifiers-unique-ids) en la *Guía del usuario de IAM*.
+ El valor de clave `responseElements` es útil si desea realizar el seguimiento de una solicitud con AWS Support. `x-amz-request-id` y `x-amz-id-2` ayudan a Amazon S3 a rastrear una solicitud individual. Estos valores son los mismos que los que devuelve Amazon S3 en respuesta a la solicitud que inicia los eventos. Por lo tanto, puede utilizar estos valores para emparejar el evento con la solicitud.
+ El valor de la clave `s3` proporciona información acerca del bucket y el objeto involucrados en el evento. El valor del nombre de la clave de objeto está codificado como URL. Por ejemplo, `red flower.jpg` se convierte en `red+flower.jpg`. (Amazon S3 devuelve “`application/x-www-form-urlencoded`“ como el tipo de contenido en la respuesta).

  El valor de la clave `ownerIdentity` corresponde al ID de cliente minorista de Amazon (Amazon.com) del propietario del bucket. Este valor de ID ya no se utiliza y solo se conserva por razones de compatibilidad con versiones anteriores. 
+ El valor de la clave `sequencer` proporciona un forma de determinar la secuencia de los eventos. No se garantiza que las notificaciones de eventos lleguen en el mismo orden en que se produjeron los eventos. Sin embargo, las notificaciones de eventos que crean objetos (solicitudes `PUT`) y eliminan objetos contienen un `sequencer`. Puede usar este valor para determinar el orden de los eventos de una clave de objeto determinada. 

  Si compara las cadenas de `sequencer` de dos notificaciones de eventos en la misma clave de objeto, la notificación del evento con el mayor valor hexadecimal de `sequencer` es el evento que se produjo más tarde. Si utiliza notificaciones de eventos para mantener otra base de datos u otro índice de los objetos de Amazon S3, le recomendamos que compare y almacene los valores de `sequencer` a medida que procesa cada notificación de evento. 

  Tenga en cuenta lo siguiente:
  + No puede utilizar el valor de la clave `sequencer` para determinar el orden de los eventos en diferentes claves de objeto.
  + Las cadenas de `sequencer` pueden ser de diferentes longitudes. Por lo tanto, para comparar estos valores, primero debe agregar ceros a la izquierda del valor más corto y, a continuación, realizar una comparación lexicográfica.
+ El valor de la clave `glacierEventData` solo es visible para los eventos `s3:ObjectRestore:Completed`. 
+ El valor de la clave `restoreEventData` contiene atributos relacionados con la solicitud de restauración.
+ El valor de la clave `replicationEventData` solo es visible para los eventos de replicación.
+ El valor de la clave `intelligentTieringEventData` solo es visible para los eventos de S3 Intelligent-Tiering.
+ El valor de la clave `lifecycleEventData` solo es visible para los eventos de transición del ciclo de vida de S3.

## Mensajes de ejemplo
<a name="notification-content-structure-examples"></a>

A continuación se muestran ejemplos de mensajes de notificación de eventos de Amazon S3.

**Mensaje de prueba de Amazon S3**  
Después de configurar una notificación de evento en un bucket, Amazon S3 envía el siguiente mensaje de prueba.

```
1. {  
2.    "Service":"Amazon S3",
3.    "Event":"s3:TestEvent",
4.    "Time":"2014-10-13T15:57:02.089Z",
5.    "Bucket":"amzn-s3-demo-bucket",
6.    "RequestId":"5582815E1AEA5ADF",
7.    "HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
8. }
```

**nota**  
El mensaje `s3:TestEvent` utiliza un formato diferente al de las notificaciones de eventos normales de S3. A diferencia de otras notificaciones de eventos que utilizan la estructura de la matriz de `Records` mostrada anteriormente, el evento de prueba utiliza un formato simplificado con campos directos. Al implementar la gestión de eventos, asegúrese de que su código pueda distinguir y gestionar correctamente ambos formatos de mensaje.

**Mensaje de ejemplo cuando se crea un objeto mediante una solicitud `PUT`**  
El siguiente mensaje es un ejemplo de un mensaje que Amazon S3 envía para publicar un evento de `s3:ObjectCreated:Put`.

```
 1. {  
 2.    "Records":[  
 3.       {  
 4.          "eventVersion":"2.1",
 5.          "eventSource":"aws:s3",
 6.          "awsRegion":"us-west-2",
 7.          "eventTime":"1970-01-01T00:00:00.000Z",
 8.          "eventName":"ObjectCreated:Put",
 9.          "userIdentity":{  
10.             "principalId":"AIDAJDPLRKLG7UEXAMPLE"
11.          },
12.          "requestParameters":{  
13.             "sourceIPAddress":"172.16.0.1"
14.          },
15.          "responseElements":{  
16.             "x-amz-request-id":"C3D13FE58DE4C810",
17.             "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
18.          },
19.          "s3":{  
20.             "s3SchemaVersion":"1.0",
21.             "configurationId":"testConfigRule",
22.             "bucket":{  
23.                "name":"amzn-s3-demo-bucket",
24.                "ownerIdentity":{  
25.                   "principalId":"A3NL1KOZZKExample"
26.                },
27.                "arn":"arn:aws:s3:::amzn-s3-demo-bucket"
28.             },
29.             "object":{  
30.                "key":"HappyFace.jpg",
31.                "size":1024,
32.                "eTag":"d41d8cd98f00b204e9800998ecf8427e",
33.                "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
34.                "sequencer":"0055AED6DCD90281E5"
35.             }
36.          }
37.       }
38.    ]
39. }
```

