使用变量给AWS Secret打标签时报InvalidRequestException错误如何解决
问题原因
- 你使用单引号包裹了整个
--tags参数的JSON内容,Bash/Zsh等shell中单引号会禁用所有变量替换,你写的{$a}没有被解析为变量实际值,而是直接以字面量{$a}作为标签值提交,其中{、}、$不属于AWS标签允许的字符范围,因此触发报错。 - AWS标签的Key和Value仅允许使用大小写字母、数字、空格,以及
+、-、=、.、_、:、/、@这几个特殊字符,不支持{、}、$等符号。
解决方法
根据你使用的终端类型选择对应写法:
Linux/macOS Bash/Zsh 环境
写法1:双引号包裹整个JSON
用双引号包裹JSON内容,内部的双引号用反斜杠转义,触发变量自动替换:
aws secretsmanager tag-resource --secret-id blah-blah --tags "[{\"Key\": \"abc\", \"Value\": \"$a\"}]"
写法2:单引号拆分包裹
不需要转义内部双引号,把变量部分单独放到单引号外部,变量值包含空格时建议给变量额外套一层双引号避免截断:
aws secretsmanager tag-resource --secret-id blah-blah --tags '[{"Key": "abc", "Value": "'"$a"'"}]'
Windows PowerShell 环境
PowerShell中双引号包裹的内容可直接展开变量,写法如下:
aws secretsmanager tag-resource --secret-id blah-blah --tags "[{\"Key\": \"abc\", \"Value\": \"$($a)\"}]"
内容的提问来源于stack exchange,提问作者curious_coder
相关产品推荐
相关产品推荐

