私の要件は、terraformを使用して3つのawsインスタンスを作成し、その中で3つの異なるbashスクリプトを実行する必要があることです。すべてのファイルは同じサーバー上にあります。
インフラストラクチャを作成するためのTerraformコードと、すぐに使用できる3つのbashスクリプトがあります。
resource "aws_instance" "master" {
instance_type = "t2.xlarge"
AMI = "${data.aws_AMI.ubuntu.id}"
key_name = "${aws_key_pair.auth.id}"
vpc_security_group_ids = ["${aws_security_group.public.id}"]
subnet_id = "${aws_subnet.public1.id}"
}
これは、AWSインスタンスを作成するための私のterraformコードです
しかし、両方を統合する方法がわかりません。
AwsインスタンスのIP値をLinux Bashスクリプトの変数値として使用することもできますか?はいの場合、そのip値をLinux bashスクリプト変数の1つに渡すにはどうすればよいですか?ありがとうございました
スクリプトを1回だけ実行する必要がある場合。次に、AWSのペアリング ser-data scripts がこれに最適です。
スクリプトをファイルtemplates/user_data.tpl
にスローし、 テンプレートプロバイダー を使用してテンプレートを作成します。次に、レンダリングされたスクリプトをaws_instance
リソースの ser_data 引数に渡します。
必要に応じて変更します。
templates/user_data.tpl
#!/bin/bash
echo ${master_ip}
terraform_file.tf
resource "aws_instance" "master" {
instance_type = "t2.xlarge"
AMI = "${data.aws_AMI.ubuntu.id}"
key_name = "${aws_key_pair.auth.id}"
vpc_security_group_ids = ["${aws_security_group.public.id}"]
subnet_id = "${aws_subnet.public1.id}"
}
resource "aws_instance" "slave" {
instance_type = "t2.xlarge"
AMI = "${data.aws_AMI.ubuntu.id}"
key_name = "${aws_key_pair.auth.id}"
vpc_security_group_ids = ["${aws_security_group.public.id}"]
subnet_id = "${aws_subnet.public1.id}"
user_data = "${data.template_file.user_data.rendered}"
}
data "template_file" "user_data" {
template = "${file("templates/user_data.tpl")}"
vars {
master_ip = "${aws_instance.master.private_ip}"
}
}