2017-04-06 47 views
5

Bir ekip, bir kaynak yığınının hükümlerini karşılayan .yml dosyası olarak bir cloudformation şablonunu zaten yazmıştır.Bir CloudFormation dosyasını Terraform'da yürütmek mümkün mü?

Bu dosyayı Terraform içinden yürütmek mümkün mü? Yoksa yeniden yazılmalı mı?

Terraform'a yeni başladım ve yeni başladım.

ben böyle bir komut çalıştırmak istiyorum AWS CLI kullanarak olsaydı,

oluşturmak yığın yeni-yığın --template vücut dosyasını --stack-isim cloudformation aws: // mystack .yml --parameters ParameterKey = AmiId

Bu komutun eşdeğerini terraform yapılandırmamda eklemek istiyorum.

Mümkünse ve bana bir örnek gösterebilirseniz, bunu gerçekten takdir ediyorum.

Teşekkürler!

+0

Korkarım ki yeniden yazmak zorundasın, ne istediğini sanmıyorum. – Bram

+1

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

+0

Yml dosyasını okumada sorun yaşıyorsanız, terraform sürümünüzü yükseltmeyi deneyin. Bugün gördüm ki .7.7'de çalışmıyor, ancak çalıştığını teyit edebilir. – user1521567

cevap

9

The aws_cloudformation_stack resource (görünüşe göre burada yapacağımız gibi) ya da CloudFormation en bazılarının yararlanmak terraform CloudFormation geçiş için bir yardım olarak da kullanılabilir CloudFormation içine Terraform bir köprü görevi görmekte Terraform'un, yeni örneklerin bir ASG'ye dağıtılması gibi işlem yapmadığı özellikler.

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

parameters bağımsız değişken Cloudformation yığınına Terraform veri aktarılmasına izin verir. Bu iki yönlü bir entegrasyon için, başka bir yerde Terraform içinde CloudFormation yığının sonuçlarından faydalanmak için outputs özellik kullanmak da mümkündür:

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

    records = ["${aws_cloudformation_stack.example.outputs["ElbHostname"]}"] 
} 

Eğer önceden varolan bir CloudFormation yığını varsa terraform tarafından yönetilen olduğunu, yine the aws_cloudformation_stackdata source kullanarak çıkışların yararlanabilirler:

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"]}"] 
} 

Bu özellikler birlikte CloudFormation ve Terraform'u tek bir sistemde farklı kombinasyonlarda etkin bir şekilde karıştırmanıza olanak tanır; ister karma bir çözümün istenildiği durumlarda ister geçici olarak isterse kalıcı olarak olsun.

1

Bir cloudformation şablonuna dosya referansı içeren template_body öğesinin çalıştığını onaylayabilirim. Template_url'un da harika çalışacağını farz ediyorum. Örnek

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")}" 
}