【问题标题】:contains placeholder within quotes error AWS Cloudwatch rule包含引号内的占位符错误 AWS Cloudwatch 规则
【发布时间】:2019-06-20 13:39:48
【问题描述】:

我正在尝试使用 AWS Cloudwatch 规则,该规则使用 SSM 在 EC2 实例上运行 powershell 脚本。当我在 RunPowerShellScript 文档的命令部分对实例 ID 进行硬编码时,该脚本将起作用。但是,当我在输入转换器中使用相同的命令从 Cloudwatch 事件中获取 Instanceid 作为变量时,我收到以下错误:

“保存规则 DisableInAD 时出错。详细信息: 目标 Id111111 的 InputTemplate 包含占位符 引号.."

我尝试使用的输入命令是:{"commands":["C:\\users \\documents\\Disable_Single_Instance -Id <instance>"]}

【问题讨论】:

  • 您解决了这个问题吗?有同样的问题。如果我将占位符放在引号之外,它是有效的,但脚本不接收参数,而是尝试使用每个参数调用 _script.sh,就好像它们是单独的命令一样。如果放在引号内,我会得到与您相同的错误。就我而言,这是在 linux 上,但它是通过 AWS System Manager 中的 RunCommand 实现的,所以同样的问题。提前致谢。

标签: amazon-web-services


【解决方案1】:

我就此向 AWS 询问,并被告知这是 Cloudwatch 事件输入转换器的已知限制。他们建议创建一个 Lambda 用作目标,因为您可以通过这种方式传递参数。然后 lambda 可能会调用 SSM 命令。

【讨论】:

    【解决方案2】:

    一种解决方法是转义引号

    例如:

    输入路径映射

    {"pipeline":"$.detail.pipeline","state":"$.detail.state"}
    

    输入模板

    "{\"message\":\"<pipeline> - <state>\"}"
    

    在云的形成中:

    InputTransformer:
      InputPathsMap: 
        pipeline: "$.detail.pipeline"
        state: "$.detail.state"
      InputTemplate: '"{\"message\":\"<pipeline> - <state>\"}"'
    

    你会得到一个带引号的字符串(不是 JSON)的结果,例如

    "\"{\\\"message\\\":\\\"TestPipleline - SUCCEEDED\\\"}\""
    

    因此您将双重解析结果以获取正确的 JSON。

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      相关资源
      最近更新 更多