Yas*_*son 9 amazon-s3 aws-cloudformation
我想创建一个云形成模板,该模板创建一个具有人类可读名称的 S3 存储桶,但可以自动运行多次。下面是一个带有预定义名称的存储桶。
除了随机的唯一 id 之外,我还能做些什么来使名称包含人类可读的部分?类似的东西:MyBucket-abcdabcd
, MyBucket-efghefgh
, MyBucket-ijklijkl
。
"S3Bucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"BucketName": "MyBucket",
"PublicAccessBlockConfiguration" : {
"BlockPublicAcls" : true,
"BlockPublicPolicy" : true
}
}
}
Run Code Online (Sandbox Code Playgroud)
Phi*_*son 15
谢谢沉睡者史密斯。这是一个很好的答案,我一直在寻找解决方案有一段时间了!
tl;博士
下面的 yaml CloudFormation 返回“bucket-with-semi-random-name-51af3dc0”
BucketWithSemiRandomName:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Join
- "-"
- - "bucket-with-semi-random-name"
- !Select
- 0
- !Split
- "-"
- !Select
- 2
- !Split
- "/"
- !Ref "AWS::StackId"
Run Code Online (Sandbox Code Playgroud)
Sleeper Smith 提供的代码示例中存在轻微的索引错误。您将需要替换选择索引,如下所示。
使用相同的示例堆栈 ARN 作为原始答案...
arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
Run Code Online (Sandbox Code Playgroud)
!Select [2, !Split [/, !Ref AWS::StackId ]]
Run Code Online (Sandbox Code Playgroud)
上面的代码示例从 Stack ARN "51af3dc0-da77-11e4-872e-1234567db123" 返回 UUID(索引 2)
!Select [0, !Split[-, !Select [2, !Split [/, !Ref AWS::StackId ]]]]
Run Code Online (Sandbox Code Playgroud)
上面的代码示例从堆栈 ARN "51af3dc0" 返回 UUID 的第一段(索引 0)
这是我现在根据Sleeper Smith 的回答使用的结果 yaml 。我结合了一个 !Join 来为存储桶名称提供更多上下文。
BucketWithSemiRandomName:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Join
- "-"
- - "bucket-with-semi-random-name"
- !Select
- 0
- !Split
- "-"
- !Select
- 2
- !Split
- "/"
- !Ref "AWS::StackId"
Run Code Online (Sandbox Code Playgroud)
以上代码示例返回“bucket-with-semi-random-name-51af3dc0”
你有两个选择。
第一个选项 - 您可以将 BucketName 属性留空。当你把它留空时,它会产生一个名称:<stackname>-<template logical name>-<random suffix>
因此,如果您有有意义的堆栈名称和模板逻辑名称,它应该每次都为您提供一个唯一的存储桶名称。
第二个选项 - 使用 Stack ARN 后缀,它是一个随机 guid:arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
!Select [2, !Split [/, !Ref AWS::StackId ]]
Run Code Online (Sandbox Code Playgroud)
这将产生 '51af3dc0-da77-11e4-872e-1234567db123' 您可以进一步拆分它并根据需要选择一部分。
!Select [0, !Split[-, !Select [2, !Split [/, !Ref AWS::StackId ]]]]
Run Code Online (Sandbox Code Playgroud)
给你 51af3dc0
归档时间: |
|
查看次数: |
4738 次 |
最近记录: |