簡體   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