12

好的,所以我正在尝试以编程方式将无服务器生成的 API 端点存储在参数存储中,以供另一个项目摄取。

举个例子,我将尝试存储 google.com。

aws ssm put-parameter --name /dev/someStore --value https://google.com --type String

这失败了,这是可以理解的。

Error parsing parameter '--value': Unable to retrieve https://google.com: received non 200 status code of 301

但是,如果我将 URL 用引号括起来......

aws ssm put-parameter --name /dev/someStore --value "https://google.com" --type String

它仍然失败并出现相同的错误。有什么方法可以阻止 cli 尝试评估 URL 并保存该死的字符串?

4

5 回答 5

16

这是由于awscli v1的可疑行为而发生的。当它看到一个 URL 时,它会调用一个 HTTP GET 来获取结果。这不会发生在 awscli v2中。

您可以按如下方式解决此问题:

aws ssm put-parameter --cli-input-json '{
  "Name": "/dev/someStore",
  "Value": "https://google.com",
  "Type": "String"
}'

或者您可以将 JSON 存储在名为 params.json 的文件中并调用:

aws ssm put-parameter --cli-input-json file://params.json

在aws/aws-cli/issues/2507报告了潜在问题。

于 2018-10-31T23:05:55.387 回答
8

默认情况下,AWS CLI 遵循任何以https://或开头的字符串参数http://。获取这些 URL,并将下载的内容用作参数而不是 URL。

要使 CLI 不处理带有前缀https://http://与普通字符串参数不同的字符串,请运行:

aws configure set cli_follow_urlparam false

cli_follow_urlparam控制 CLI 是否会尝试跟踪以前缀https://或. 开头的参数中的 URL 链接http://

请参阅https://docs.aws.amazon.com/cli/latest/topic/config-vars.html

问题:

aws ssm put-parameter --name /config/application/some-url --value http://google.com --type String --region eu-central-1 --overwrite

Error parsing parameter '--value': Unable to retrieve http://google.com: received non 200 status code of 301

解决方案:

aws configure set cli_follow_urlparam false
aws ssm put-parameter --name /config/application/some-url --value http://google.com --type String --region eu-central-1 --overwrite

{
    "Version": 1
}
于 2019-11-26T10:13:55.873 回答
5

@jarmod 链接的关于这个主题的 GitHub 讨论也有另一个解决方案。我将在这里复制它以供其他人避免扫描整个线程。

将以下内容~/.aws/config与存在的任何其他设置一起添加到您的。

[default]
cli_follow_urlparam = false

PS 似乎AWS 文档中的“从文件加载参数”部分也提到了这一点。

于 2019-04-27T13:10:39.263 回答
2

使这项工作的另一个选择是不在值中包含 https 协议,而只包含域名或路径。检索后添加适当的协议。有时我们想使用 https 或 http 甚至 ssh。以 git url 为例。使用路径为所需值的适当端口访问资源的多种协议

于 2018-11-01T17:03:33.720 回答
1

为了补充@jarmod 的答案,这里有一个示例,展示了如何处理 Overwrite文件、bash 变量中的 url 以及制作 json 多行字符串。

URL='https://www.some.url.com'

json_params='{' 
json_params+='"Name": "/param/path",'
json_params+='"Value": "'${URL}'",'
json_params+='"Type": "String",'
json_params+='"Overwrite": true'
json_params+='}'


aws ssm put-parameter \
     --cli-input-json "${json_params}"
于 2020-03-28T09:18:29.327 回答