我正在尝试使用下面的AWS CLI命令为SQS设置重新驱动策略,但看到了一个与重新驱动JSON相关的错误。您能告诉我如何修复此错误吗?
redrive_policy="{\"RedrivePolicy\":{\"deadLetterTargetArn\":\"$dlq_arn\",\"maxReceiveCount\":\"15\"}}"
AWS CLI命令
aws sqs set-queue-attributes --queue-url https://queue.amazonaws.com/12345678/test-queue --attributes $redrive_policy --region=us-east-1
错误消息
参数验证失败:参数属性的类型无效。RedrivePolicy,值:(),(最大接收计数',u'15')]),类型:,有效类型:
3条答案
按热度按时间pcrecxhr1#
您是否尝试过在一个单独的文件中创建JSON,并将其作为参数传递给AWS CLI命令?我发现,当将JSON作为参数传递时,很难正确地进行所有转义。因此,您基本上可以按照AWS文档中的示例进行操作:
https://docs.aws.amazon.com/cli/latest/reference/sqs/set-queue-attributes.html#examples
1.因此,首先您需要创建一个名为“set-queue-attributes.json”的新文件,如下所示:
1.然后运行如下命令:
kuhbmx9i2#
如果要在同一命令中运行,可以使用以下示例:
5gfr0r5j3#
实现此目的的三种方法:
注意:这些解决方案也适用于需要字符串化JSON的任何其他AWS CLI命令
1.使用命令行JSON处理器
jq
(推荐)建议使用此方法的原因有很多:
jq
是一个方便的工具,当使用AWS CLI时,经常需要对JSON进行字符串化。安装Ubuntu:
sudo apt install jq
基本选项:
jq -R
:返回字符串化JSONjq -c
:消除空格和换行符这样做的好处是,您可以将JSON写成JSON,然后将结果通过管道传输到
jq -R
命令中。或者,如果您有
sqs-redrive-policy.json
档案:sqs-redrive-policy.json
**中,--redrive-policy
,而不必修改任何其他属性。set-queue-attributes
(最好命名为put-queue-attributes
)会引起混淆,因为它不会覆盖所有属性,而只覆盖命令中提到的属性。因此,如果您之前在create-queue
中已经设置了Policy
属性,则不会将Policy
覆盖为空。换句话说,这是安全的。2.使用字符串化的JSON
老实说,这是一种痛苦,我避免了这种痛苦。
3.使用指向
attributes.json
而不是sqs-redrive-policy.json
的JSON文件的filePathURL这是我最后的选择。
attributes.json
文件中指定的所有属性。attributes.json
**中,