Quero que meu bucket do Amazon Simple Storage Service (Amazon S3) invoque uma função do AWS Lambda em outra conta da AWS.
Resolução
Para configurar seu bucket do Amazon S3 para que ele invoque uma função do Lambda em outra conta da AWS, conclua as seguintes etapas:
- Atualize a política de permissões baseada em recursos da sua função do Lambda para conceder permissão de invocação ao Amazon S3.
- Crie uma Notificação de Evento do Amazon S3 que invoque sua função do Lambda.
Importante: a função do Lambda deve estar na mesma Região da AWS que seu bucket do S3.
Para obter mais informações sobre como migrar funções, consulte Como faço para migrar uma função do Lambda para outra conta ou região da AWS usando o console do Lambda?
Atualize a política de permissões baseada em recursos da sua função do Lambda para conceder permissão de invocação ao Amazon S3
Console de Gerenciamento da AWS
Para atualizar a política de permissões baseada em recursos da sua função do Lambda para conceder permissão de invocação ao Amazon S3, conclua as seguintes etapas:
- Abra a página Funções no console do Lambda com a conta da AWS na qual sua função do Lambda está.
- Escolha o nome da função do Lambda que você deseja que seja invocada pelo Amazon S3.
- Na guia Configuração, escolha Permissões.
- No painel Política baseada em recursos, escolha Adicionar permissões.
- No painel Declaração de política, escolha Serviço AWS. A lista suspensa Serviço é exibida.
- Na lista suspensa Serviço, escolha S3 para ver mais campos.
- Em ID da declaração, insira um ID de declaração exclusivo para diferenciar a declaração que você criar dentro da política.
- Em Conta de origem, insira o ID da conta da AWS da conta que hospeda seu bucket do S3.
- Em ARN Fonte, insira o ARN do seu bucket do S3. Use o seguinte formato:
arn:aws:s3:::bucket_name
Observação: substitua o bucket_name pelo nome do seu bucket do S3.
- Em Ação, selecione lambda:InvokeFunction na lista suspensa.
- Escolha Salvar.
Para obter mais informações, consulte Trabalhando com políticas baseadas em recursos no Lambda.
AWS CLI
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Atualize a política de permissões baseada em recursos da sua função do Lambda para conceder permissão de invocação ao Amazon S3 com a API add-permission semelhante à seguinte:
aws lambda add-permission \--function-name LambdaFunction_name \
--action lambda:InvokeFunction \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::bucket_name \
--source-account account-id \
--statement-id "unique_statement_ID"
Observação: substitua LambdaFunction_name, bucket_name e unique_statement\ _ID por suas variáveis.
Crie uma Notificação de Evento do Amazon S3 que invoque sua função do Lambda
Console de Gerenciamento da AWS
Siga as instruções para ativar e configurar as Notificações de Evento usando o console do Amazon S3.
AWS CLI
Para criar uma Notificação de Evento do Amazon S3 que invoque sua função do Lambda, use o comando put-bucket-notification-configuration.
Importante: antes de usar o comando put-bucket-notification, verifique se você não tem nenhuma outra Notificação de Evento configurada em seu bucket do S3. O comando put-bucket-notification-configuration executa uma operação de substituição em qualquer configuração de notificação existente em vez de anexar.
Para verificar se seu bucket já tem Notificações de Evento, execute o seguinte comando:
aws s3api get-bucket-notification-configuration --bucket bucket_name
Se o comando anterior retornar um objeto JSON vazio ou nenhuma resposta, você não tem nenhuma configuração de Notificação de Evento existente. Crie e salve um novo arquivo chamado notification.json com a seguinte configuração:
{
"LambdaFunctionConfigurations": [
{
"Id": "my-lambda-function-s3-event-configuration",
"LambdaFunctionArn": "LambdaFunction_ARN",
"Events": [ "s3:ObjectCreated:" ],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "prefix"|"suffix",
"Value": "string"
}
]
}
}
}
]
}
Observação: substitua LambdaFunction_ARN pelo ARN da sua função do Lambda. Substitua o prefixo e o sufixo pelas suas variáveis da regra de filtro.
Se o get-bucket-notification-configuration retornar um JSON de configuração de Notificação de Evento existente, salve a configuração JSON existente como um arquivo chamado notification.json. Adicione sua nova configuração de notificação do Lambda a uma chave LambdaFunctionConfigurations existente ou crie uma nova chave com a sintaxe JSON mostrada no exemplo a seguir. Adicione a chave ao arquivo notification.json:
{
... # Non Lambda event configurations like SNS, SQS etc. ,
"LambdaFunctionConfigurations": [
{
"Id": "my-lambda-function-s3-event-configuration",
"LambdaFunctionArn": "LambdaFunction_ARN",
"Events": [ "s3:ObjectCreated:" ],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "prefix"|"suffix",
"Value": "string"
}
]
}
}
},
{...}, #Other pre-existing Lambda Function configurations
]
}
Depois de criar o notification.json, execute o seguinte comando para atualizar sua configuração de Notificação de Evento do S3:
aws s3api put-bucket-notification-configuration \
--bucket bucket_name \
--notification-configuration file://notification.json
Observação: substitua o bucket_name pelo nome do seu bucket do S3.
Teste a função do Lambda
Para testar a função do Lambda com o console do Lambda, consulte Teste sua função do Lambda com um evento fictício. Se sua função não for invocada pela Notificação de Evento, consulte Por que minha Notificação de Evento do Amazon S3 não invoca minha função do Lambda?
Informações relacionadas
Como faço para permitir que minha função do Lambda acesse meu bucket do Amazon S3?
Por que recebo o erro “Unable to validate the following destination configurations” quando crio uma Notificação de Evento do Amazon S3?