在aws cli中映射数据类型

Ter*_*nce 1 amazon-sqs amazon-web-services aws-cli

我想在amazon aws sqs中添加消息到队列

所以我试过这个

root~#  aws sqs send-message --queue-url "queue/url" --message-body "message with attribute" --message-attributes '{"Name": "somename", "Type":"String", "Value":"somevalue"}'
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误

'unicode' object has no attribute 'keys'
Run Code Online (Sandbox Code Playgroud)

但如果我--message-attributes从命令中删除该部分

 root~#  aws sqs send-message --queue-url "queue/url" --message-body "message with attribute"
Run Code Online (Sandbox Code Playgroud)

然后它完美无缺

http://docs.aws.amazon.com/cli/latest/reference/sqs/send-message.html

我猜它是地图类型如何以地图格式发送此参数

--message-attributes (map)

qui*_*ver 5

你需要传递--message-attributes (map)数据结构{attr1 : {"DataType":"type1.option", "StringValue":val1}, attr2 : {"DataType":"typ2.option", "StringValue":val2}, ...}

所以你的例子变成如下:

发送队列

$ aws sqs send-message --queue-url "queue/url"  --message-body "message with attribute" --message-attributes '{"somename" : { "DataType":"String", "StringValue":"somevalue"}}'
{
    "MD5OfMessageBody": "ZZZZ",
    "MD5OfMessageAttributes": "YYYY",
    "MessageId": "06524772-XXXX"
}
Run Code Online (Sandbox Code Playgroud)

接收队列

$ aws sqs receive-message --queue-url "queue/url" --message-attribute-names somename
{
    "Messages": [
        {
            "Body": "message with attribute",
            "ReceiptHandle": "dummy==",
            "MD5OfBody": "ZZZZ",
            "MD5OfMessageAttributes": "YYYYS",
            "MessageId": "06524772-XXXX",
            "MessageAttributes": {
                "somename": {
                    "DataType": "String",
                    "StringValue": "somevalue"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)