我对Terraform非常陌生,我正在尝试使用它来复制我通过AWS控制台成功创建的内容。
我试图指定一个" SSM Run Command"作为Cloudwatch规则的目标,可以使用aws_cloudwatch_event_target资源定义所有内容,但" Document"领域。规则目标和所有其他相关的部分都已成功创建,但是当我从控制台编辑规则时,文档部分未填写(下面的屏幕截图)。因此,该规则无法解雇。
查看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;为了目标。
任何帮助将不胜感激!
答案 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-RunShellScript修复ARN时,它在cloudformation创建资源后开始显示在控制台中
arn:aws:ssm:ap-southeast-2::document/AWS-RunShellScript
我浏览过的大多数文档在ARN中都有一个帐户ID。删除帐户ID即可解决问题。