使用terraform,无法将SSM文档添加到aws_cloudwatch_event_target

时间:2018-02-16 12:18:52

标签: terraform aws-ssm aws-ssm-document

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

我试图指定一个" SSM Run Command"作为Cloudwatch规则的目标,可以使用aws_cloudwatch_event_target资源定义所有内容,但" Document"领域。规则目标和所有其他相关的部分都已成功创建,但是当我从控制台编辑规则时,文档部分未填写(下面的屏幕截图)。因此,该规则无法解雇。

target-as-shown-in-console

查看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的功能是否还没有?我期待一个&#34; Document&#34;参数可以指定,但你可以指定的是&#34; arn&#34;为了目标。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分: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触发事件。

答案 1 :(得分:0)

您可以创建自己的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

答案 2 :(得分:0)

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

我做错了什么?

  • 我拥有的AWS托管文档的ARN错误

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

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

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