2015-02-27 16 views
10

Ich versuche, eine Lambda-Benachrichtigung über CloudFormation zu erstellen, aber einen Fehler über das ARN-Format zu erhalten, das falsch ist.AWS Lambda S3-Bucket-Benachrichtigung über CloudFormation

Entweder ist meine CloudFormation falsch oder sie unterstützt die Lambda-Vorschau noch nicht.

{ 
    "AWSTemplateFormatVersion": "2010-09-09", 
    "Parameters": { 
    "LambdaArn": { 
     "Type": "String", 
     "Default": "arn:aws:lambda:{some-region}:{some-account-id}:function:{some-fn-name}" 
    } 
    }, 
    "Resources": { 
    "EventArchive": { 
     "Type": "AWS::S3::Bucket", 
     "Properties": { 
     "NotificationConfiguration": { 
      "TopicConfigurations": [ 
      { 
       "Event": "s3:ObjectCreated:Put", 
       "Topic": { 
       "Ref": "LambdaArn" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Aber als ich diese Cloudformation bekomme ich die Meldung drücken:

The ARN is not well formed 

jemand Idee, was das bedeutet, haben funktioniert? Ich weiß, dass das obige Beispiel geändert worden ist, um meinen tatsächlichen ARN nicht zu verwenden, aber in meinem tatsächlichen Code habe ich den ARN direkt von der GUI kopiert.

Auch interessanterweise konnte ich die Benachrichtigung über die AWS-Konsole erstellen, und so nehme ich an, dass AWS CloudFormation diese Funktion noch nicht unterstützt (obwohl das nicht ganz klar ist, glaube ich nicht beim Lesen der Dokumentation)).

Antwort

2

Von the docs:

Die Amazon SNS Thema, die Amazon S3 die angegebenen Ereignisse berichtet.

Es scheint, dass, obwohl S3 supports sending events to Lambda, CloudFormation noch nicht aufgeholt hat. Es erwartet eine SNS ARN, wo Sie eine Lambda-Funktion ARN bereitstellen.

Für jetzt sieht es so aus, als müssten Sie die Ereignisbenachrichtigung manuell verbinden.

+0

können Sie verwenden boto3 es hook up, aber denken Sie daran, dass Sie eine [ 'lambda.add_permission()'] (http: // boto3. readthedocs.org/de/latest/reference/services/lambda.html#Lambda.Client.add_permission) + ['s3.BucketNotification.put()'] (http://boto3.readthedocs.org/en/latest/reference /services/s3.html#S3.BucketNotification.lambda_function_configurations) – Gabriel

+1

Sieht so aus, als ob dies jetzt unterstützt wird. Ich habe eine neue Antwort mit Links zur entsprechenden Dokumentation hinzugefügt. –

21

Es sieht so aus, als ob AWS jetzt Unterstützung für die Benachrichtigung von Lambda-Funktionen direkt in CloudFormation veröffentlicht hat.

Die S3-NotificationConfiguration-Definition, die nur TopicConfigurations enthält, wurde aktualisiert und enthält nun auch LambdaConfigurations.

Stellen Sie nach dem Hinzufügen der NoficationConfiguration sicher, dass Sie eine Ressource Lambda::Permission enthalten, damit S3 Ihre Lambda-Funktion ausführen kann. Hier ist ein Beispiel die Erlaubnis, die als Vorlage verwendet werden können:

"PhotoBucketExecuteProcessorPermission": { 
    "Type" : "AWS::Lambda::Permission", 
    "Properties" : { 
     "Action":"lambda:invokeFunction", 
     "FunctionName": { "Fn::GetAtt": [ "PhotoProcessor", "Arn" ]}, 
     "Principal": "s3.amazonaws.com", 
     "SourceAccount": {"Ref" : "AWS::AccountId" }, 
     "SourceArn": { 
      "Fn::Join": [":", [ 
       "arn","aws","s3","", "" 
       ,{"Ref" : "PhotoBucketName"}]] 
     } 
    } 
} 
+4

Super hilfreich. Dies ist eines der am wenigsten dokumentierten Dinge in CloudFormation. – BKH

+1

@BKH Verwenden Sie nicht "gut dokumentiert" und "CloudFormation" im selben Satz einen Widerspruch? –

+0

Daher die "wenigsten". Es ist nicht großartig, aber es ist nicht schrecklich. – BKH