Странное поведение в bash при извлечении arn для ресурса - PullRequest
0 голосов
/ 23 сентября 2019

необходимо обновить ряд ресурсов (DynamoDbTables) с некоторыми тегами, которые я обнаружил, что, если я получаю arn таким образом (в цикле for)

T_ARN=$(aws dynamodb describe-table --table-name $TABLE --query=Table.TableArn)

, а затем я использую этоway

$(aws dynamodb tag-resource --resource-arn ${T_ARN} --tags Key=CentroDiCosto,Value=SomeValue)

Сбой вызова тега с

An error occurred (ValidationException) when calling the TagResource operation: Invalid TableArn: Invalid ResourceArn provided as input "arn:aws:dynamodb:eu-west-1:xxxxxxxx:table/yyyyyy"

После некоторой отладки я обнаружил, что для того, чтобы этот вызов работал, мне пришлось «очистить» значение arn, возвращенное из первого вызова,

# this doesn't work
...
T_ARN=$(aws dynamodb describe-table --table-name $TABLE --query=Table.TableArn)
...
$(aws dynamodb tag-resource --resource-arn ${T_ARN} --tags Key=CentroDiCosto,Value=SomeValue)
...

# this works
...
T_ARN=$(aws dynamodb describe-table --table-name $TABLE --query=Table.TableArn)
...
#here i strip away the extra "
U_ARN=$(echo $T_ARN|sed -e 's/"//g')
...
$(aws dynamodb tag-resource --resource-arn ${U_ARN} --tags Key=CentroDiCosto,Value=SomeValue)

Может кто-нибудь предложить более чистый и элегантный способ работы с этим королем проблем?

1 Ответ

0 голосов
/ 23 сентября 2019

Вы используете вывод JSON.Перейдите к тексту, и все будет хорошо.

T_ARN=$(aws dynamodb describe-table --table-name $TABLE --query=Table.TableArn --output text)

Пример вывода

$ aws dynamodb describe-table --table-name acme --query=Table.TableArn
"arn:aws:dynamodb:us-east-1:717475838310:table/acme"

$ aws dynamodb describe-table --table-name acme --query=Table.TableArn --output text
arn:aws:dynamodb:us-east-1:717475838310:table/acme
...