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

问题描述 投票:0回答:2

我创建了一个 Amazon Event Bridge 规则,并且想使用 AWS CLI 在其上附加目标。

我知道当您在 Windows 10 命令提示符上的 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"}

有什么建议吗?

附注
我确保以下命令在 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"}'
windows amazon-web-services command-prompt aws-cli aws-event-bridge
2个回答
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\"}"

或者,同样的事情,但这次使用插入符延续标记稍微更具可读性:

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 的字符串,因此需要对其进行双重转义。这至少对我来说通过了初始格式验证。


0
投票

我在 Windows cli 上遇到以下错误。 我该如何解决这个问题?
aws events put-rule --name "detect-console-login" --description "检测控制台登录。由虚拟机创建。" --event-pattern '"{"detail-type": ["AWS Console Sign In via CloudTrail"]}"' --region us-east-2 --state ENABLED 调用 PutRule 操作时发生错误 (InvalidEventPatternException) :事件模式无效。原因:过滤器不是一个对象 在 [来源:(String)""{"detail-type": ["AWS 控制台通过 CloudTrail 登录"]}"";行:1,列:2]

© www.soinside.com 2019 - 2024. All rights reserved.