2017-04-06 18 views
5

Một nhóm đã viết mẫu dạng đám mây dưới dạng tệp .yml quy định một chồng tài nguyên.Có thể thực thi tệp CloudFormation trong Terraform không?

Có thể tận dụng tệp này bằng cách thực thi nó từ bên trong Terraform không? Hay nó phải được viết lại?

Tôi mới làm quen với địa chỉ và chỉ mới bắt đầu.

Nếu tôi được sử dụng AWS CLI tôi sẽ thực thi một lệnh như thế này,

AWS cloudformation tạo-stack --stack-tên mới-stack của tôi-file --template thân: // mystack .yml --parameters ParameterKey = AmiId

Tôi muốn bao gồm tương đương với lệnh này trong cấu hình terraform của tôi.

Nếu có thể và bạn có thể chỉ cho tôi một ví dụ, tôi thực sự sẽ đánh giá cao điều đó.

Cảm ơn!

+0

Tôi sợ bạn phải viết lại nó, tôi không nghĩ những gì bạn yêu cầu là có thể. – Bram

+1

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

+0

Nếu bạn gặp sự cố khi đọc tệp yml, hãy thử nâng cấp phiên bản terraform của bạn. Tôi thấy ngày hôm nay rằng nó không hoạt động trong .7.7 nhưng có thể xác nhận nó hoạt động trong .9.3 – user1521567

Trả lời

9

The aws_cloudformation_stack resource đóng vai trò như một cầu nối từ Terraform vào CloudFormation, có thể được sử dụng như một sự trợ giúp cho việc di chuyển từ CloudFormation để Terraform (như bạn đang rõ ràng làm gì ở đây) hoặc tận dụng một số CloudFormation của các tính năng mà Terraform hiện không xử lý, chẳng hạn như triển khai các phiên bản mới vào ASG.

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

Các parameters luận cho phép truyền dữ liệu từ Terraform vào Cloudformation stack. Cũng có thể sử dụng thuộc tính outputs để tận dụng các kết quả của ngăn xếp CloudFormation ở nơi khác trong Terraform, đối với một tích hợp hai chiều:

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

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

Nếu bạn có một chồng CloudFormation tồn tại trước đó rằng không quản lý bởi Terraform, bạn vẫn có thể tận dụng các kết quả đầu ra của nó sử dụng 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"]}"] 
} 

Các tính năng này cùng nhau cho phép bạn kết hợp hiệu quả CloudFormation và Terraform trong một hệ thống duy nhất trong các kết hợp khác nhau, cho dù đó là một biện pháp tạm thời trong khi di chuyển hoặc vĩnh viễn trong các tình huống có giải pháp lai.

1

Tôi có thể xác nhận rằng template_body có tham chiếu tệp tới mẫu mẫu thông tin hoạt động. Tôi giả sử template_url cũng sẽ hoạt động tốt. Ví dụ

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")}" 
} 
Các vấn đề liên quan