将其他堆栈中的资源用作无服务器lambda功能中的环境变量



我正在使用无服务器编写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函数,这也使其更容易。这将避免在部署时间期间避免问题,而不会使部署失败,因为无服务器中的事件在多个位置使用。

最新更新