繁体   English   中英

是否可以在 Terraform 中执行 CloudFormation 文件?

[英]Is it possible to execute a CloudFormation file in Terraform?

一个团队已经将 cloudformation 模板编写为.yml文件,用于配置资源堆栈。

是否可以通过在 Terraform 中执行来利用该文件? 还是必须重写?

我是 terraform 的新手,刚刚开始。

如果我使用 AWS CLI,我会执行这样的命令,

aws cloudformation create-stack --stack-name my-new-stack --template-body file://mystack.yml --parameters ParameterKey=AmiId

我想在我的 terraform 配置中包含与此命令等效的命令。

如果可能的话,你可以给我举个例子,我真的很感激。

谢谢!

aws_cloudformation_stack资源充当从 Terraform 到aws_cloudformation_stack的桥梁,可用作从aws_cloudformation_stack迁移到 Terraform 的辅助工具(正如您在此处所做的那样)或利用一些 CloudFormation 目前没有的 CloudFormation 功能处理,例如将新实例滚动部署到ASG 中

resource "aws_cloudformation_stack" "example" {
  name = "example"
  parameters = {
    VpcId = var.vpc_id
  }
  template_body = file("${path.module}/example.yml")
}

parameters参数允许将数据从 Terraform 传递到 Cloudformation 堆栈。 也可以使用outputs属性来利用 Terraform 中其他地方的 CloudFormation 堆栈的结果,进行双向集成:

resource "aws_route_53_record" "example" {
  name = "service.example.com"
  type = "CNAME"
  ttl  = 300

  records = [
    aws_cloudformation_stack.example.outputs["ElbHostname"],
  ]
}

如果您有一个不由Terraform 管理的预先存在的 CloudFormation 堆栈,您仍然可以使用aws_cloudformation_stack数据源利用其输出:

data "aws_cloudformation_stack" "example" {
  name = "example"
}

resource "aws_route_53_record" "example" {
  name = "service.example.com"
  type = "CNAME"
  ttl  = 300

  records = [
    data.aws_cloudformation_stack.example.outputs["ElbHostname"],
  ]
}

这些功能一起使您能够以不同的组合在单个系统中有效地混合 CloudFormation 和 Terraform,无论是作为迁移时的临时措施,还是在需要混合解决方案的情况下永久使用。

我可以通过对 cloudformation 模板的文件引用来确认 template_body 有效。 我认为 template_url 也能很好地工作。 例子

resource "aws_cloudformation_stack" "my-new-stack" {
  name = "my-new-stack"
  parameters {
    Name="my-new-stack"
    Port="22"
    VpcId = "${var.vpc_id}"
  }
  template_body = "${file("${path.module}/mystack.yml")}"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM