

# Usar o Amazon SQS, o Amazon SNS e o Lambda
<a name="how-to-enable-disable-notification-intro"></a>

A habilitação de notificações é uma operação em nível de bucket. Você armazena informações de configuração de notificação no sub-recurso de *notificação* que está associado a um bucket. Depois que você cria ou altera a configuração de notificação de bucket, normalmente é necessário aguardar cinco minutos para que as alterações entrem em vigor. Ocorre um `s3:TestEvent` quando a notificação é habilitada pela primeira vez. Você pode usar qualquer um dos métodos a seguir para gerenciar a configuração de notificação:
+ **Usar o console do Amazon S3**: você pode usar a interface de usuário do console para definir uma configuração de notificação em um bucket sem ter que escrever nenhum código. Para obter mais informações, consulte [Habilitar e configurar notificações de eventos usando o console do Amazon S3](enable-event-notifications.md).
+ **Uso dos AWS SDKs de forma programática**: internamente, tanto o console como os SDKs chamam a API REST do Amazon S3 para gerenciar sub-recursos de *notificação* que estão associados ao bucket. Para obter exemplos de configurações de notificação usando exemplos do AWS SDK, consulte [Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS)](ways-to-add-notification-config-to-bucket.md).
**nota**  
Você também pode fazer chamadas de API REST do Amazon S3 diretamente do seu código. Porém, isso pode ser complicado, porque é necessário gravar o código para autenticar suas solicitações. 

