簡體   English   中英

無法使用 boto3 為 lambda 添加 s3 通知

[英]Can't add s3 notification for lambda using boto3

我想使用 boto3 配置一個 s3 存儲桶,以便每次在該存儲桶中創建對象時調用 AWS lambda。 這是我的代碼:

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:調用 PutBucketNotificationConfiguration 操作時發生錯誤 (InvalidArgument):無法驗證以下目標配置

必須在 lambda 端添加權限以允許 S3 調用 lambda 函數。 請注意,如果您使用 AWS Lambda GUI 手動創建事件源映射,然后刪除事件源映射,權限仍然存在! 所以你不會得到上面的錯誤。

但是,如果從頭開始,然后嘗試添加通知,則會出現上述錯誤。

通過以下方式添加權限:

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

我以前遇到過這個問題 - 您絕對應該考慮@RAbraham 對這個問題的回答,但您可能還想檢查一件事;

檢查您的 s3 存儲桶中是否有任何事件是孤立事件,即如果 lambda 函數被刪除,您還必須刪除相應的 s3 事件(如果存在)。 如果您不這樣做並嘗試在同一存儲桶上添加/編輯任何事件,則會出現相同的錯誤。

如果 lambda 不存在,則無論您要更新哪個事件,它都無法更新整個存儲桶的通知配置,因為它本質上是原子的 ( aws-source )。

參考: https : //docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-notification-configuration.html

ANSIBLE 腳本:不要在“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}}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM