Aws-cli: 允许 cloudformation 部署接受参数文件

创建于 2017-09-13  ·  55评论  ·  资料来源: aws/aws-cli

当运行cloudformation deploy命令时,能够将参数作为文件传递(传递给--parameter-override参数)会很有用,就像使用 create-stack 和 update-stack 一样。

还在这里请求: https :

closed-for-staleness cloudformation packagdeploy customization feature-request

最有用的评论

如果有人正在寻找解决方法,您可以尝试使用jq ,如下所示:
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
根据您的参数值,可能需要进一步转义。

所有55条评论

查看代码似乎我们只需要这里的东西

https://github.com/aws/aws-cli/blob/develop/awscli/customizations/cloudformation/deploy.py#L178

读取一个 JSON 文件,可能是一个快速的完整性检查,然后将它传递给deploy()

标记为 Cloudformation 部署的功能请求。

@sanathkr 的想法?

期待这个功能👍

我还想要package操作的功能。 谢谢! 👍

通过create-stackupdate-stack CF 命令中的--parameters类的东西传递参数文件(最好使用相同的文件内容语法)将使开发 CF 模板变得更容易我。 很想看到那个功能。

+1 此功能。 谢谢!

早上好!

我们将在 GitHub 上关闭此问题,作为我们迁移到UserVoice以处理涉及 AWS CLI 的功能请求的一部分。

这将使我们为您提供最重要的功能,让您更轻松地搜索和显示对您最关心的功能的支持,而不会因错误报告而淡化对话。

作为 UserVoice 的快速入门(如果还不熟悉的话):发布想法后,人们可以对想法进行投票,产品团队将直接对最受欢迎的建议做出回应。

我们已经从 GitHub 导入了现有的功能请求 - 在那里搜索这个问题!

别担心,为了后代,这个问题仍然存在于 GitHub 上。 由于它是将原始帖子以纯文本形式导入 UserVoice,因此我们仍会牢记 GitHub 问题上已经存在的评论和讨论。

GitHub 将继续作为报告错误的渠道。

再次,现在可以通过在以下位置搜索标题找到此问题: https :

-AWS 开发工具包和工具团队

此条目可以在 UserVoice 上特别找到: https :

+1 此功能。 谢谢!

根据社区反馈,我们决定将功能请求返回到 GitHub 问题。

如果有人正在寻找解决方法,您可以尝试使用jq ,如下所示:
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
根据您的参数值,可能需要进一步转义。

我也将为此功能 +1。

我尽可能用jp替换jqJMESPath值得学习。

$ jp \
  --unquoted \
  --filename example-app-params-staging.json  \
  "join(' ', @[].join('=', [ParameterKey, ParameterValue])[])"
HostedZone=example.com KeyName=example-ap-southeast-2 TargetPort=8080 VpcStackName=vpc-example

鉴于 AWS CodePipeline CloudFormation 部署操作需要特定的模板配置文件格式,如果您也能支持这种格式就好了。

+1 为此。 我理解想让“aws cloudformation deploy”保持简单,但是这个命令已经有单独的命令行标志用于功能、标签和参数(就像所有其他 aws cloudformation 命令一样),但是你已经让它们以不同的方式运行(只接受列表string=string 在命令行中,而不是文件中的 JSON 结构)。 您应该使所有“aws cloudformation”命令始终如一地工作(包括像几乎所有 aws CLI 命令一样使用 cli-input-json)。 如果您想简化“aws cloudformation deploy”的标签构造,您应该引入一个不同的命令行标志,如--tags-overrides 或--parameters-overrides。

👍 在功能请求上,如果支持就太好了。

这将是一个很棒的功能! 使用 cli 创建 cf 堆栈时,它将大大简化幂等性👍

+1

+1

+1

@ColdFire87 @dan-lind @mnwk能否请您只对第一期进行 👍 并停止向订阅此期的任何人发送垃圾邮件? 每条评论有 👍 就是 ping 20 个人....
(对不起其他人,但我们必须与之抗争......)

@pierreozoux抱歉,我不是故意惹恼人:)

