将JSON文本传递到AWS CLI容器

时间:2018-09-25 06:56:33

标签: json bash shell docker aws-cli

我有一个正在处理的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 '}'
我相信,由于IFS,awscli容器无法解析

。 我收到以下错误消息。

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

`

1 个答案:

答案 0 :(得分:0)

aws() {
  docker exec aws-cli aws "$@"
}

Bash Reference Manual: Special Parameters

  

*   ($ )扩展到位置参数,从1开始。当扩展不在双引号内时,每个位置参数都扩展为单独的单词。在执行该操作的上下文中,这些单词会受到进一步的单词拆分和路径名扩展的影响。当在双引号内进行扩展时,它将扩展为一个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,“ $ ”等效于“ $ 1c $ 2c…”,其中c是IFS变量值的第一个字符。如果未设置IFS,则参数之间用空格分隔。如果IFS为null,则将在不插入分隔符的情况下联接参数。

     

@   ($ @)从一个开始扩展到位置参数。当在双引号内进行扩展时,每个参数都会扩展为单独的单词。也就是说,“ $ @”等效于“ $ 1”“ $ 2”……。如果双引号扩展出现在单词内,则第一个参数的扩展与原始单词的开头部分结合,而最后一个参数的扩展与原始单词的末尾部分连接。如果没有位置参数,则“ $ @”和$ @将扩展为空(即,它们将被删除)。