web-dev-qa-db-ja.com

Terraformでの複数のuser_dataファイルの使用

フォルダーの作成や特定のパッケージのインストールなどの一般的なタスク用の共通のuser_dataファイルと、アプリケーション固有の構成用の個別のuser_dataファイルを作成しようとしています

私は以下を試しています-

user_data = "${data.template_file.userdata_common.rendered}", "${data.template_file.userdata_master.rendered}"

これらの構成で-

共通ユーザーデータテンプレート

data "template_file" "userdata_common" {
  template = "${file("${path.module}/userdata_common.sh")}"

  vars {
    "ALBTarget"          = "${var.ALBTarget}"
    "s3bucket"           = "${var.s3bucket}"
    "centrifydomain"     = "${lookup(var.centrifydomain, format("%s-%s", lower(var.env),var.region))}"
    "centrifyadgroup"    = "${lookup(var.centrifyadgroup, format("%s-%s", lower(var.env),var.region))}"
  }
}

アプリケーション固有の構成

data "template_file" "userdata_master" {
  template = "${file("${path.module}/userdata_master.sh")}"

  vars {
    "ALBTarget"          = "${var.ALBTarget}"
    "s3bucket"           = "${var.s3bucket}"
    "centrifydomain"     = "${lookup(var.centrifydomain, format("%s-%s", lower(var.env),var.region))}"
    "centrifyadgroup"    = "${lookup(var.centrifyadgroup, format("%s-%s", lower(var.env),var.region))}"
  }
}

プランを実行すると、以下のエラーが表示されます-

Failed to load root config module: Error parsing /terraform/main.tf: key ${data.template_file.userdata_common.rendered}"' expected start of object ('{') or assignment ('=')

これはTerraform(0.9.3)を使用して可能ですか?

そうでない場合、Terraformでこれを行うための最良の方法は何ですか?

9
Rohit Sarkar

試しましたか template_cloudinit_config

以下のコードを追加します。

data "template_cloudinit_config" "master" {
  gzip          = true
  base64_encode = true

  # get common user_data
  part {
    filename     = "common.cfg"
    content_type = "text/part-handler"
    content      = "${data.template_file.userdata_common.rendered}"
  }

  # get master user_data
  part {
    filename     = "master.cfg"
    content_type = "text/part-handler"
    content      = "${data.template_file.userdata_master.rendered}"
  }

}

# sample code to use it.
resource "aws_instance" "web" {
  AMI           = "AMI-d05e75b8"
  instance_type = "t2.micro"
  user_data     = "${data.template_cloudinit_config.master.rendered}"
}

うまくいくかどうか教えてください。

10
BMW