2016-05-01 5 views
5

Ich möchte mit Boto3 einen S3-Bucket konfigurieren, um jedes Mal, wenn ein Objekt in diesem Bucket erstellt wird, ein AWS-Lambda aufzurufen. Hier ist mein Code:Kann keine s3-Benachrichtigung für Lambda mit Boto3 hinzufügen

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:*' 
       ], 

     }, 
]}) 

ich den Fehler:

botocore.exceptions.ClientError: An error occurred (InvalidArgument) when calling the PutBucketNotificationConfiguration operation: Unable to validate the following destination configurations

Antwort

4

Man hat Berechtigungen für das Lambda-Ende hinzuzufügen S3 zu ermöglichen, die Lambda-Funktion aufzurufen. Vorsicht, wenn Sie die Ereignisquellenzuordnung manuell mithilfe der AWS Lambda GUI erstellen und dann die Ereignisquellzuordnung löschen, besteht die Berechtigung weiterhin! Sie erhalten also den obigen Fehler nicht.

Wenn Sie jedoch bei Null anfangen und dann versuchen, die Benachrichtigung hinzuzufügen, tritt der obige Fehler auf.

Berechtigungen werden hinzugefügt von:

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

Dank. Das hat mir Kopfschmerzen erspart. Wenn Sie CloudFormation zum Bereitstellen Ihrer Lambda-Funktion verwenden, können Sie die erforderliche Berechtigung auch direkt aus der Vorlage hinzufügen: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission .html –

+0

+1 dafür. Ran in das gleiche Problem beim Versuch, eine s3-Benachrichtigung für eine SQS-Warteschlange hinzuzufügen; Es begann zu arbeiten, nachdem ich die richtigen Berechtigungen/Politik auf dem SQS Ende hinzugefügt hatte. – 3cheesewheel