Independentemente do método usado, o Amazon S3 armazena a configuração de notificação como XML no sub-recurso *notification* (notificação) que está associado a um bucket. Para obter informações sobre sub-recursos de bucket, consulte [Opções de configuração de buckets de uso geral](UsingBucket.md#bucket-config-options-intro).

**nota**  
Se você tiver várias notificações de eventos de falha devido a destinos excluídos, poderá receber a mensagem **Não é possível validar as seguintes configurações de destino** ao tentar excluí-las. É possível resolver isso no console do S3 excluindo todas as notificações de falha ao mesmo tempo.

**Topics**
+ [Conceder permissões para publicar mensagens de notificação de vento a um destino](grant-destinations-permissions-to-s3.md)
+ [Habilitar e configurar notificações de eventos usando o console do Amazon S3](enable-event-notifications.md)
+ [Configuração de notificações de eventos de forma programática](#event-notification-configuration)
+ [Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS)](ways-to-add-notification-config-to-bucket.md)
+ [Configurar notificações de eventos usando filtragem de nomes de chave de objeto](notification-how-to-filtering.md)
+ [Estrutura de mensagens de evento](notification-content-structure.md)

# Conceder permissões para publicar mensagens de notificação de vento a um destino
<a name="grant-destinations-permissions-to-s3"></a>

É necessário garantir à entidade principal do Amazon S3 as permissões necessárias para chamar a API relevante para publicar mensagens em um tópico do SNS, uma fila do SQS ou uma função Lambda. Isso serve para que o Amazon S3 possa publicar mensagens de notificação de eventos em um destino.

Para solucionar problemas de publicação de mensagens de notificação de eventos em um destino, consulte [Solução de problemas para publicar notificações de eventos do Amazon S3 em um tópico do Amazon Simple Notification Service](https://repost.aws/knowledge-center/sns-not-receiving-s3-event-notifications).

**Topics**
+ [Conceder permissões para invocar uma função do AWS Lambda](#grant-lambda-invoke-permission-to-s3)
+ [Conceder permissões para publicar mensagens em um tópico do SNS ou em uma fila do SQS](#grant-sns-sqs-permission-for-s3)

## Conceder permissões para invocar uma função do AWS Lambda
<a name="grant-lambda-invoke-permission-to-s3"></a>

O Amazon S3 publica mensagens de eventos no AWS Lambda invocando uma função do Lambda e fornecendo a mensagem de evento como um argumento.

Ao usar o console do Amazon S3 para configurar notificações de eventos em um bucket do Amazon S3 para uma função do Lambda, o console configurará as permissões necessárias na função Lambda. Isso ocorre para que o Amazon S3 tenha permissões para invocar a função do bucket. Para obter mais informações, consulte [Habilitar e configurar notificações de eventos usando o console do Amazon S3](enable-event-notifications.md). 

Você também pode conceder permissões do Amazon S3 do AWS Lambda para invocar a função do Lambda. Para obter mais informações, consulte [Tutorial: uso do AWS Lambda com o Amazon S3](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) no *Guia do desenvolvedor do AWS Lambda*.

## Conceder permissões para publicar mensagens em um tópico do SNS ou em uma fila do SQS
<a name="grant-sns-sqs-permission-for-s3"></a>

Para conceder ao Amazon S3 permissões para publicar mensagens em um tópico do SNS ou uma fila do SQS, anexe uma política do AWS Identity and Access Management (IAM) ao tópico do SNS ou à fila do SQS de destino. 

Para obter um exemplo de como anexar uma política a um tópico do SNS ou a uma fila do SQS, consulte [Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS)](ways-to-add-notification-config-to-bucket.md). Para obter mais informações sobre permissões, consulte os tópicos a seguir:
+ [Exemplos de casos de controle de acesso do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/AccessPolicyLanguage_UseCases_Sns.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*
+ [Gerenciamento de identidade e acesso no Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html) no *Guia do desenvolvedor do Amazon Simple Queue Service*

### Política do IAM para um tópico do SNS de destino
<a name="sns-topic-policy"></a>

Veja a seguir um exemplo de uma política do AWS Identity and Access Management (IAM) anexada ao tópico do SNS de destino. Para obter mais instruções sobre como usar essa política para configurar um tópico do Amazon SNS de destino para notificações de eventos, consulte [Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do 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 do IAM para uma fila do SQS de destino
<a name="sqs-queue-policy"></a>

Veja a seguir um exemplo de uma política do IAM anexada à fila do SQS de destino. Para obter mais instruções sobre como usar essa política para configurar uma fila do Amazon SQS de destino para notificações de eventos, consulte [Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS)](ways-to-add-notification-config-to-bucket.md).

Para usar essa política, você deve atualizar o ARN da fila do Amazon SQS, o nome do bucket e o ID da Conta da AWS do proprietário do 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 as políticas do IAM do Amazon SNS e do Amazon SQS, você pode especificar a condição `StringLike` na política, em vez da condição `ArnLike`.

Quando o `ArnLike` é usado, os elementos partição, serviço, ID da conta, tipo de recurso e ID parcial do recurso do ARN devem corresponder exatamente ao ARN no contexto da solicitação. Somente a região e o caminho do recurso permitem a correspondência parcial.

 Quando `StringLike` é usado em vez de `ArnLike`, a correspondência ignora a estrutura do ARN e permite a correspondência parcial, independentemente da parte que foi substituída pelo curinga. Para obter mais informações, consulte [Elementos de política JSON do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) no *Guia do usuário do IAM*.

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

### Política de chave do AWS KMS
<a name="key-policy-sns-sqs"></a>

Se a fila do SQS ou os tópicos do SNS estiverem criptografados com uma chave gerenciada pelo cliente do AWS Key Management Service (AWS KMS), será necessário conceder permissão para que a entidade de serviço do Amazon S3 trabalhe com a fila ou os tópicos criptografados. Para conceder a permissão à entidade de serviço do Amazon S3, adicione a instrução a seguir à política de chave para a chave gerenciada pelo 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 obter mais informações sobre políticas de chave do AWS KMS, consulte [Uso de políticas de chave no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) no *Guia do desenvolvedor do AWS Key Management Service*. 

Para obter mais informações sobre como usar a criptografia no lado do servidor com o AWS KMS para o Amazon SQS e o Amazon SNS, consulte:
+ [Gerenciamento de chaves](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*.
+ [Gerenciamento de chaves](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html) no *Guia do desenvolvedor do Amazon Simple Queue Service*.
+ [Criptografia de mensagens publicadas no Amazon SNS com o AWS KMS](https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/) no *Blog de computação da AWS*.

# Habilitar e configurar notificações de eventos usando o console do Amazon S3
<a name="enable-event-notifications"></a>

Você pode habilitar certos eventos de bucket de uso geral do Amazon S3 para enviar uma mensagem de notificação a um destino sempre que ocorrer um desses eventos. Esta seção explica como usar o console do Amazon S3 para habilitar notificações de evento. Para obter informações sobre como usar notificações de eventos com os AWS SDKs e as APIs REST do Amazon S3, consulte [Configuração de notificações de eventos de forma programática](how-to-enable-disable-notification-intro.md#event-notification-configuration). 

**Pré-requisitos**: antes de habilitar as notificações de eventos para seu bucket, você deve configurar um dos tipos de destino e, em seguida, configurar permissões. Para obter mais informações, consulte [Destinos de eventos suportados](notification-how-to-event-types-and-destinations.md#supported-notification-destinations) e [Conceder permissões para publicar mensagens de notificação de vento a um destino](grant-destinations-permissions-to-s3.md).

**nota**  
As filas FIFO (primeiro entrar, primeiro a sair) do Amazon Simple Queue Service não são compatíveis como destino de notificação de evento do Amazon S3. Para enviar uma notificação de um evento do Amazon S3 para uma fila FIFO do Amazon SQS, você pode usar o Amazon EventBridge. Para obter mais informações, consulte [Habilitar o Amazon EventBridge](enable-event-notifications-eventbridge.md).

**Topics**
+ [Habilitar notificações do Amazon SNS, Amazon SQS ou Lambda usando o console do Amazon S3](#enable-event-notifications-sns-sqs-lam)

## Habilitar notificações do Amazon SNS, Amazon SQS ou Lambda usando o console do Amazon S3
<a name="enable-event-notifications-sns-sqs-lam"></a>

**Para habilitar e configurar notificações de evento para um bucket do S3**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets de uso geral**.

1. Na lista de buckets, escolha o nome do bucket para o qual você deseja habilitar eventos.

1. Escolha **Properties (Propriedades)**.

1. Navegue até a seção **Event Notifications (Notificações de eventos)** e escolha **Create event notification (Criar notificação de evento)**.

1. Na seção **General configuration (Configuração geral)**, especifique o nome do evento descritivo para sua notificação de evento. Opcionalmente, você também pode especificar um prefixo e um sufixo para limitar as notificações a objetos com chaves terminando nos caracteres especificados.

   1. Insira uma descrição para o **Event name (Nome do evento)**.

      Se você não inserir um nome, um identificador exclusivo global (GUID) será gerado e usado para o nome. 

   1. (Opcional) Para filtrar notificações de eventos por prefixo, insira um **Prefix** (Prefixo). 

      Por exemplo, é possível configurar um filtro de prefixo para receber notificações somente quando os arquivos são adicionados a uma pasta específica (por exemplo, `images/`). 

   1. (Opcional) Para filtrar notificações de eventos por sufixo, insira um **Suffix** (Sufixo). 

      Para obter mais informações, consulte [Configurar notificações de eventos usando filtragem de nomes de chave de objeto](notification-how-to-filtering.md). 

1. Na seção **Event types** (Tipos de evento), selecione um ou mais tipos de eventos para os quais você deseja receber notificações. 

   Para obter uma lista dos diferentes tipos de evento, consulte [Tipos de evento compatíveis com SQS, SNS e Lambda](notification-how-to-event-types-and-destinations.md#supported-notification-event-types).

1. Na seção **Destination (Destino)**, escolha o destino da notificação de evento. 
**nota**  
Antes de publicar notificações de eventos, você deve conceder à entidade principal do Amazon S3 as permissões necessárias para chamar a API relevante. Desse modo, ela pode publicar notificações em uma função Lambda, tópico do SNS ou fila SQS.

   1. Selecione o tipo de destino: **Lambda Function (Função do Lambda)**, **SNS Topic (Tópico do SNS)** ou **SQS Queue (Fila do SQS)**.

   1. Depois de escolher o tipo de destino, escolha uma função, um tópico ou uma fila na lista.

   1. Como alternativa, se você preferir especificar um nome de recurso da Amazon (ARN), selecione **Enter ARN** (Inserir ARN) e insira o ARN.

   Para obter mais informações, consulte [Destinos de eventos suportados](notification-how-to-event-types-and-destinations.md#supported-notification-destinations).

1. Escolha **Save changes** (Salvar alterações) e o Amazon S3 enviará uma mensagem de teste para o destino de notificação de evento.

## Configuração de notificações de eventos de forma programática
<a name="event-notification-configuration"></a>

Por padrão, as notificações não estão habilitadas para nenhum tipo de evento. Portanto, o sub-recurso *notification* (notificação) armazena inicialmente uma configuração vazia.

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

Para habilitar notificações para eventos de tipos específicos, você substitui o XML pela configuração apropriada que identifica os tipos de evento que deseja que o Amazon S3 publique e o destino onde deseja que os eventos sejam publicados. Para cada destino, você adiciona uma configuração correspondente de XML. 

**Para publicar mensagens de eventos em uma fila do SQS**  
Para definir uma fila do SQS como o destino de notificação para um ou mais tipos de evento, adicione o `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 mensagens de eventos em um tópico do SNS**  
Para definir um tópico do SNS como o destino de notificação para tipos de eventos específicos, adicione o `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 a função do AWS Lambda e fornecer uma mensagem de evento como um argumento**  
Para definir uma função do Lambda como o destino de notificação para tipos de evento específicos, adicione o `CloudFunctionConfiguration`.

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

**Para remover todas as notificações configuradas em um bucket**  
Para remover todas as notificações configuradas em um bucket, salve um elemento `<NotificationConfiguration/>` vazio no sub-recurso *notificação*. 

Quando o Amazon S3 detecta um evento do tipo específico, ele publica uma mensagem com as informações do evento. Para obter mais informações, consulte [Estrutura de mensagens de evento](notification-content-structure.md). 

Para obter mais informações sobre como configurar notificações de eventos, consulte os seguintes tópicos: 
+ [Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS)](ways-to-add-notification-config-to-bucket.md).
+ [Configurar notificações de eventos usando filtragem de nomes de chave de objeto](notification-how-to-filtering.md)

# Demonstração: configurar um bucket para notificações (tópico do SNS ou fila do SQS)
<a name="ways-to-add-notification-config-to-bucket"></a>

Você pode receber notificações do Amazon S3 usando o Amazon Simple Notification Service (Amazon SNS) ou o Amazon Simple Queue Service (Amazon SQS). Nesta demonstração, você adiciona uma configuração de notificação ao seu bucket usando um tópico do Amazon SNS e uma fila do Amazon SQS.

**nota**  
As filas FIFO (primeiro entrar, primeiro a sair) do Amazon Simple Queue Service não são compatíveis como destino de notificação de evento do Amazon S3. Para enviar uma notificação de um evento do Amazon S3 para uma fila FIFO do Amazon SQS, você pode usar o Amazon EventBridge. Para obter mais informações, consulte [Habilitar o Amazon EventBridge](enable-event-notifications-eventbridge.md).

**Topics**
+ [Resumo da demonstração](#notification-walkthrough-summary)
+ [Etapa 1: Criar uma fila do Amazon SQS](#step1-create-sqs-queue-for-notification)
+ [Etapa 2: Criar um tópico do Amazon SNS](#step1-create-sns-topic-for-notification)
+ [Etapa 3: Adicionar a configuração de notificação para o bucket](#step2-enable-notification)
+ [Etapa 4: Testar a configuração](#notification-walkthrough-1-test)

## Resumo da demonstração
<a name="notification-walkthrough-summary"></a>

Esta demonstração ajuda você a fazer o seguinte:
+ Publicar eventos do tipo `s3:ObjectCreated:*` em uma fila do Amazon SQS.
+ Publicar eventos do tipo `s3:ReducedRedundancyLostObject` em um tópico do Amazon SNS.

Para obter informações sobre configuração de notificação, consulte [Usar o Amazon SQS, o Amazon SNS e o Lambda](how-to-enable-disable-notification-intro.md).

Você pode executar todas essas etapas usando o console, sem escrever nenhum código. Além disso, exemplos de código que usam os AWS SDKs for Java e .NET também são fornecidos para ajudar a adicionar configurações de notificação de maneira programática.

Este procedimento inclui as seguintes etapas:

1. Crie uma fila do Amazon SQS.

   Usando o console do Amazon SQS, crie uma fila do SQS. É possível acessar todas as mensagens que o Amazon S3 envia à fila de forma programática. Porém, para esta demonstração, verifique as mensagens de notificação no console. 

   Anexe uma política de acesso à fila para conceder ao Amazon S3 permissão para postar mensagens.

1. Crie um tópico do Amazon SNS.

   Usando o console do Amazon SNS, crie um tópico do SNS e assine o tópico. Assim, todos os eventos postados nele são entregues a você. Especifique o e-mail como o protocolo de comunicações. Depois de criar um tópico, o Amazon SNS envia um e-mail. Use o link no e-mail para confirmar a assinatura do tópico. 

   Anexe uma política de acesso ao tópico para conceder ao Amazon S3 permissão para postar mensagens. 

1. Adicione a configuração de notificação a um bucket. 

## Etapa 1: Criar uma fila do Amazon SQS
<a name="step1-create-sqs-queue-for-notification"></a>

Siga as etapas para criar e assinar uma fila do Amazon Simple Queue Service (Amazon SQS).

1. Usando o console do Amazon SQS, crie uma fila. Para obter instruções, consulte [Conceitos básicos do Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html) no *Guia do desenvolvedor do Amazon Simple Queue Service*. 

1. Substitua a política de acesso que está anexada à fila pela política a seguir.

   1. No console do Amazon SQS, na lista **Queues** (Filas), escolha o nome da fila.

   1. Na guia **Access policy** (Política de acesso), escolha **Edit** (Editar).

   1. Substitua a política de acesso que está anexada à fila. Nele, forneça o ARN do Amazon SQS, o nome do bucket de origem e o ID da conta do proprietário do 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. Escolha **Salvar**.

1. (Opcional) Se a fila do Amazon SQS ou o tópico do Amazon SNS for habilitado para criptografia no lado do servidor com o AWS Key Management Service (AWS KMS), adicione a política a seguir à chave de criptografia simétrica correspondente gerenciada pelo cliente. 

   Adicione a política a uma chave gerenciada pelo cliente porque você não pode modificar a chave gerenciada pela AWS para o Amazon SQS ou 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 obter mais informações sobre como usar o SSE para o Amazon SQS e o Amazon SNS com o AWS KMS, consulte:
   + [Gerenciamento de chaves](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*.
   + [Gerenciamento de chaves](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html) no *Guia do desenvolvedor do Amazon Simple Queue Service*.

1. Anotar o ARN da fila. 

   A fila do SQS que você criou é outro recurso em sua Conta da AWS. Ele tem um nome do recurso da Amazon (ARN) exclusivo. Esse ARN será necessário na próxima etapa. O ARN tem este formato:

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

## Etapa 2: Criar um tópico do Amazon SNS
<a name="step1-create-sns-topic-for-notification"></a>

Siga as etapas para criar e assinar um tópico do Amazon SNS.

1. Usando o console do Amazon SNS, crie um tópico. Para obter instruções, consulte [Criação de um tópico do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*. 

1. Inscreva-se no tópico. Neste exercício, use o e-mail como o protocolo de comunicação. Para obter instruções, consulte [Assinatura de um tópico do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*. 

   Você receberá um e-mail solicitando a confirmação da assinatura do tópico. Confirme a assinatura. 

1. Substitua a política de acesso anexada ao tópico pela seguinte política. Nele, forneça o ARN do tópico SNS, o nome do bucket de origem e o ID da conta do proprietário do bucket.

1. Anote o ARN do tópico.

   O tópico do SNS que você criou é outro recurso em sua Conta da AWS e tem um ARN exclusivo. Você precisará desse ARN na próxima etapa. O ARN terá o seguinte formato:

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

## Etapa 3: Adicionar a configuração de notificação para o bucket
<a name="step2-enable-notification"></a>

Você pode habilitar notificações de bucket usando o console do Amazon S3 ou de forma programática usando os AWS SDKs. Escolha qualquer uma das opções para configurar notificações no bucket. Esta seção fornece exemplos de código que usam os AWS SDKs for Java e .NET.

### Opção A: habilitar notificações em um bucket usando o console
<a name="step2-enable-notification-using-console"></a>

Usando o console do Amazon S3, adicione uma configuração de notificação solicitando que o Amazon S3 faça o seguinte:
+ Publique eventos do tipo **Todos os eventos criados por objetos** na fila do Amazon SQS.
+ Publique eventos do tipo **Objeto em RRS perdido** no tópico do Amazon SNS.

Depois de salvar a configuração de notificação, o Amazon S3 posta uma mensagem de teste, que você recebe via e-mail. 

Para obter instruções, consulte [Habilitar e configurar notificações de eventos usando o console do Amazon S3](enable-event-notifications.md). 

### Opção B: habilitar notificações em um bucket usando os AWS SDKs
<a name="step2-enable-notification-using-awssdk-dotnet"></a>

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

O exemplo de código C\$1 a seguir fornece uma lista completa de códigos que adicionam uma configuração de notificação a um bucket. Você deve atualizar o código e fornecer o nome do bucket e o ARN do tópico do SNS. Para obter informações sobre como configurar e executar exemplos de código, consulte [Conceitos básicos do AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) no *Guia do desenvolvedor do AWS SDK for .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 exemplos de como configurar notificações de bucket com o AWS SDK para Java, consulte [Process S3 event notifications](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_Scenario_ProcessS3EventNotification_section.html) na *Referência de API do Amazon S3*.

------

## Etapa 4: Testar a configuração
<a name="notification-walkthrough-1-test"></a>

Agora você pode testar a configuração carregando um objeto no bucket e verificando a notificação de evento no console do Amazon SQS. Para obter instruções, consulte [Receber uma mensagem](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.htmlReceiveMessage.html) na *seção “Conceitos básicos” do Guia do desenvolvedor do Amazon Simple Queue Service*. 

# Configurar notificações de eventos usando filtragem de nomes de chave de objeto
<a name="notification-how-to-filtering"></a>

Ao configurar uma notificação de evento do Amazon S3, você deve especificar quais tipos de evento suportados do Amazon S3 fazem com que o Amazon S3 envie a notificação. Se um tipo de evento que você não especificou ocorrer no bucket do S3, o Amazon S3 não enviará a notificação.

Você pode configurar as notificações para serem filtradas pelo prefixo e pelo sufixo do nome da chave de objetos. Por exemplo, é possível definir uma configuração para que uma notificação seja enviada para você apenas quando arquivos de imagem com uma extensão de nome de arquivo "`.jpg`" forem adicionados a um bucket. Ou ter uma configuração que entregue uma notificação a um tópico do Amazon SNS quando um objeto com o prefixo "`images/`" for adicionado ao bucket, e fazer com que notificações para objetos com um prefixo "`logs/`" no mesmo bucket sejam entregues a uma função do AWS Lambda. 

**nota**  
Um caractere curinga (“\$1”) não pode ser usado em filtros como um prefixo ou sufixo. Se seu prefixo ou sufixo contiver um espaço, você deverá substituí-lo pelo caractere “\$1”. Se você usar qualquer outro caractere especial no valor do prefixo ou sufixo, deverá inseri-los no [formato codificado em URL (codificado em porcentagem)](https://en.wikipedia.org/wiki/Percent-encoding). Para obter uma lista completa de caracteres especiais que devem ser convertidos em formato codificado em URL quando usados em um prefixo ou sufixo para notificações de eventos, consulte [Caracteres seguros](object-keys.md#object-key-guidelines-safe-characters).

É possível definir configurações de notificação que usem filtro de nomes de chaves de objetos no console do Amazon S3. Você pode fazer isso usando as APIs do Amazon S3 por meio dos AWS SDKs ou das APIs REST diretamente. Para obter informações sobre como usar a interface do usuário do console para definir uma configuração de notificação em um bucket, consulte [Habilitar e configurar notificações de eventos usando o console do Amazon S3](enable-event-notifications.md). 

O Amazon S3 armazena a configuração de notificação como XML no sub-recurso *notificação* associado a um bucket, conforme descrito em [Usar o Amazon SQS, o Amazon SNS e o Lambda](how-to-enable-disable-notification-intro.md). Use a estrutura XML do `Filter` para definir regras para que as notificações sejam filtradas pelo prefixo ou pelo sufixo do nome da chave de um objeto. Para obter informações sobre a estrutura XML `Filter`, consulte [Notificação de PUT Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html) na *Referência da API do Amazon Simple Storage Service*. 

Configurações de notificação que usam o `Filter` não podem definir regras de filtragem com prefixos sobrepostos, sufixos sobrepostos ou prefixos e sufixos sobrepostos. As seções a seguir têm exemplos de configurações de notificação válidas com filtragem de nome de chave de objeto. Elas também contêm exemplos de configurações de notificação que não são válidas devido à sobreposição de prefixo e sufixo. 

**Topics**
+ [Exemplos de configurações válidas de notificação com filtragem de nome de chave de objeto](#notification-how-to-filtering-example-valid)
+ [Exemplos de configurações de notificação com sobreposição inválida de prefixo e sufixo](#notification-how-to-filtering-examples-invalid)

## Exemplos de configurações válidas de notificação com filtragem de nome de chave de objeto
<a name="notification-how-to-filtering-example-valid"></a>

A configuração de notificação a seguir contém uma configuração de fila que identifica uma fila do Amazon SQS para a qual o Amazon S3 publica eventos do tipo `s3:ObjectCreated:Put`. Os eventos são publicados sempre que um objeto que tenha um prefixo `images/` e um sufixo `jpg` é PUT em um 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>
```

A configuração de notificação a seguir tem vários prefixos não sobrepostos. A configuração define que as notificações para solicitações PUT na pasta `images/` vão para a fila A, enquanto as notificações para solicitações PUT na pasta `logs/` vão para a fila 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>
```

A configuração de notificação a seguir tem vários sufixos não sobrepostos. A configuração define que todas as imagens `.jpg` recém-adicionadas ao bucket sejam processadas por cloud-function-A do Lambda e que todas as imagens `.png` recém-adicionadas sejam processadas por cloud-function-B. Os sufixos `.png` e `.jpg` não se sobrepõem, apesar de terminarem com a mesma letra. Dois sufixos são considerados sobrepostos se determinada string puder terminar com ambos os sufixos. Uma string não pode terminar com `.png` e com `.jpg`, então os sufixos na configuração de exemplo não são sufixos sobrepostos. 

```
<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>
```

As configurações de notificação que usam o `Filter` não podem definir regras de filtro com prefixos sobrepostos para os mesmos tipos de evento. Eles só podem fazer isso se os prefixos sobrepostos forem usados com sufixos que não são sobrepostos. A configuração de exemplo a seguir mostra como objetos criados com um prefixo comum, mas com sufixos não sobrepostos, podem ser entregues a destinos diferentes.

```
<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>
```

## Exemplos de configurações de notificação com sobreposição inválida de prefixo e sufixo
<a name="notification-how-to-filtering-examples-invalid"></a>

Na maioria das vezes, as configurações de notificação que usam `Filter` não podem definir regras de filtro com prefixos sobrepostos, sufixos sobrepostos ou combinações sobrepostas de prefixos e sufixos para os mesmos tipos de evento. Você pode ter prefixos sobrepostos, desde que os sufixos não se sobreponham. Para ver um exemplo, consulte [Configurar notificações de eventos usando filtragem de nomes de chave de objeto](#notification-how-to-filtering).

Você pode usar filtros de nomes de chave de objetos sobrepostos com diferentes tipos de evento. Por exemplo, você poderia criar uma configuração de notificação que usasse o prefixo `image/` para o tipo de evento `ObjectCreated:Put` e o prefixo `image/` para o tipo de evento `ObjectRemoved:*`. 

Você receberá um erro se tentar salvar uma configuração de notificação que tenha filtros de nomes sobrepostos inválidos para os mesmos tipos de evento ao usar o console ou a API do Amazon S3. Esta seção mostra exemplos de configurações de notificação que não são válidas devido aos filtros de nomes sobrepostos. 

Presume-se que qualquer regra de configuração de notificação tenha um prefixo e um sufixo padrão que correspondam a qualquer outro prefixo e um sufixo, respectivamente. A configuração de notificação a seguir não é válida porque tem prefixos sobrepostos. Especificamente, o prefixo raiz sobrepõe qualquer outro prefixo. O mesmo se aplica se você usar um sufixo em vez de um prefixo neste exemplo. O sufixo raiz sobrepõe qualquer outro sufixo.

```
<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>
```

A configuração de notificação a seguir não é válida porque tem sufixos sobrepostos. Dois sufixos são considerados sobrepostos se determinada string puder terminar com ambos os sufixos. Uma string pode terminar com `jpg` e `pg`. Portanto, os sufixos se sobrepõem. O mesmo vale para prefixos. Dois prefixos são considerados sobrepostos se determinada string puder começar com ambos os prefixos.

```
 <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
```

A configuração de notificação a seguir não é válida porque tem prefixos e sufixos sobrepostos. 

```
<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>
```

# Estrutura de mensagens de evento
<a name="notification-content-structure"></a>

A mensagem de notificação que o Amazon S3 envia para publicar um evento tem o formato JSON.

Para obter uma visão geral e instruções sobre como configurar notificações de eventos, consulte [Notificações de eventos do Amazon S3](EventNotifications.md).

Este exemplo mostra a *versão 2.1* da estrutura JSON de notificações de eventos. O Amazon S3 usa as *versões 2.1*, *2.2* e *2.3* desta estrutura de evento. O Amazon S3 usa a versão 2.2 para notificações de eventos de replicação entre regiões. Utiliza a versão 2.3 para o S3 Lifecycle, S3 Intelligent-Tiering, ACL de objeto, marcação de objetos e eventos de exclusão de restauração de objetos. Essas versões contêm informações adicionais específicas para essas operações. As versões 2.2 e 2.3 são compatíveis com a versão 2.1, que o Amazon S3 usa atualmente para outros tipos de notificação 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"
            }
         }
      }
   ]
}
```

Sobre a estrutura de mensagens de evento, observe:
+ O valor da chave `eventVersion` contém uma versão principal e secundária no formulário `major`.`minor`.

  A versão principal será incrementada se o Amazon S3 fizer uma alteração na estrutura do evento que não seja compatível com versões anteriores. Isso inclui remover um campo JSON que já está presente ou alterar como os conteúdos de um campo são representados (por exemplo, um formato de data).

  A versão secundária será incrementada se o Amazon S3 adicionar novos campos à estrutura do evento. Isso pode ocorrer se forem fornecidas novas informações para alguns ou todos os eventos existentes. Isso também pode ocorrer se novas informações forem fornecidas apenas para tipos de evento recém-introduzidos. Para manter a compatibilidade novas versões secundárias da estrutura de eventos, recomendamos que suas aplicações ignorem novos campos.

  Se novos tipos de evento forem introduzidos, mas a estrutura de eventos não for modificada, a versão do evento não será alterada.

  Para garantir que seus aplicativos possam analisar a estrutura do evento corretamente, recomendamos que você faça uma comparação "igual a" no número da versão principal. Para garantir que os campos esperados por sua aplicação estejam presentes, também recomendamos fazer uma comparação “maior que ou igual a” na versão secundária.
+ O valor de chave `eventName` faz referência à lista de [tipos de notificação de eventos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinations.html), mas não contém o prefixo `s3:`.
+ O valor de chave `userIdentity` faz referência ao ID exclusivo do recurso do AWS Identity and Access Management (IAM) (usuário, perfil, grupo etc.) que causou o evento. Para obter uma definição de cada prefixo de identificação do IAM (por exemplo, AIDA, AROA e AGPA) e informações sobre como obter um identificador exclusivo, consulte [Identificadores do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html##identifiers-unique-ids) no *Guia do usuário do IAM*.
+ O valor da chave `responseElements` será útil se você quiser rastrear uma solicitação acompanhando o AWS Support. Tanto o `x-amz-request-id` quanto o `x-amz-id-2` ajudam o Amazon S3 a rastrear uma solicitação individual. Esses valores são os mesmos que os retornados pelo Amazon S3 na resposta à solicitação que inicia os eventos. Portanto, você pode usar esses valores para estabelecer correspondência entre o evento e a solicitação.
+ O valor de chave `s3` fornece informações sobre o bucket e objeto envolvidos no evento. O valor do nome da chave de objetos é codificado para URL. Por exemplo, `red flower.jpg` torna-se `red+flower.jpg`. (O Amazon S3 exibe “`application/x-www-form-urlencoded`” como o tipo de conteúdo na resposta.)

  O valor de chave `ownerIdentity` corresponde ao ID do cliente de varejo da Amazon (Amazon.com) do proprietário do bucket. Esse valor de ID não é mais usado e é mantido somente para fins de compatibilidade retroativa. 
+ O valor de chave `sequencer` oferece uma maneira de determinar a sequência de eventos. Não há garantia de que as notificações de evento cheguem na mesma ordem em que os eventos ocorreram. No entanto, as notificações de eventos que criam objetos (solicitações `PUT`) e excluem objetos contêm um `sequencer`. É possível usar esse valor para determinar a ordem dos eventos de determinada chave de objeto. 

  Se você comparar a sequências do `sequencer` nas duas notificações de evento na mesma chave de objeto, a notificação de evento com o valor hexadecimal `sequencer` maior será o evento que ocorreu depois. Se você estiver usando notificações de evento para manter um banco de dados ou um índice separado dos objetos do Amazon S3, recomendamos comparar e armazenar os valores de `sequencer` ao processar cada notificação de evento. 

  Observe o seguinte:
  + Não é possível usar `sequencer` para determinar a ordem de eventos em chaves de objetos diferentes.
  + As strings `sequencer` podem ter tamanhos diferentes. Portanto, para comparar esses valores, primeiro preencha zeros à esquerda do menor valor e, em seguida, faça uma comparação lexicográfica.
+ O valor de chave `glacierEventData` só está visível para eventos `s3:ObjectRestore:Completed`. 
+ O valor de chave `restoreEventData` contém atributos que estão relacionados à solicitação de restauração.
+ O valor de chave `replicationEventData` só é visível para eventos de replicação.
+ O valor de chave `intelligentTieringEventData` só fica visível para eventos do S3 Intelligent-Tiering.
+ O valor de chave `lifecycleEventData` só fica visível para eventos de transição do Ciclo de Vida do S3.

## Exemplos de mensagens
<a name="notification-content-structure-examples"></a>

Veja a seguir exemplos de mensagens de notificação de eventos do Amazon S3.

**Mensagem de teste do Amazon S3**  
Depois que você configura uma notificação de evento em um bucket, o Amazon S3 envia a mensagem de teste a seguir.

```
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**  
A mensagem `s3:TestEvent` usa um formato diferente do formato usado por notificações de eventos regulares do S3. Diferentemente de outras notificações de eventos que usam a estrutura de matriz `Records` mostrada anteriormente, o evento de teste usa um formato simplificado com campos diretos. Ao implementar o tratamento de eventos, seu código deve distinguir e lidar adequadamente com ambos os formatos de mensagem.

**Mensagem de exemplo quando um objeto é criado usando uma solicitação `PUT`**  
Veja a seguir um exemplo de mensagem que o Amazon S3 envia para publicar um evento `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. }
```

