Ir para o conteúdo

Como posso 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, adicione 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 o tópico.

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

Inscreva 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)

Crie 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. Clique em Criar tópico, selecione o Tipo de tópico e, em seguida, insira o Nome do tópico.
  3. Role para baixo e clique em 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 a 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 número da sua 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, clique em Criar função.
  2. Insira um Nome da função.
  3. Em Perfil de execução, selecione Criar um novo perfil com permissões básicas do Lambda. O Lambda cria um perfil de execução que concede à função permissão para fazer upload de logs no Amazon CloudWatch.
  4. Role para baixo e clique no botão Criar função.

Inscreva 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. Clique no 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. Clique no 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

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.

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

Essa opção exige que você conceda explicitamente 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. Clique na guia Configuração e, em seguida, selecione Permissões.
  2. Role para baixo até a seção Política baseada em recursos. Em seguida, clique no botão Adicionar permissões.
  3. Selecione Serviço da AWS e clique em SNS na lista suspensa. Em seguida, preencha os campos:
    Em 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. Clique em 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. Clique no 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 clique no 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), receberá a seguinte mensagem de 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

Tutorial: usar o AWS Lambda com o Amazon Simple Notification Service

Why do I get an authorization error when I try to subscribe my Lambda function to my Amazon SNS topic? (Por que recebo um erro de autorização quando tento inscrever minha função do Lambda no meu tópico do Amazon SNS?)