Cloudformation deploy --parameter-overrides не принимает файл Обходной путь - PullRequest
1 голос
/ 21 января 2020

Я использую настройку конвейера с использованием codebuild и использую пакет cloudformation и cloudformation deploy для ускорения стека, который запускает лямбда-функцию. Теперь я знаю, что при развертывании облачной информации мы не можем использовать файл параметров с --parameters-overrides, и этот запрос функции все еще находится в открытом состоянии с AWS https://github.com/aws/aws-cli/issues/2828. Поэтому я пытаюсь использовать обходной путь, используя JQ, который описан в этой ссылке https://github.com/aws/aws-cli/issues/3274#issuecomment -529155262 , как показано ниже.

PARAMETERS_FILE="parameters.json" &&  PARAMS=($(jq -r '.Parameters[] | [.ParameterKey, .ParameterValue] | "\(.[0])=\(.[1])"' ${PARAMETERS_FILE})) - aws cloudformation deploy --template-file /codebuild/output/packaged.yaml --region us-east-2 --stack-name InitialSetup --capabilities CAPABILITY_IAM  --parameter-overrides ${PARAMS[@]}

Этот обходной путь работает хорошо, если проверено с помощью Cli. Я также попробовал этот обходной путь внутри контейнера, так как файл buildspe c .yaml создает в фоновом режиме контейнер, который выполняет эти команды, но codebuild не оправдывает шаг развертывания облачной информации aws и завершается неудачно. Я получаю сообщение об ошибке "aws: error: аргумент --parameter-overrides: ожидается хотя бы один аргумент". Я даже попытался скопировать два шага обходного пути в сценарии оболочки и затем выполнить его, но я столкнулся с ошибкой "[Контейнер] 2020/01/21 09:19:14 Код состояния контекста фазы: COMMAND_EXECUTION_ERROR Сообщение: Ошибка при выполнении команды: ./ test. sh. Причина: выход из состояния 255 "Может кто-нибудь, пожалуйста, подскажите мне здесь. Мой buildspe c .yaml файл выглядит так:

'' 'версия: 0.2

фазы : install: runtime-version: java: команды corretto8:

- wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
- chmod +x ./jq
- cp jq /usr/bin
- jq --version 

pre_build: команды: # - echo "[Фаза предварительной сборки]

build: команды:

  - aws cloudformation package --template-file master.yaml --s3-bucket rtestbucket --output-template-file packaged.yaml
  - aws s3 cp ./packaged.yaml s3://rtestbucket/packaged.yaml
  - aws s3 cp s3://rtestbucket/packaged.yaml /codebuild/output

post_build: команды:

- PARAMETERS_FILE="parameters.json" &&  PARAMS=($(jq -r '.Parameters[] | [.ParameterKey, .ParameterValue] | "\(.[0])=\(.[1])"' ${PARAMETERS_FILE}))
- ls 
- aws cloudformation deploy --template-file /codebuild/output/packaged.yaml --region us-east-2 --stack-name InitialSetup --capabilities CAPABILITY_IAM  --parameter-overrides ${PARAMS[@]}

артефакты: тип: zip-файлы: - packaged.yaml


Ответы [ 3 ]

0 голосов
/ 22 января 2020

CodeBuild buildspe c команды не выполняются в оболочке bash, и я думаю, что синтаксис:

${PARAMS[@]}

... это bash конкретный c.

Согласно ответу здесь: { ссылка }

Попробуйте обернуть ваши команды в файл сценария с помощью шебанга, указывающего оболочку, с которой вы хотите, чтобы команды выполнялись.

0 голосов
/ 22 января 2020

Мне удалось решить эту проблему, выполнив все необходимые шаги в сценарии оболочки и предоставив доступ к сценарию.

0 голосов
/ 21 января 2020

Выражение ${PARAMS[@]} не возвращает никакого значения, что приводит к ошибке aws: error: argument --parameter-overrides: expected at least one argument. Просмотрите код и разрешите или удалите этот параметр.

...