Como configurar uma assinatura do AWS Lambda entre contas em um tópico do SNS?

5 minuto de leitura
0

Quero inscrever minha função do AWS Lambda em um tópico do Amazon Simple Notification Service (Amazon SNS) em outra conta.

Breve descrição

Usando o console do Amazon SNS, inscreva uma assinatura do AWS Lambda entre contas em um tópico do Amazon SNS.

Resolução

Pré-requisito

Antes de começar, certifique-se de que:

  • a política de recursos da função do Lambda permite que o SNS invoque a função.
  • a política de acesso ao tópico do SNS permite que o Lambda se inscreva no tópico.

Observação: o tópico do SNS reside na conta A e a função do Lambda reside na conta B.

Inscrever uma função do Lambda entre contas

Há duas maneiras possíveis de inscrever uma função do Lambda entre contas em um tópico do SNS:

  • Adicione um gatilho do SNS a partir do console do Lambda na conta B
  • Adicione a assinatura do Lambda a partir do console do SNS na conta B (a conta com a função do Lambda)

Criar os recursos

Crie um tópico do SNS na conta A:

  1. Abra o console do Amazon SNS e selecione Tópicos no painel esquerdo.
  2. Selecione Criar tópico, selecione o Tipo de tópico e, em seguida, insira o Nome do tópico.
  3. Role para baixo e selecione Criar tópico.

Permita que a conta B realize a ação de inscrição no tópico.

  1. Edite a política de acesso ao tópico para conceder permissão sns:Subscribe à conta B.
  2. Adicione a declaração de política mostrada abaixo e Salve:
{
  "Sid": "Allow-AccountB-To-Subscribe",
  "Effect": "Allow",
  "Principal": {
    "AWS": ""
  },
  "Action": "sns:Subscribe",
  "Resource": ""
}

Observação: em Entidade principal, substitua <AccountB> pelo o número da conta que possui a função do Lambda. No campo Recurso, substitua <SNSTopicARN> pelo nome do recurso da Amazon (ARN) do tópico do SNS.

Crie uma função do Lambda na conta B:

  1. Abra a página Função no console do AWS Lambda. Em seguida, selecione Criar função.
  2. Insira um Nome da função.
  3. Em Perfil de execução, selecione Criar um perfil com permissões básicas do Lambda. O Lambda criará um perfil de execução que concede à função permissão para fazer upload de logs para o Amazon CloudWatch.
  4. Role para baixo e escolha o botão Criar função.

Inscrever uma função do Lambda adicionando um gatilho no console do Lambda (opção 1)

  1. Abra a página Função no console do AWS Lambda e selecione a função criada anteriormente.
  2. Escolha o botão Adicionar gatilho.
  3. Na página de configuração do Gatilho, selecione SNS na lista suspensa.
  4. No campo Tópico do SNS, cole o ARN do tópico.
  5. Selecione o botão Adicionar.

O tópico do SNS na conta A agora pode invocar sua função do Lambda na conta B.

Teste a configuração

Execute um teste publicando uma mensagem no tópico do SNS.
Observação: quando você adiciona o gatilho a partir do console do Lambda, o Lambda adiciona automaticamente as permissões necessárias para que o Amazon SNS invoque sua função do Lambda a partir desse gatilho.

Inscrever uma função do Lambda adicionando uma assinatura a partir do console do SNS (opção 2)

Essa opção exige que você explicitamente conceda permissão à entidade principal do serviço do SNS para execução da ação lambda:InvokeFunction.

Permita que a entidade principal do serviço do SNS invoque a função do Lambda.

Na página Funções do console do Lambda, selecione a função criada anteriormente. Em seguida, conclua as seguintes etapas:

  1. Selecione a guia Configuração e, em seguida, selecione Permissões.
  2. Role para baixo até a seção Política baseada em recursos. Em seguida, selecione o botão Adicionar permissões.
  3. Selecione Serviços da AWS e selecione SNS na lista suspensa. Em seguida, preencha os campos:
    Para o ID da declaração, defina-o como AllowSNSToInvokeFunction
    Em ARN de origem, cole o ARN do tópico do SNS criado anteriormente
    Em Ação, selecione lambda:InvokeFunction
  4. Escolha Salvar.
  5. Crie a assinatura do SNS para o Lambda.

Na conta B, abra o console do Amazon SNS.

  1. No painel esquerdo, selecione Assinaturas.
  2. Escolha o botão Criar assinatura.
  3. Cole o ARN do tópico do SNS da conta A no campo ARN do tópico.
  4. Selecione AWS Lambda na lista suspensa Protocolo.
  5. Cole o ARN da função do Lambda no campo Endpoint
  6. Role para baixo e selecione o botão Criar assinatura.

Observação: não se esqueça de inscrever sua função do Lambda no tópico do SNS a partir da conta da AWS que possui a função do Lambda (conta B). Se você tentar criar a assinatura a partir da conta que possui o tópico do SNS (conta A), você receberá o seguinte erro:

Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:region:XXXXXXX:function:XXXXXXX

Informações relacionadas

Usar o AWS Lambda com o Amazon Simple Notification Service

Por que recebo um erro de autorização quando tento inscrever minha função do Lambda no meu tópico do Amazon SNS?

AWS OFICIAL
AWS OFICIALAtualizada há um ano