[英]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.