gpt4 book ai didi

aws-cloudformation - 如何在 CloudFormation 模板中创建一些随机或唯一值?

转载 作者:行者123 更新时间:2023-12-03 16:22:52 24 4
gpt4 key购买 nike

有没有办法在 CloudFormation 模板中创建某种随机或唯一值?

为什么我需要这个。在我们的模板中,我们有许多自定义命名的资源,例如带有指定 LaunchConfigurationNameAWS::AutoScaling::AutoScalingGroup 的 AWS::AutoScaling::LaunchConfiguration 并指定 AutoScalingGroupName
在更新堆栈时,我们经常会遇到以下错误:

CloudFormation cannot update a stack when a custom-named resource requires replacing. Rename some-stack-launch-configuration and update the stack again.

我们不想仅仅因为需要更新资源就重命名它们。
我们也不想在我们的资源中删除自定义名称。不过,我们不介意在自定义名称中使用一些随机后缀。

使用“随机生成器”,解决方案可能类似于:

  MyAutoScalingGroup:
Type: 'AWS::AutoScaling::AutoScalingGroup'
Properties:
AutoScalingGroupName: !Sub 'my-auto-scaling-group-${AWS::Random}'

最佳答案

如果您只需要一个随机 ID(没有密码,没有花哨的要求),我建议的方法是使用 AWS::StackId 的一部分,其格式如下:

arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123

因此,为了获得最后一部分,您需要两次拆分,例如:

      AutoScalingGroupName:
Fn::Join:
- '-'
- - my-auto-scaling-group
- Fn::Select:
- 4
- Fn::Split:
- '-'
- Fn::Select:
- 2
- Fn::Split:
- /
- Ref: AWS::StackId

等效的较短语法:

AutoScalingGroupName: !Join ['-', ['my-auto-scaling-group', !Select [4, !Split ['-', !Select [2, !Split ['/', !Ref AWS::StackId]]]]]]

含义:

  1. AWS::StackId 开头,例如:arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
  2. 拆分 / 并选择第二部分(0 索引):51af3dc0-da77-11e4-872e-1234567db123
  3. 拆分 - 并选择第四部分(0 索引):1234567db123
  4. 使用您的固定部分名称加入:my-auto-scaling-group-1234567db123

优点:与创建 CustomResource 相比,我更喜欢这种方式,因为对于大型 AWS 环境和许多堆栈,您最终可能会使用多个 lambda,从而使治理变得更加困难。

缺点:它更详细( Fn::JoinFn::SelectFn::Split )。

编辑 2022 年 2 月 17 日:

正如 @teuber789 的评论所观察到的,如果您需要相同类型的多个资源,例如: my-auto-scaling-group-<random_1>my-auto-scaling-group-<random_2> ,则此方法将不起作用,因为 AWS::StackId 对于整个堆栈来说是相同的。

关于aws-cloudformation - 如何在 CloudFormation 模板中创建一些随机或唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com