@cervantek所说的。 我只想补充一点,我希望这张票跟踪实现所有这些选项以与create-stack保持一致:

          [--template-body <value>]
          [--template-url <value>]
          [--parameters <value>]
          [--capabilities <value>]
          [--tags <value>]

许多像我这样的人都有使用create-stackupdate-stack编写的遗留代码,他们希望将其重写为使用deploy 。 不应该这么难。

+1 到 --parameters 支持 JSON 文件。

我们的团队最近开始生成足够大的 cloudformation 模板,需要上传到 S3 存储桶,因此我们现在正在从创建堆栈和更新堆栈过渡到部署……并且遇到了迁移我们的相同问题参数文件以使用此新命令。 +1 此功能

+1 此功能

+1

+1

+1

+1

@olivier-schmitt-sonarsource @anshul0915 @lmunro @MiMo42 @markusbecker @benjammin12和其他人在未来,请只是 👍 父问题,而不是发送垃圾邮件给我们这些订阅了带有评论的线程的人,如果你只是想 +1 问题。 谢谢。

👍

另一个解决方法是使用带有key=value参数对列表的 .ini 文件,并使用以下方法进行部署:
aws cloudformation deploy --parameter-overrides $(cat parameters.ini)
标签也可以这样做。

另一个解决方法是使用带有key=value参数对列表的 .ini 文件,并使用以下方法进行部署:
aws cloudformation deploy --parameter-overrides $(cat parameters.ini)
标签也可以这样做。

这种方法很好而且有效! 尽管如此,为了与所有其他命令(确实支持“json”输入)保持一致,建议将参数保留为“json”文件格式,并在将其用作“部署”的输入之前专门操作该文件命令。 这可以通过可用于所有最常见平台“jq”命令来完成。

可以通过以下方式轻松实现转换:

cat parameters.json | jq -r '.[] | .ParameterKey + "=" + .ParameterValue'

此外,它可以即时转换并直接用作deploy 命令的输入:

aws cloudformation deploy --template-file ./sample-template.yaml --stack-name sample-stack --parameter-overrides $(cat parameters.json | jq -r '.[] | .ParameterKey + "=" + .ParameterValue')

希望能帮助到你!

幸运的是,CDK 完全消除了整个问题。 我已经前进了。

我一直在尝试从 create-stack/update-stack 转向 deploy 方法,并且遇到了这个问题以及其他问题 - 3 年后我很惊讶它仍然无法与那些旧方法相提并论。

我在使用上述标签文件的解决方法时遇到问题,其中某些标签的值中有空格。 我确信这是可以解决的,但我的另一个问题更基本 - 此命令的输出是非结构化的,因此为了获得变更集 ID,我必须解析一个非结构化的文本字符串。 我认为这非常狡猾(!),特别是因为 create-change-set 方法返回 json 中的 id。

此线程上一条较早的消息中用户语音问题的链接已失效 - 有没有人知道当前正在跟踪此问题的位置,或者它是否仍在处理中?

伙计们,请考虑实施此功能。 使用带有cat技巧或通过SSM传递参数作为解决方法 - 这是对非常基本功能的不必要的复杂化,并且几乎所有其他CFN替代方案都支持这种功能

我在寻找将参数传递给create-stackupdate-stack的解决方案时遇到了这个线程,但我也会在这里给我的👍,但添加到我们可以选择传递的请求中遵循 CodePipeline 为 CloudFormation 接受的 JSON 格式的文件。

如果您是 CodePipeline 部署 CloudFormation 的重度用户,那么在您的存储库中提交 CodePipeline 格式的 CloudFormation 文件已经是惯例。

当您通过管道运行完整的 CI/CD 时,这非常有用,但它会使本地开发变得非常乏味。 我有一些脚本可以将 CodePipeline JSON 转换为aws cloudformation create-stackupdate-stack通过--parameters file://params.json接受的JSON,并且通过一些额外的工作可能可以在一些黑客中工作上面的人已经提到了jq之类的东西,但这感觉就像一个黑客。

请执行此操作!

请执行此操作! 来吧 AWS,这已经开放了将近 3 年。

