我正在使用无服务器编写python中的lambda功能。当在S3存储桶中创建文件时,Lambda函数将触发。lambda函数会转换文件,然后将其放入另一个存储桶中。源S3存储库是在另一个堆栈中定义的,并且目标存储桶在lambda函数的堆栈中定义。我一直在尝试找到一个示例,以查看如何在环境变量中以及lambda函数的事件中指定源存储桶?
service: Service
provider:
name: aws
runtime: python2.7
stage: ${opt:stage, 'dev'}
region: us-east-1
role: LambdaRole
functions:
LambdaFunction:
name: lambda-function
handler: handler.lambda_handler
environment:
DESTINATION_BUCKET: !Ref DestinationBucket
SOURCE_BUCKET: !Ref AnotherStack.SourceBucket # Is this correct?
event:
s3:
name: SOURCE_BUCKET # How do I reference a bucket from another stack here?
# ... other event trigger releated stuff
resources:
Resources:
LambdaRole:
Type: AWS:IAM:Role
Properties:
# .... lambda role permissions
DestinationBucket:
DeletionPolicy: Retain
Type: AWS::S3::Bucket
Properties:
AccessControl: BucketOwnerFullControl
BucketName:
!Join ['-', [destination-bucket !Ref AWS::AccountId]]
VersioningConfiguration:
Status: Suspended
source_bucket在另一个带有名称" anotherstack"的堆栈中定义。存储桶的名称为" sourcebucket"。如果可能的话,我不想在Serverless的YML中硬代码堆栈名称,而是要做类似于云形式模板提供参数的事情。因此,问题是如何在lambda的无服务器.yml中引用它。
使用触发lambda函数的SNS主题。在S3存储桶上创建事件,以触发SNS通知到主题。如果必须从多个S3存储桶中触发相同的Lambda函数,这也使其更容易。这将避免在部署时间期间避免问题,而不会使部署失败,因为无服务器中的事件在多个位置使用。