gpt4 book ai didi

amazon-web-services - CloudFormation GUI 参数覆盖

转载 作者:行者123 更新时间:2023-12-03 07:35:09 34 4
gpt4 key购买 nike

我有一个带有 2 个参数的 CloudFormation 模板。第一个用于 EC2 名称,第二个用于 URL。 UserData 在 EC2 启动后 curl 必要的 URL。该 URL 根据用户的需求而变化。我添加了标签以确保 CloudFormation 能够接收更改。当我通过 GUI 进行更新时,两个标签都会更新。但是,UserData 的curl 中的URL 却没有。我正在尝试创建有关如何通过 CloudFormation GUI 更新此模板的说明。是否可以通过 GUI 在 URL 参数的 UserData 部分中完成参数覆盖?这是我的 CloudFormation 模板的片段。

{
"Parameters":{
"ArtifactURL" : {
"Type" : "String",
"Default" : "https://stuff.war",
"Description": "Enter the Artifact's URL to be installed on this EC2. Default is the latest stuff"
},
"EC2Name" : {
"Type" : "String",
"Default" : "MyCloudFormationInstance"
}
},
"Resources" : {
"MyCloudFormationInstance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"AvailabilityZone" : "...",
"ImageId" : "...",
"SecurityGroupIds" :[ "..." ],
"KeyName" : "...",
"Tags" : [
{
"Key" : "Name",
"Value" : { "Ref": "EC2Name"}
},
{
"Key" : "Url",
"Value" : { "Ref": "ArtifactURL"}
}
],
"IamInstanceProfile" : "...",
"InstanceType" : "t2.micro",
"UserData" : {"Fn::Base64": {"Fn::Join" : ["", [
"#!/bin/bash","\n",
"warlink=\"", { "Ref": "ArtifactURL" },"\"\n",
"echo \"warlink: $warlink\" > myFile.txt","\n",
"\n","curl \"$warlink\" -O","\n",

最佳答案

我将在这里做出一些假设:

  • 我假设您的目标是更新 CloudFormation 参数 ArtifactURL 以使实例下载 URL;
  • 此外,我假设您没有直接验证 UserData 是否已更新,但您间接通过注意到新网址未下载来验证它并认为原因是 UserData 没有更新。

如果这些假设无效,请在问题中澄清您的最终目标是什么以及您到底观察到了什么。

UserData 脚本中的 ArtifactURL 很可能正在更新 - 这正是 CloudFormation 的工作方式。您可能会观察到,未下载新 URL,这与预期完全不同。

EC2 实例支持修改其 UserData,并且 CloudFormation 支持进行该更改。但是,默认情况下,在大多数 AMI 中,操作系统(特别是 cloud-init 软件包)被配置仅运行 UserData 脚本每个实例一次(而不是每次启动一次)。

这意味着,默认情况下,对 UserData 脚本所做的更改将不会执行

如果您查看资源类型的 CloudFormation 文档 AWS::EC2::Instance ,您将看到属性 TagsUserData 都可以更新而无需替换。具体来说,Tags 的更新完全没有任何中断,而 UserData 则通过 Stop -> Start 周期进行更新。当实例重新启动时,cloud-init 包会验证它之前是否已为该实例执行过一次 UserData,因此无论事实如何,它都不会再次执行它它已被修改。

因此,您需要的是 在 UserData 修改时触发重新执行。

有多种方法可以实现这一目标。由于您使用的是 CloudFormation,我建议您使用 cfn-hup :

The cfn-hup helper is a daemon that detects changes in resource metadata and runs user-specified actions when a change is detected.

该工具专门设计用于检测 UserData 中的更改并重新运行它们。链接的文档页面中有一个示例,您还可以通过搜索 cfn-hup 找到大量其他示例。

最后一点,还有一些其他方法可以实现相同的目标(重新执行 UserData 脚本,如果它们被修改,或每次启动等)。另一个不错的选择是了解有关 cloud-init 的更多信息并修改其配置。始终确保您所阅读的选项已记录并受到您正在使用的基础设施或软件的支持(例如,您会发现很多地方建议您可以删除锁定文件以强制重新执行 UserData,但是这是个坏建议)。

关于amazon-web-services - CloudFormation GUI 参数覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62883759/

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