另一件非常烦人且与该主题有些相关的事情是通过 CLI 提供 CFN 参数的格式之间

我现在是deploy用户,到目前为止已经能够通过cat技巧使用内联参数逃脱它 - 即--parameter-overrides $(shell cat configs/${LNMS_ENV}.properties)

当我决定使用 CFN 的变更集实现类似于 Terraform 的plan时,问题就出现了。 结果证明aws cloudformation create-change-set能够覆盖参数,但它希望它们以不同于deploy格式发送!

根据deploy CLI 文档,它是:

ParameterKey1=ParameterValue1

根据create-stackupdate-stackcreate-change-set CLI 文档,它是:

ParameterKey=string,ParameterValue=string

还可以选择提供 JSON。

我真的不明白为什么它们不同,为什么deploy不支持相同的 JSON 格式,我应该怎么做 - 为每个环境保留两个基本相同的参数文件?

老实说,这是一个非常奇怪的设计 - 没有一致性,并且避免使用参数文件的动机不合理。 像这样的小(并且可以说它们很小)确实会影响生产力。

PS 没有注意到@pablods90 对此的看法,但这只是证明了人们由于缺乏基本功能而不断重新发明轮子的观点:(

+1

一致性船长的冒险还在继续。

虽然我们可以使用cat以与update-stack兼容的格式存储deploy配置:

[
    {
        "ParameterKey": "ParamEnv",
        "ParameterValue": "prod"
    }
]

带有Deploy:CloudFormation类型操作的CodePipeline使用另一种文件格式传递给 CFN:

{ 
  "Parameters": {
     "ParamEnv": "prod"
  }
}

没有进一步的评论......真的厌倦了一遍又一遍地解决同样的问题。 这不好。

我们最终只有一行 shell 脚本来调用aws cloudformation deploy与 CodePipeline 的文件一起维护,而不是catjq恶作剧。

我认为这是他们不会解决的问题之一,也许因为他们现在的重点是 cdk?

无论如何,我放弃了等待并尝试硬塞式部署来做我认为应该做的事情,最终做了我认为大多数其他人已经做的事情 - 使用创建和更新堆栈 cli 命令编写我自己的“upsert”bash 脚本。 100 行长但至少它现在可以完成工作!

嗨,我真的需要这个。 看到这种情况,我真的很失望,人们多年来一直要求这样做,但 CloudFormation 尚未提供。 什么样的想法驱动团队这是可以接受的......

嘿,我们真的很抱歉花了这么长时间才解决这个问题。

请您看一下 PR 的描述,让我们知道您对这种解决方案的看法。

此外,似乎没有简单的方法(至少在 Windows 命令提示符 CLI 上)提供多行参数。

我希望通过这个参数文件功能的实现,可以避免多行参数问题。

非常感谢你们的出色工作!

您好,此 PR 已在 AWS CLI v.2.0.39 中合并并发布。

@vz10感谢您的更新。

顺便说一句,您是否碰巧知道此实现(通过参数文件)是否允许多行参数? 这是我在运行 AWS CLI 的 Windows 批处理环境中无法解决的问题之一。

提前感谢您的帮助!

@bs-thomas 我没有用多行参数测试它。 但我相信如果 JSON 格式支持它,它会工作得很好。

如果您可以尝试一下并给我们反馈,那就太好了。

谢谢你。

@vz10多行确实有效。 但是,它看起来很丑, \n

实际上,如果 CLI 可以支持 CLI 参数覆盖的 YAML 格式,那就太酷了 ;-)

@bs-thomas 它看起来像是另一个功能请求。

只需创建它,它就可以让参数覆盖理解 YAML 的战斗成功了一半;)

@vz10当然,我会立即这样做。

顺便说一句,我注意到 JSON 验证器有一些令人不快的地方。 它不接受整数或布尔值。 所以如果我有它们,它必须被指定为一个字符串,否则我会得到这个响应:

image

然后!

@bs-thomas 是的,这有点奇怪,但它与cloudformation create-stack期望的行为相同 - 所有值都是字符串,然后解析它们并且它没有布尔参数类型

此页面是否有帮助?
0 / 5 - 0 等级