あるチームは、リソースのスタックをプロビジョニングする.yml
ファイルとしてクラウドフォーメーションテンプレートをすでに作成しています。
Terraform内から実行することでこのファイルを活用することは可能ですか?それとも書き直す必要がありますか?
私はテラフォームに不慣れで、始めたばかりです。
AWS CLIを使用している場合、次のようなコマンドを実行します。
aws cloudformation create-stack --stack-name my-new-stack --template-body file://mystack.yml --parameters ParameterKey = AmiId
このコマンドに相当するものをテラフォーム構成に含めたいと思います。
可能で、例を挙げていただければ幸いです。
ありがとう!
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をさまざまな組み合わせで単一のシステムに効果的に混在させることができます。
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")}"
}