Не удается добавить уведомление s3 для лямбда с помощью boto3

Я хочу использовать boto3 для настройки корзины s3 для вызова лямбда-выражения AWS каждый раз, когда в этой корзине создается объект. Вот мой код:

s3 = ..boto3 resource
bucket_notification = s3.BucketNotification(bucket_name)
lambda_arn = .. arn for lambda

response = bucket_notification.put(
   NotificationConfiguration={'LambdaFunctionConfigurations': [
      {
                'LambdaFunctionArn': lambda_arn,
                'Events': [
                    's3:ObjectCreated:*'
                ],

      },
]})

Я получаю сообщение об ошибке:

botocore.exceptions.ClientError: произошла ошибка (InvalidArgument) при вызове операции PutBucketNotificationConfiguration: невозможно проверить следующие конфигурации назначения


person RAbraham    schedule 01.05.2016    source источник


Ответы (3)


Необходимо добавить разрешения на лямбда-конце, чтобы позволить S3 вызывать лямбда-функцию. Остерегайтесь: если вы вручную создадите сопоставление источников событий с помощью графического интерфейса пользователя AWS Lambda, а затем удалите сопоставление источников событий, разрешение по-прежнему существует! Таким образом, вы не получите вышеуказанную ошибку.

Однако, если вы начнете с нуля, а затем попытаетесь добавить уведомление, возникнет указанная выше ошибка.

Разрешения добавляют:

 client = ...boto3 lambda client
 response = client.add_permission(
     FunctionName=lambda_name,
     StatementId='1',
     Action='lambda:InvokeFunction',
     Principal='s3.amazonaws.com',
     SourceArn=s3_arn,
     SourceAccount='66666666666'
 )
person RAbraham    schedule 01.05.2016
comment
Спасибо. Это избавило меня от головной боли. Кроме того, если вы используете CloudFormation для развертывания своей лямбда-функции, вы можете добавить необходимое разрешение прямо из шаблона: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ - person Lee Netherton; 10.08.2016
comment
+1 за это. Возникла та же проблема, пытаясь добавить уведомление s3 для очереди SQS; он начал работать после того, как я добавил правильные разрешения / политику на конце SQS. - person 3cheesewheel; 23.08.2016

У меня была эта проблема раньше - вам обязательно стоит подумать об ответе @RAbraham на этот вопрос, но есть еще одна вещь, которую вы, возможно, захотите проверить;

Проверьте, не являются ли какие-либо события в вашей корзине s3 "сиротами", т.е. если лямбда-функция удалена, вам также придется удалить соответствующее событие s3, если оно существует. Если вы этого не сделаете и попытаетесь добавить / отредактировать какие-либо события в том же сегменте, это приведет к той же ошибке.

Если лямбда-выражение не существует, оно не может обновить конфигурацию уведомлений всего сегмента, независимо от того, какое событие вы обновляете, поскольку оно является атомарным (aws-source) в природе.

ссылка: https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-notification-configuration.html

person Chaitanya Khoje    schedule 04.12.2020

ВОЗМОЖНЫЙ СЦЕНАРИЙ: не оставляйте пробелов в значении 'event_name'



---
- name: deploy lambda
   hosts: localhost
   connection: local
   gather_facts: false 

tasks:
 - name: add lambda event notification for a bucket
     s3_bucket_notification:
       state: present
       event_name: Test1_lambda_Event_name
       bucket_name: test-private
       lambda_function_arn: arn:aws-us-xxxxxlambda
       events: ["s3:ObjectCreated:*"]
       prefix: Test_R/configuration      
     register: output 
     ignore_errors: true
     
   - name: debug output
     debug:
       msg: "output is: {{output}}"

person Rohit Tewari    schedule 29.12.2020