调用AWS Lambda ListTags接口遇ValidationException异常求助
问题原因与解决方案
问题出在read命令的默认字段分隔符上:AWS CLI的--output text格式中,列与列之间是制表符分隔,但read默认会把所有空白字符(空格、制表符、换行)都当成字段分隔符。如果你的Lambda函数名包含空格,或者输出中有意外的空格干扰,read会错误地分割function_name和function_arn,导致传递给list-tags的ARN不完整或包含多余字符,触发正则校验失败。而最后一次调用成功,大概率是因为最后一个函数的名称没有空格,刚好被正确分割。
修正后的代码
functions=$(aws lambda list-functions --region "$region" --query "Functions[?starts_with(FunctionName, 'some-name-pattern')].[FunctionName,FunctionArn]" --output text) # 指定read的分隔符为制表符,确保正确分割两列数据 while IFS=$'\t' read -r function_name function_arn do echo "Function: ${function_name}" echo "ARN: ${function_arn}" aws lambda list-tags --region "$region" --resource "$function_arn" --query 'Tags' --output json echo done <<< "$functions"
额外优化建议
如果担心$(...)捕获输出时丢失末尾换行导致最后一行被忽略,可以改用管道的方式读取输出(避免变量存储带来的换行问题):
aws lambda list-functions --region "$region" --query "Functions[?starts_with(FunctionName, 'some-name-pattern')].[FunctionName,FunctionArn]" --output text | while IFS=$'\t' read -r function_name function_arn do echo "Function: ${function_name}" echo "ARN: ${function_arn}" aws lambda list-tags --region "$region" --resource "$function_arn" --query 'Tags' --output json echo done
内容的提问来源于stack exchange,提问作者Sergii Fasolko
相关产品推荐
相关产品推荐

