web-dev-qa-db-ja.com

TerraformでCloudFormationファイルを実行することは可能ですか?

あるチームは、リソースのスタックをプロビジョニングする.ymlファイルとしてクラウドフォーメーションテンプレートをすでに作成しています。

Terraform内から実行することでこのファイルを活用することは可能ですか?それとも書き直す必要がありますか?

私はテラフォームに不慣れで、始めたばかりです。

AWS CLIを使用している場合、次のようなコマンドを実行します。

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

このコマンドに相当するものをテラフォーム構成に含めたいと思います。

可能で、例を挙げていただければ幸いです。

ありがとう!

12
user1521567

aws_cloudformation_stackリソース はTerraformからCloudFormationへのブリッジとして機能し、CloudFormationからTerraformへの移行の補助として(ここで行っているように)、またはCloudFormationの一部を利用するために使用できます。新しいインスタンスのデプロイメントを [〜#〜] asg [〜#〜] にローリングするなど、Terraformが現在処理していない機能。

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スタックのresultsを双方向で利用することもできます。統合:

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をさまざまな組み合わせで単一のシステムに効果的に混在させることができます。

22
Martin Atkins

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