【问题标题】:Using terraform, unable to add SSM document to aws_cloudwatch_event_target使用 terraform,无法将 SSM 文档添加到 aws_cloudwatch_event_target
【发布时间】:2018-07-27 08:29:50
【问题描述】:

我是 Terraform 的新手,我正在尝试使用它来复制我通过 AWS 控制台成功创建的内容。

我正在尝试将“SSM 运行命令”指定为 Cloudwatch 规则的目标,并且可以获取使用 aws_cloudwatch_event_target 资源定义的所有内容,但“文档”字段除外。规则目标和所有其他相关的零碎都已成功创建,但是当我从控制台编辑规则时,未填写文档部分(下面的屏幕截图)。因此,该规则无法触发。

target-as-shown-in-console

查看 aws_cloudwatch_event_target 的 Terraform 文档,我看不到要为文档指定的任何参数,所以我想知道这是否可能?考虑到似乎涵盖了所有其他参数,这会很奇怪。

下面是我用来创建目标的代码 - 里面有硬编码的东西,但我只是想让它在这一点上工作。

resource "aws_cloudwatch_event_target" "autogrow" {
    rule = "autogrow"
    arn =  "arn:aws:ssm:eu-west-1:999999999999:document/AWS-RunShellScript"
    role_arn = "arn:aws:iam::999999999999:role/ec2-cloudwatch"

    run_command_targets {
        key = "tag:InstanceIds"
        values = ["i-99999999999"]
    }

    input = <<INPUT
    {
    "commands": "/data/ssmscript.sh",
    "workingDirectory" : "/data",
    "executionTimeout" : "300"
    }
    INPUT
}

是否可以通过 Terraform 做我想做的事情?它确实可以通过控制台工作,但我想知道该功能是否还没有在 Terraform 中?我希望能够指定“文档”参数,但您可以指定的只是目标的“arn”。

任何帮助将不胜感激!

【问题讨论】:

    标签: amazon-web-services terraform aws-ssm aws-systems-manager


    【解决方案1】:

    我认为您需要做的是创建以下之一: https://www.terraform.io/docs/providers/aws/r/ssm_document.html

    这将在 AWS 中为您创建一个 SSM 文档,然后您需要使用 ssm_document_association 将该文档与您的实例相关联。

    https://www.terraform.io/docs/providers/aws/r/ssm_association.html

    一旦您拥有与您的实例相关联的文档,该事件应该能够通过 cloudwatch 触发。

    【讨论】:

    • 我实际上已经看过它并将其写下来,因为我可以看到 AWS 制作了“AWS-RunShellScript”文档并通过控制台成功使用了它。但是,如果您通过 Terraform 创建规则目标,您似乎无法实际使用它,我当然无法使其工作。还发现此“仅在 AWS 管理控制台中支持使用内置目标创建规则”。在 Cloudwatch 事件文档 - docs.aws.amazon.com/AmazonCloudWatch/latest/events/… - 这似乎适用于此。
    • 无论哪种方式,当我按照您的建议创建自己的文档时,我就可以将该文档应用到我的 Cloudwatch 目标中以执行 SSM 运行命令,而我无法使用 AWS 拥有的文档来执行此操作。感谢您的帮助!
    【解决方案2】:

    您可以创建您的own SSM Document,也可以使用 AWS 制作的文档。

    要获取 AWS 拥有的文档的内容:

    data "aws_ssm_document" "aws_doc" {
      name            = "AWS-RunShellScript"
      document_format = "JSON"
    }
    
    output "content" {
      value = "${data.aws_ssm_document.aws_doc.content}"
    }
    

    参考:https://www.terraform.io/docs/providers/aws/d/ssm_document.html

    【讨论】:

      【解决方案3】:

      我遇到了通过 cloudformation 创建文档时没有正确选择文档的问题。

      我做错了什么?

      • 我拥有的 AWS Managed 文档的 ARN 错误

      当我修复 AWS-RunShellScript 的 ARN 后,它在 cloudformation 创建资源后开始显示在控制台中

      arn:aws:ssm:ap-southeast-2::document/AWS-RunShellScript

      我查看的大多数文档在 ARN 中都有一个帐户 ID。删除帐号 ID 即可解决问题。

      【讨论】:

        猜你喜欢
        • 2021-05-20
        • 2021-05-22
        • 1970-01-01
        • 2021-12-11
        • 2022-11-02
        • 1970-01-01
        • 2013-06-13
        • 2021-12-19
        • 2020-11-10
        相关资源
        最近更新 更多