如何在存储桶名称中使用变量 AWS Cloudformation

Posted

技术标签:

【中文标题】如何在存储桶名称中使用变量 AWS Cloudformation【英文标题】:How to use variables in bucket names AWS Cloudformation 【发布时间】:2020-07-04 06:47:15 【问题描述】:

我正在尝试创建用于创建 S3 存储桶的 Cloudformation 模板。我想对其进行配置,以便使用传递给模板的参数之一来命名存储桶。我可以在模板中的其他位置替换参数,但是当我尝试将它分到这里时,存储桶创建失败。

Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: !Sub '$STRING_PARAM-example-bucketname'

这会在创建 cloudformation 堆栈时提供Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request。我已经尝试在有效的名称中进行硬编码,所以我很确定它是一个有效的 S3 存储桶名称。

根据S3 Creation CloudFormation results in 400 Bad Request 引用(! Ref 而不是! Sub)到参数/资源直接有效,但我想我应该能够像其他任何地方一样在这里子参数。

【问题讨论】:

嗨!请发布完整的模板,以便我们重现错误。另外,您的问题标题是“如何使用通配符存储桶名称”,但您没有在问题中提及通配符? 失败怎么办?您确定这是一个有效的存储桶名称吗? @kichik 查看编辑 堆栈事件选项卡中是否存在更具描述性的错误? 您能否在您的模板中提供STRING_PARAM 定义? 【参考方案1】:

BucketName 的值很好。这是使用 !Sub 的正确语法,应该可以使用。

问题是参数的名称必须是字母数字,所以STRING_PARAM 是无效的,因为它有一个下划线字符。

将您的参数名称更新为StringParam 之类的名称,它应该可以让您摆脱Parameter name STRING_PARAM is non alphanumeric. 错误消息。

【讨论】:

以上是关于如何在存储桶名称中使用变量 AWS Cloudformation的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 AWS S3 中是不是已存在存储桶

我只想提取 Aws s3 存储桶名称并以列表的形式显示

如何在 Terraform 变量中连接 S3 存储桶名称并将其传递给主 tf 文件

如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?

使用 Ansible 创建 AWS S3 存储桶

[AWS][安全] S3存储桶策略-Bucket Policy