Bash 脚本中的 AWS 问题

use*_*371 6 bash shell amazon-web-services aws-cli

考虑脚本文件中的 AWS CLI 命令

#!/bin/bash
msgClr='\033[1;35m'
errClr='\033[1;31m'
cynClr='\033[1;36m'
NC='\033[0m'
#Read CLuster from command Args
cluster="MyCluster"

#Update Service
echo -e "${msgClr}Initiate: ${NC}Updating Service..."
serviceName=$(aws ecs list-services --cluster $cluster | jq '.serviceArns[0]')
allTaskDefs=$(aws ecs list-task-definitions | jq '.taskDefinitionArns')
taskDefLength=$(echo $allTaskDefs | jq '. | length')
latestTaskDefArn=$(echo $allTaskDefs | jq '.['`expr $taskDefLength - 1`']')
#latestTaskDef=$(echo $latestTaskDefArn | awk 'BEGIN{FS="/"}{print substr($2, 1, length($2)-1)}')
#echo -e "${msgClr}Using Task Definition: ${cynClr}"$latestTaskDef"${NC}"
echo "aws ecs update-service --cluster $cluster --task-definition $latestTaskDefArn --service $serviceName" 
$(aws ecs update-service --cluster $cluster --task-definition $latestTaskDefArn --service $serviceName)
echo -e "${msgClr}Complete: ${NC}Updating Service..."
Run Code Online (Sandbox Code Playgroud)

它失败了

An error occurred (InvalidParameterException) when calling the UpdateService operation: Invalid revision number. Number: aws:ecs:eu-west-1:630026061543:task-definition/ecscompose-production:33"
Run Code Online (Sandbox Code Playgroud)

但如果我回显最后一个命令

$(aws ecs update-service --cluster $cluster --task-definition $latestTaskDefArn --service $serviceName)
Run Code Online (Sandbox Code Playgroud)

然后复制粘贴,运行顺利。为什么以及我做错了什么?

use*_*371 5

感谢您的所有评论。我想我找到了它不起作用的原因。

如果或是完整的 ARN(与文档相反),bash 脚本文件中的 AWS CLI 命令似乎不起作用。当我通过删除该部分将和剥离到它们的名称(和修订号)后,我的脚本就开始工作。task-definitionservicetask-definitionservicearn:aws:..<up to>../

需要明确的是,任务定义和服务的完整 arn 确实可以在命令提示符下工作……只是不能在 bash 脚本内工作。


小智 5

对于任何遇到此问题的人 - 这是因为jq输出的格式化方式 - 尝试在命令中添加--raw-output选项jq