web-dev-qa-db-ja.com

Linux BashスクリプトファイルをTerraformコードに追加するにはどうすればよいですか?

私の要件は、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つに渡すにはどうすればよいですか?ありがとうございました

6
Devendra Date

スクリプトを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}"
  }
}
13
TJ Biddle