Передача текста json в контейнер aws cli - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть файл json, который я обрабатываю следующим образом.

aws application-autoscaling put-scaling-policy \
        --service-namespace dynamodb \
        --resource-id "table/$DYNAMODB_TABLE_NAME_PREFIX$tablename" \
        --scalable-dimension "dynamodb:table:WriteCapacityUnits" \
        --policy-name "WriteScalingPolicy" \
        --policy-type "TargetTrackingScaling" \
        --target-tracking-scaling-policy-configuration \
        '{
        "PredefinedMetricSpecification": {
            "PredefinedMetricType": "DynamoDBWriteCapacityUtilization"
        },
        "ScaleOutCooldown": 60,
        "ScaleInCooldown": 60,
        "TargetValue": 80.0
        }'

Обратите внимание, что aws - это функция, которую мы используем следующим образом.

aws() {

  docker exec aws-cli aws $*
}

Контейнер aws-cli - это уже запущенный контейнер, и команда из application-autoscaling в текст json передается в контейнер awscli следующим образом.

docker exec irtci-awscli aws application-autoscaling put-scaling-policy --service-namespace dynamodb --resource-id table/ir-tci_app_resource --scalable-dimension dynamodb:table:ReadCapacityUnits --policy-name ReadScalingPolicy --policy-type TargetTrackingScaling --target-tracking-scaling-policy-configuration '{' PredefinedMetricSpecification: '{' PredefinedMetricType: DynamoDBReadCapacityUtilization '},' ScaleOutCooldown: 60, ScaleInCooldown: 60, TargetValue: 80.0 '}'

, который не анализируется контейнером awscli из-за IFS, я полагаю,Я получаю следующую ошибку.

`Unknown options: --target-tracking-scaling-policy-configuration, PredefinedMetricSpecification:, {, PredefinedMetricType:, DynamoDBReadCapacityUtilization, },, ScaleOutCooldown:, 60,, ScaleInCooldown:, 60,, TargetValue:, 80.0, }, {

`

1 Ответ

0 голосов
/ 25 сентября 2018
aws() {
  docker exec aws-cli aws "$@"
}

Справочное руководство Bash: Специальные параметры

* ($ ) Расширяется до позиционных параметров, начиная с единицы.Когда раскрытие не в двойных кавычках, каждый позиционный параметр раскрывается в отдельное слово.В тех случаях, когда это выполняется, эти слова подлежат дальнейшему расщеплению и расширению пути.Когда раскрытие происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенного первым символом специальной переменной IFS.То есть «$ » эквивалентно «$ 1c $ 2c…», где c - первый символ значения переменной IFS.Если IFS не установлен, параметры разделяются пробелами.Если IFS равен нулю, параметры объединяются без промежуточных разделителей.

@ ($ @) Расширяется до позиционных параметров, начиная с единицы.Когда раскрытие происходит в двойных кавычках, каждый параметр раскрывается в отдельное слово.То есть «$ @» эквивалентно «$ 1», «$ 2»….Если расширение в двойных кавычках происходит внутри слова, расширение первого параметра объединяется с начальной частью исходного слова, а расширение последнего параметра объединяется с последней частью исходного слова.Когда позиционные параметры отсутствуют, $ @ и $ @ расширяются до нуля (т. Е. Они удаляются).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...