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

2024-01-02

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

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

当自定义命名的资源需要替换时,CloudFormation 无法更新堆栈。重命名 some-stack-launch-configuration 并再次更新堆栈。

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

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

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

如果您只需要一个随机 ID(没有密码,没有花哨的要求),我建议的方法是使用一部分AWS::StackId https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html#cfn-pseudo-param-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]]]]]]

Meaning:

  1. 从...开始AWS::StackId, e.g.: 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::Join, Fn::Select, and Fn::Split).

编辑 2022 年 2 月 17 日:

正如 @teuber789 的评论所观察到的,如果您需要相同类型的多个资源,例如:my-auto-scaling-group-<random_1> and my-auto-scaling-group-<random_2>,这种方法不会起作用AWS::StackId整个堆栈都是一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 CloudFormation 模板中创建一些随机或唯一值? 的相关文章

随机推荐

  • 将 pfx 格式转换为 p12

    我需要导出一个 pfx将证书格式 来自 Windows MMC 转换为 p12在另一个应用程序中使用 我找不到办法做到这一点 任何人都可以建议一个方法吗 p12 and pfx都是 PKCS 12 文件 我错过了什么吗 您是否尝试过重命名导
  • 从父子表生成字符串树分支

    我有一个父子表 如下所示 child father H G F G G D E D A E B C C E 我希望 sql server 生成类似的东西 正如这个问题中所问的那样 将一系列父子关系转化为层次树 https stackover
  • Angular 2.x 在 body 标签上绑定类

    由于 Angular 2 x 是在主体内部引导的 我该如何添加 class fixed isFixed 在 body 标签上 在我的应用程序之外
  • 匹配不带引号的逗号的正则表达式

    我正在使用 Clojure 所以这是在 Java 正则表达式的上下文中 这是一个示例字符串 a ab cd efg b ab def egf c Conjecture 重要的位是每个字符串后面的逗号 我希望能够使用Java的replaceA
  • Go 中的简单工作池

    我正在尝试在 go 中实现一个简单的工作池 但不断遇到问题 我想做的就是让一定数量的工人先完成一定数量的工作 然后再做更多的工作 我正在使用的代码类似于 jobs make chan imageMessage 1 results make
  • 在 jquery 验证中实现 require_from_group

    我正在尝试获取一组输入来进行验证 因此 如果任何输入为空 它将在输入下方显示一条消息 我一直在关注另一个SO答案here https stackoverflow com a 2589646 571723 4 个输入将不会验证 当没有提交数据
  • SQL Server 2008 上 varbinary(max) 文件流的长度

    有没有一些有效的方法来获取 varbinary max filestream 列中的数据长度 我只找到了转换为 varchar 然后调用 LEN 函数的示例 SELECT length DATALENGTH Name Name FROM P
  • 如何在价格中添加尾随零?

    我有一个返回产品价格的脚本 但是 价格可能包含也可能不包含尾随零 所以有时我可能会258 22其他时候我可能有258 2 在后一种情况下 我需要添加尾随零 我该怎么做呢 你可以使用javascripttoFixed方法 source htt
  • 如何在fragment中设置setContentView

    我正在尝试在片段中调用库 但不知道如何在片段中设置它我已在主活动中完成它 但在片段中设置 setContentView 时出现错误 编译依赖 compile com github medyo android about page 1 0 2
  • Android Studio 图像资源启动器图标背景颜色

    我的应用程序有一个 png 徽标 它没有背景 当我将其作为图像资源添加到 android studio 时 我被迫有背景 十六进制字段不接受 8 位颜色代码 仅接受 6 位 有没有办法让背景不可见 要使背景透明 请设置shape as No
  • MotionLayout 儿童拦截触摸事件的问题

    我的主布局中有一个根容器的 MotionLayout 里面还有其他的景色 其中之一是框架布局 包含一个片段 该片段是一个页面 由 NestedScrollView 等组成 MotionLayout 具有仅水平滑动的 OnSwipe 而 Ne
  • 具有可变函数参数的 C++ 多态性

    我正在与您分享一个使用可变参数函数参数的类遇到的问题 它是下面代码中所示的 Thread 类 它是 std thread 的包装器 以便使用函数模式 我想在这个函数中使用多态性 将 Thread 类继承到一个新类 Functor 中 但是
  • 将 Excel 电子表格导入 Access - [hh]:mm:ss 的格式问题

    我需要将 Excel 电子表格导入 Microsoft Access 我有一个格式为 h mm ss 的列 当我使用 Access 导入它时 我已指定该列采用日期 时间格式 但它显示不正确 例如 在 Excel 中 它会显示 452 32
  • git 远程名称中哪些字符是非法的?

    git 远程名称中哪些字符是非法的 我在 git 文档中没有找到它 我在文档中也没有找到任何内容 那么我们就来看看源码吧 当您尝试添加具有无效名称的遥控器或将遥控器重命名为无效名称时 您将收到一条错误消息 例如 致命 foo bar 不是有
  • 如何向 D3.js 图表添加固定范围垂直线

    我正在尝试在现有折线图上添加一条垂直线 我的数据如下所示 PC 列是计算出的百分比 图表上的垂直线应从 0 延伸到 100 var data Month 2014 06 PC 38 items 72 Month 2014 07 PC 33
  • 如何动态访问 strings.xml 中的值?

    我想做的是从中获取特定文本strings xml动态地 我认为这将涉及动态访问对象变量 将会有一个类似的函数 public void getDynamicString int level text setText R string leve
  • 如何解释 jag 中的某些语法(n.adapt、update..)?

    我对 jag 中的以下语法感到非常困惑 例如 n iter 100 000 thin 100 n adapt 100 update model 1000 progress bar none 目前我认为 n adapt 100意味着您将前 1
  • 如何链接到 /usr/local/lib 上的 libc++?

    我试图提供 L usr local lib tried nostdinc 尝试设置DYLD LIBRARY PATH and DYLD FALLBACK LIBRARY PATH but otool总是给我 otool L sample s
  • 作为服务运行时,TFS 构建代理无法连接到 TFS 2017 中的 HTTPS git

    我们在服务器上使用内部证书 我已按照以下步骤操作 https blogs msdn microsoft com tfssetup 2016 12 19 error ssl certificate problem unable to get
  • 如何在 CloudFormation 模板中创建一些随机或唯一值?

    有没有办法在 CloudFormation 模板中创建某种随机或唯一值 为什么我需要这个 在我们的模板中 我们有许多自定义命名的资源 例如AWS AutoScaling LaunchConfiguration与指定的LaunchConfig