Windows 上的 AWS CLI 使用双引号和转义符将无法正常工作

AWS CLI on Windows won't work though using double quotes and escapes

我制定了一个 Amazon Event Bridge 规则,我想使用 AWS CLI 在其上附加目标。

我知道当你在 windows10 命令提示符的 aws cli 中使用 json 字符串时,你需要

  1. 使用双引号。(现在允许使用单引号。)
  2. 除了第一个和最后一个双引号外,在双引号前加上反斜杠。

所以,我在命令提示符下调用它

aws events put-targets --rule xxxxxxxxxxxxxxxxxxxxxxxxx --targets "{\"Arn\":\"arn:aws:ssm:ap-northeast-1:awsaccountid:automation-definition/AWS-StartEC2Instance\",\"Input\":\"{\"InstanceId\":[\"i-xxxxxxxxxxxxxxxxx\"]}\",\"Id\":\"aaaaaaaa\",\"RoleArn\":\"arn:aws:iam::awsaccountid:role/some-ssm-role\"}"

但出现错误:

Error parsing parameter '--targets': Invalid JSON: Expecting ',' delimiter: line 1 column 104 (char 103)
JSON received: {"Arn":"arn:aws:ssm:ap-northeast-1:awsaccountid:automation-definition/AWS-StartEC2Instance","Input":"{"InstanceId":["i-xxxxxxxxxxxxxxxxx"]}","Id":"aaaaaaaa","RoleArn":"arn:aws:iam::awsaccountid:role/some-ssm-role"}

有什么建议吗?

p.s.
我确保以下命令在 Linux 终端上成功。

aws events put-targets --rule xxxxxxxxxxxxxxxxxxxxxxxxx --targets '{"Arn": "arn:aws:ssm:ap-northeast-1:awsaccountid:automation-definition/AWS-StopEC2Instance","Input":"{\"InstanceId\":[\"i-xxxxxxxxxxxxxxxxx\"]}","Id":"aaaaaaaa","RoleArn":"arn:aws:iam::awsaccountid:role/some-ssm-role"}'

你可以尝试以下方法吗:

aws events put-targets --rule xxxxxxxxxxxxxxxxxxxxxxxxx --targets "{\"Arn\":\"arn:aws:ssm:ap-northeast-1:awsaccountid:automation-definition/AWS-StartEC2Instance\",\"Input\":\"{\\"InstanceId\\":[\\"i-xxxxxxxxxxxxxxxxx\\"]}\",\"Id\":\"aaaaaaaa\",\"RoleArn\":\"arn:aws:iam::awsaccountid:role/some-ssm-role\"}"

或者,同样的事情,但这次带有插入符号延续标记的可读性稍好:

aws events put-targets ^
    --rule xxxxxxxxxxxxxxxxxxxxxxxxx ^
    --targets "{\"Arn\":\"arn:aws:ssm:ap-northeast-1:awsaccountid:automation-definition/AWS-StartEC2Instance\",\"Input\":\"{\\"InstanceId\\":[\\"i-xxxxxxxxxxxxxxxxx\\"]}\",\"Id\":\"aaaaaaaa\",\"RoleArn\":\"arn:aws:iam::awsaccountid:role/some-ssm-role\"}"

关键要认清JSON中的Input属性本身就是一个包含JSON的字符串,所以需要进行二次转义。这至少为我通过了初始格式验证。