2017-04-06 82 views
5

一個團隊已經編寫了一個雲製作模板,作爲配置一堆資源的.yml文件。是否可以在Terraform中執行CloudFormation文件?

是否可以通過在Terraform中執行該文件來利用此文件?還是必須重寫?

我是新來的terraform,剛開始。

如果我使用AWS CLI我將執行這樣的命令,

AWS cloudformation創建堆棧--stack名我全新的堆棧--template體文件:// mystack .yml --parameters ParameterKey = AmiId

我想在我的terraform配置中包含這個命令的等價物。

如果有可能,你可以指點我一個例子,我真的很感激。

謝謝!

+0

恐怕你必須重寫它,我不認爲你問的是可能的。 – Bram

+1

https://www.terraform.io/docs/providers/aws/r/cloudformation_stack.html#template_url –

+0

如果您在閱讀yml文件時遇到困難,請嘗試升級您的terraform版本。我今天看到它在.7.7中不起作用,但可以確認它在.9.3中起作用 – user1521567

回答

9

The aws_cloudformation_stack resource用作從Terraform一橋進入CloudFormation,可以使用,也可以作爲從CloudFormation遷移對terraform輔助(如你似乎在這裏做什麼),或使用一些CloudFormation的Terraform目前尚未處理的功能,如將新實例的滾動部署到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"]}"] 
} 

如果你有一個預先存在的CloudFormation堆棧該由Terraform管理,您可以使用the aws_cloudformation_stackdata source仍然利用其產出:

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有效地混合到單個系統中,以不同的組合方式進行混合,無論是遷移時的臨時措施,還是需要混合解決方案的情況下的永久臨時措施。

1

我可以確認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")}" 
} 
相關問題