【问题标题】:How to update user data in cloud formation?如何更新云形成中的用户数据?
【发布时间】:2021-08-05 02:15:58
【问题描述】:

我是云的新手! 我们如何更新云形成中的用户数据,更新堆栈是否也会更新 UserData 内部更改的任何内容?如果不是,我们如何更新用户数据更改?谢谢!

"UserData": {
    "Fn::Base64": {
        "Fn::Join": [
            "",
            [
                "#!/bin/bash\n",
                "apt-get update\n",
                "apt-get -y upgrade\n",
            ]
        ]
    }
}

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    要更新 cloudformation 模板中的任何内容,您可以运行 update-stack 命令,并将新的或更新的 cloudformation 模板作为输入参数。 AWS 将只更改您已更改的组件。因此,如果在运行 update-stack 时更改了 userData 部分中的任何行,AWS 将再次运行整个 userData 部分。

    这也意味着如果您的更改需要更新 userData,您的 EC2 实例将被销毁并替换为新实例。

    更新:如果您的 EC2 实例正在使用 EBS 驱动器并且您先将其关闭,则您可以更新您的 EC2 实例用户数据而不会破坏。但在我看来,这是一种反模式。 EC2 实例只是一个虚拟机。你应该保持它不可变。如果有什么需要改变重建实例。

    【讨论】:

    • 刚刚跳过了这个答案。根据 AWS 文档,这个答案是错误的:可以为关闭的实例更新 UserData 部分。因此,如果您更新云形成模板中的用户数据,那么云形成服务将关闭实例,更新用户数据并重新启动它。但请记住,脚本将不会被执行。另请参阅更新用户数据时 aws 控制台中的信息文本:如果您停止实例、修改其用户数据并启动实例,则启动实例时不会自动执行更新的用户数据。
    • 我不知道错误是否正确。这样做有很多警告,这也是一种反模式。实例只是 VMS,让您的 ELB 一次重建它们。它们应该被视为不可变的。如果您要调整单个实例,为什么要使用基础架构即代码。
    • 我也更新了我的答案。我相信 OP 只是想知道如何更新他的 userData。
    【解决方案2】:

    【讨论】:

      【解决方案3】:
      "Fn::Join": [
              "/n",
              [
                  "#!/bin/bash",
                  "apt-get update",
                  "apt-get -y upgrade",
              ]
      

      其实这是正确的方法。不知道是不是你的错别字

      【讨论】:

        猜你喜欢
        • 2021-01-31
        • 1970-01-01
        • 2020-11-12
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        相关资源
        最近更新 更多