Arquivamento de mensagens do Amazon SNS para proprietários de tópicos FIFO - Amazon Simple Notification Service

Arquivamento de mensagens do Amazon SNS para proprietários de tópicos FIFO

O arquivamento de mensagens oferece a capacidade de arquivar uma única cópia de todas as mensagens publicadas no tópico. É possível armazenar mensagens publicadas no tópico habilitando a política de arquivamento de mensagens no tópico, o que permite o arquivamento de mensagens para todas as assinaturas vinculadas a esse tópico. As mensagens podem ser arquivadas por um período mínimo de 1 dia a, no máximo, 365 dias.

Há cobranças adicionais ao definir uma política de arquivamento. Para obter informações sobre preços, consulte Definição de preço do Amazon SNS.

Criar uma política de arquivamento de mensagens usando o AWS Management Console

Use essa opção para criar uma política de arquivamento de mensagens com o AWS Management Console.

  1. Faça login no console do Amazon SNS.

  2. Selecione um tópico ou crie um. Para saber mais sobre como criar tópicos, consulte Criar um tópico do Amazon SNS.

    nota

    O arquivamento e reprodução de mensagens do Amazon SNS só está disponível para tópicos FIFO de aplicação para aplicação (A2A).

  3. Na página Editar tópico, expanda a seção Política de arquivamento.

  4. Ative o recurso Política de arquivamento e insira o número de dias durante os quais você deseja arquivar mensagens no tópico.

  5. Escolha Save changes (Salvar alterações).

Como visualizar, editar e desativar uma política de tópico de arquivamento de mensagens

  • Na página Detalhes do tópico, a Política de retenção exibe o status da política de arquivamento, incluindo o número de dias para os quais ela está definida. Selecione a guia Política de arquivamento para ver os seguintes detalhes do arquivamento de mensagens:

    • Status: o status de arquivamento e reprodução aparece como ativo quando uma política de arquivamento é aplicada. O status de arquivamento e reprodução aparece como inativo quando a política de arquivamento é definida como um objeto JSON vazio.

    • Período de retenção de mensagens: o número especificado de dias de retenção de mensagens.

    • Data de início do arquivamento: a data a partir da qual os assinantes podem reproduzir as mensagens.

    • Pré-visualização de JSON: a pré-visualização JSON da política de arquivamento.

  • (Opcional) Para editar uma política de arquivamento, acesse a página de resumo do tópico e selecione Editar.

  • (Opcional) Para desativar uma política de arquivamento, acesse a página de resumo do tópico e selecione Editar. Desative a Política de arquivamento e selecione Salvar alterações.

  • (Opcional) Para excluir um tópico com uma política de arquivamento, é necessário primeiro desativar a política de arquivamento conforme descrito anteriormente.

    Importante

    Para evitar exclusões acidentais de mensagens, você não pode excluir um tópico com uma política de arquivamento de mensagens ativa. A política de arquivamento de mensagens do tópico deve ser desativada para que o tópico possa ser excluído. Quando você desativa uma política de arquivamento de mensagens, o Amazon SNS exclui todas as mensagens arquivadas. Ao excluir um tópico, as assinaturas são removidas e nenhuma mensagem em trânsito pode ser entregue.

Criar uma política de arquivamento de mensagens usando a API

Para criar uma política de arquivamento de mensagens com a API, é necessário adicionar o atributo ArchivePolicy ao tópico. É possível definir uma ArchivePolicy usando as ações da API CreateTopic e SetTopicAttributes. A ArchivePolicy tem um valor único, MessageRetentionPeriod, que representa o número de dias pelos quais o Amazon SNS retém as mensagens. Para ativar o arquivamento de mensagens para o tópico, defina o MessageRetentionPeriod como um valor inteiro maior que zero. Por exemplo, para reter mensagens em seu arquivo por 30 dias, defina a ArchivePolicy como:

{ "ArchivePolicy": { "MessageRetentionPeriod": "30" } }

Para desativar o arquivamento de mensagens do tópico e limpar o arquivo, cancele a definição da ArchivePolicy da seguinte forma:

{}

Criar uma política de arquivamento de mensagens usando o SDK

Para usar um AWS SDK, configure-o com suas credenciais. Para obter mais informações, consulte Arquivos config e credentials compartilhados no Guia de referência de AWS SDKs e ferramentas.

