【问题标题】:Working with S3 buckets having no BucketName in AWS Lambda在 AWS Lambda 中使用没有 BucketName 的 S3 存储桶
【发布时间】:2022-01-16 00:03:19
【问题描述】:

由于 S3 存储桶名称的全局唯一性要求,在 AWS::S3::Bucket 资源中使用可选的 BucketName 属性是有问题的。本质上,如果我坚持使用BucketName,我需要某种方式在此处附加 GUID。

如果我完全省略 BucketName 属性,我可以避免这种痛苦,因此 CloudFormation 可以可靠地为我生成一个唯一的名称。

但是,我面临另一个问题:如何在 AWS Lambda/SAM/serverless.com/other 代码中使用这个随机存储桶名称?我知道 CloudFormation 模板可以导出名称,但是如何将其传递给 Lambda 代码?

是否有在 AWS Lambda 中使用 CloudFormation 导出的标准/推荐方式?该问题并非 S3 独有 - 例如,AWS Amplify 也使用随机生成的 DynamoDB 表名。

【问题讨论】:

  • 将生成的名称保存到 SSM 参数存储中,并在使用 Lambda 时从那里读取值。

标签: amazon-web-services amazon-s3 aws-lambda aws-amplify


【解决方案1】:
  • 如果您的 Lambda 是通过 CloudFormation 创建的,您可以使用 Environment variablesSAMCloudFormation 中的环境键)传递存储桶名称。如果存储桶属于同一规范,您可以使用 !Ref 引用存储桶名称,如果使用不同的堆栈,则可以使用 cross stack references。如果您使用跨堆栈引用,则在删除对它的所有引用之前,您将无法修改或删除原始堆栈中的输出值。如果您使用的是 Ref,则如果存储桶名称发生更改,Lambda 也会更新。
  • 如果您的 Lambda 不是通过 CloudFormation 创建的,您可以使用 Ervin 在他的评论中提到的 SSM 参数存储。您可以创建一个SSM Parameter 并在您的 Lambda 代码中读取它的值。

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 2019-07-27
    • 1970-01-01
    • 2020-07-05
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多