0

我对 Terraform 非常陌生,正在尝试使用它来复制我通过 AWS 控制台成功创建的内容。

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

控制台中显示的目标

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

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

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”。

任何帮助将不胜感激!

4

3 回答 3

0

通过 cloudformation 创建文档时,我遇到了同样的问题,即未正确选择文档。

我做错了什么?

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

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

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

我浏览的大多数文档在 ARN 中都有一个帐户 ID。删除帐户 ID 解决了问题。

于 2020-07-31T02:45:24.907 回答
0

您可以创建自己的 SSM 文档,也可以使用 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

于 2020-07-21T20:03:16.387 回答
0

我认为您需要做的是创建其中之一: 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 触发。

于 2018-02-16T20:23:39.067 回答