Jasper Inc.

地方在住エンジニアのテック&ライフブログ

【Terraform】templatefile関数でファイルを動的に変更する【OCI】

TerraformでシェルスクリプトやJSONファイルを利用する際に、templatefile関数を使うことで、ファイルの中の値を動的に変更できます。

templatefile関数
templatefile(/path/to/file, var.vars)

第一引数にパス、第二引数に変数を指定します。

OCIリソースマネージャでコンピュートインスタンスを作成する際に、cloud-init用のシェルスクリプトを指定する場合は…

main.tf
resource "oci_core_instance" "this" {
  availability_domain = var.availability_domain
  compartment_id      = var.compartment_id
  shape               = "VM.Standard.E4.Flex"
  shape_config {
    ocpus = 1
  }
  source_details {
    source_id   = "ocid1.image.oc1.ap-tokyo-1.aaaaaaaahhqgmyj2zb3bw6wnnvkvo7godb5vqpqqtuknosn5k5uvk5wphhwa"
    source_type = "image"
  }
  create_vnic_details {
    nsg_ids = [
      var.nsg_id
    ]
    subnet_id = var.subnet_id
  }

  metadata = {
    ssh_authorized_keys = var.ssh_keys
    user_data           = base64encode(templatefile("${path.root}/modules/userdata/init.sh", var.ip)) # << Here
  }
}

なお、OCIの場合はbase64encodeも必要になります。

variables.tf
variable "ip" {
  type    = map(string)
  default = {
    ip   = "10.0.1.0/24"
  }
}

map形式で変数を設定します。

init.sh
#!/bin/bash

echo "${ip}" > /root/ip.txt

とりあえず、こんな感じで動作確認。