2015-02-27 28 views
10

Tôi đang cố tạo thông báo Lambda qua CloudFormation nhưng gặp lỗi về định dạng ARN không chính xác.AWS Lambda S3 Bucket Thông báo qua CloudFormation

CloudFormation của tôi là sai hoặc không hỗ trợ bản xem trước Lambda.

{ 
    "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" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Nhưng khi tôi đẩy mạnh CloudFormation này tôi nhận được thông báo:

The ARN is not well formed 

Có ai có ý tưởng như những điều này có nghĩa? Tôi biết ví dụ trên đã được sửa đổi để không sử dụng thực tế ARN của tôi, nhưng trong mã thực tế của tôi, tôi đã sao chép ARN trực tiếp từ GUI. Ngoài ra, thú vị là tôi đã có thể tạo thông báo qua bảng điều khiển AWS và vì vậy tôi cho rằng AWS CloudFormation chưa hỗ trợ tính năng này (mặc dù điều đó không rõ ràng lắm, tôi không nghĩ khi đọc tài liệu này).

Trả lời

2

Từ the docs:

Amazon SNS chủ đề mà Amazon S3 báo cáo các sự kiện cụ thể.

Dường như mặc dù S3 supports sending events to Lambda, CloudFormation chưa bắt kịp. Nó mong đợi một ARN SNS nơi bạn đang cung cấp một hàm ARN Lambda.

Hiện tại, có vẻ như bạn sẽ phải kết nối thông báo sự kiện theo cách thủ công.

+0

Bạn có thể sử dụng boto3 để nối nó, nhưng hãy nhớ rằng bạn cần một ['lambda.add_permission()'] (http: // boto3. readthedocs.org/en/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

Dường như điều này được hỗ trợ ngay bây giờ. Tôi đã thêm một câu trả lời mới với các liên kết đến tài liệu liên quan. –

21

Dường như AWS hiện đã phát hành hỗ trợ thông báo cho các hàm lambda trực tiếp trong CloudFormation.

Định nghĩa S3 NotificationConfiguration chỉ được sử dụng để bao gồm TopicConfigurations nhưng đã được cập nhật để bao gồm LambdaConfigurations.

Sau khi thêm cấu hình NoficationConfiguration, đảm bảo bạn bao gồm tài nguyên Lambda::Permission để S3 được phép thực thi hàm lambda của bạn. Dưới đây là một quyền mẫu có thể được sử dụng làm mẫu:

"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

Siêu hữu ích. Đây là một trong những điều được viết ít tài liệu nhất trong CloudFormation. – BKH

+1

@BKH Không sử dụng "tài liệu tốt" và "CloudFormation" trong cùng một câu một mâu thuẫn? –

+0

Do đó, "ít nhất". Nó không tuyệt vời, nhưng nó không phải là khủng khiếp. – BKH

Các vấn đề liên quan