Сохранение URL в хранилище параметров AWS с помощью aws-cli
Хорошо, поэтому я пытаюсь программно сохранить сгенерированную конечную точку 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
Это все еще терпит неудачу с той же самой ошибкой. Есть ли какой-нибудь способ помешать клиенту оценить URL-адрес и просто сохранить чертову строку?
2 ответа
Это происходит из-за сомнительного поведения AWSCLI. Когда он видит URL, он вызывает HTTP GET для результата.
Вы можете обойти это поведение следующим образом:
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
Вы можете отслеживать основную проблему в https://g ithub.com/aws/aws-cli/issues/2507.
По умолчанию интерфейс командной строки AWS следует за любыми строковыми параметрами, начинающимися с https://
или http://
. Эти URL-адреса извлекаются, а загруженный контент используется в качестве параметра вместо URL-адреса.
Чтобы CLI не обрабатывал строки с префиксом https://
или http://
выполняются любые, отличные от обычных строковых параметров:
aws configure set cli_follow_urlparam false
cli_follow_urlparam
контролирует, будет ли CLI пытаться перейти по URL-ссылкам в параметрах, начинающихся с любого префикса https://
или 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
}
Обсуждение GitHub по этой теме, связанное @jarmod, также имело другое решение для этого. Я повторю это здесь для других, чтобы избежать сканирования всей цепочки.
Добавьте следующее к вашему ~/.aws/config
наряду с любыми другими имеющимися настройками.
[default]
cli_follow_urlparam = false
PS Кажется, это также упоминается в документации AWS в разделе "Загрузка параметров из файла".
Еще один вариант сделать эту работу - не включать протокол https в значение, а только имя домена или путь. После поиска добавьте соответствующий протокол. Несколько раз мы хотели использовать https, http или даже ssh. Взять хотя бы git url. Несколько протоколов для доступа к ресурсу с соответствующими портами, где путь является требуемым значением
Чтобы дополнить ответы @jarmod, вот пример, показывающий, как можно справиться с Overwrite
файл, URL-адрес в переменной bash и создание многострочной строки 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}"