O exemplo de código a seguir mostra como definir a ArchivePolicy para um tópico do Amazon SNS com o objetivo de reter todas as mensagens publicadas no tópico por 30 dias.

// Specify the ARN of the Amazon SNS topic to set the ArchivePolicy for. String topicArn = "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo"; // Set the MessageRetentionPeriod to 30 days for the ArchivePolicy. String archivePolicy = "{\"MessageRetentionPeriod\":\"30\"}"; // Set the ArchivePolicy for the Amazon SNS topic SetTopicAttributesRequest request = new SetTopicAttributesRequest() .withTopicArn(topicArn) .withAttributeName("ArchivePolicy") .withAttributeValue(archivePolicy); sns.setTopicAttributes(request);

Criar uma política de arquivamento de mensagens com o AWS CloudFormation

Para criar uma política de arquivamento usando o AWS CloudFormation, consulte AWS::SNS::Topic no Guia do usuário do AWS CloudFormation.

Conceder acesso a um arquivo criptografado

Para que um assinante possa começar a reproduzir mensagens de um tópico criptografado, siga as etapas abaixo. Como as mensagens passadas são reproduzidas, o Amazon SNS precisa ter acesso Decrypt provisionado à chave do KMS que foi usada para criptografar as mensagens no arquivo.

  1. Ao criptografar mensagens com uma chave do KMS e armazená-las no tópico, é necessário conceder ao Amazon SNS a capacidade de descriptografar essas mensagens por meio da política de chave. Para saber mais, consulte Conceder permissões de descriptografia ao Amazon SNS.

  2. Habilite o AWS KMS para o Amazon SNS. Para saber mais, consulte Configurar permissões do AWS KMS.

Importante

Quando você adicionar as novas seções à política de chave do KMS, não altere as seções existentes na política. Se a criptografia estiver habilitada em um tópico e a chave do KMS estiver desabilitada ou tiver sido excluída, ou a política de chave do KMS não estiver configurada corretamente para o Amazon SNS, o Amazon SNS não poderá reproduzir mensagens para seus assinantes.

Conceder permissões de descriptografia ao Amazon SNS

Para que o Amazon SNS acesse mensagens criptografadas de dentro do arquivo do tópico e as reproduza nos endpoints inscritos, é necessário habilitar o princípio de serviço do Amazon SNS para descriptografar essas mensagens.

Veja a seguir um exemplo da política que é necessária para permitir que a entidade principal do serviço do Amazon SNS descriptografe mensagens armazenadas durante uma reprodução de mensagens históricas do tópico.

{ "Sid": "Allow SNS to decrypt archived messages", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

Monitorar métricas de arquivo de mensagens com o Amazon CloudWatch

É possível monitorar mensagens arquivadas com o Amazon CloudWatch usando as métricas a seguir. Para receber notificação sobre anomalias nas workloads e ajudar a evitar impactos, é possível configurar os alarmes do Amazon CloudWatch com base nessas métricas. Para obter mais detalhes, consulte Registrar em log e monitorar no Amazon SNS.

Métrica Descrição

ApproximateNumberOfMessagesArchived

Fornece ao proprietário do tópico o número agregado de mensagens arquivadas no arquivo de tópicos, com resolução de 60 minutos.

ApproximateNumberOfBytesArchived

Fornece ao proprietário do tópico o número agregado de bytes arquivados, em todas as mensagens no arquivo de tópicos, com resolução de 60 minutos.

NumberOfMessagesArchiveProcessing

Fornece ao proprietário do tópico o número de mensagens salvas no arquivo do tópico durante o intervalo em resolução de 1 minuto.

NumberOfBytesArchiveProcessing

Fornece ao proprietário do tópico o número agregado de bytes salvos no arquivo do tópico durante o intervalo em resolução de 1 minuto.

A API GetTopicAttributes tem uma propriedade BeginningArchiveTime, que representa o carimbo de data e hora mais antigo no qual um assinante pode iniciar uma reprodução. O seguinte exemplo representa uma resposta para essa ação de API:

{ "ArchivePolicy": { "MessageRetentionPeriod": "<integer>" }, "BeginningArchiveTime": "<timestamp>", ... }