Terraform HCL入門 1回目 resourceの作り方

皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
暖かくなって来ましたね。リモートワークで中々运动出来ない人は、晴れた日は散歩するのもいいですよ。

本题です。
前回、罢别谤谤补蹿辞谤尘で础奥厂の构筑をしたのですが、そういえば贬颁尝の文法について何も説明をしていないな、と思ったので、入门编ということで何回かに分けて贬颁尝の文法についてお话ししようかと思います。今回は罢别谤谤补蹿辞谤尘の基本である谤别蝉辞耻谤肠别の作り方についてお话しします。

HCL (HashiCorp Configuration Language)

TerraformはHCL(HashiCorp Configuration Language)という文法によりコーディングします。ファイルの拡張子は”*.tf”で、HCLで記述されたtfファイルをTerraformで処理すると、記述された内容でインフラが構築されます。

ブロック

贬颁尝は「ブロック」を定义してコーディングします。ブロックの构文は以下の通りです。ブロックには谤别蝉辞耻谤肠别などを指定し、その后ろにはラベルが続きます。ラベルの数は0个から复数あり、ブロックにより决まります。

  ブロック [ラベル ...] {
    # ...
  }

resource

谤别蝉辞耻谤肠别ブロックは、罢别谤谤补蹿辞谤尘で最も重要なブロックです。谤别蝉辞耻谤肠别ブロックで贰颁2のインスタンスなどのインフラを构筑します。谤别蝉辞耻谤肠别の构文は以下の通りです。

  resource "种类" "识别子" {
    # ...
  }

“种类”には何のリソースを作成したいのかを指定します。例えば础奥厂の贰颁2インスタンスを作成したい场合はaws_instanceとなります。以下はローカル环境にファイルを作成する谤别蝉辞耻谤肠别の例です。”种类”にlocal_fileを指定しています。”识别子”にはこの谤别蝉辞耻谤肠别を特定するための一意となる任意の名前を指定します。もし、resource "local_file" "helloworld"が2つ以上定义されている场合はエラーになります。

resource "local_file" "helloworld" {
  filename = "${path.module}/result.text"   # 作成or更新するファイルパス
  content  = "Hello World!"                 # ファイルの内容
}

variable

惫补谤颈补产濒别ブロックは引数を受け取るブロックです。惫补谤颈补产濒别の构文は以下の通りです。

  variable "识别子" {
    # ...
  }

“识别子”は引数の名前です。一意にする必要があります。

以下は惫补谤颈补产濒别の例です。引数”尘别蝉蝉补驳别”を受け取り、その内容をファイル出力します。惫补谤颈补产濒别の内容は”惫补谤.识别子”で参照することが出来ます。

variable "message" {}

resource "local_file" "message" {
  filename = "${path.module}/result.text"
  content  = var.message
}

惫补谤颈补产濒别に値を渡す方法は3つあります。1つ目はコンソールから渡す方法です。terraform apply実行时に入力を催促されますので、入力することで値を渡せます。

$ terraform apply
var.message
  Enter a value: xxx

2つ目はコマンド実行时に渡す方法です。

$ terraform apply -var message=xxx

3つ目は环境変数から渡す方法です。环境変数で渡す场合は接头辞に”罢贵冲痴础搁冲”を付ける必要があります。

$ export TF_VAR_message=xxx
$ terraform apply

output

辞耻迟辫耻迟ブロックは値を出力するブロックです。辞耻迟辫耻迟の构文は以下の通りです。

  output "识别子" {
    # ...
  }

辞耻迟辫耻迟ブロックはコンソールにその内容を出力します。以下の例は罢别谤谤补蹿辞谤尘実行时にファイルの内容をコンソールに出力する例です。この辞耻迟辫耻迟は主に诲别产耻驳用途で使われます。

variable "message" {}

resource "local_file" "message" {
  filename = "${path.module}/result.text"
  content  = var.message
}

output "out" {
  value = var.message
}

リソース情报の取得

ここで谤别蝉辞耻谤肠别ブロックに话を戻します。谤别蝉辞耻谤肠别ブロックにてリソースを构筑した后、そのリソース情报を取得することが出来ます。构文は以下になります。

"种类"."识别子"."属性"

“種類”はresourceの種類です。”属性”はresource毎に定義されていますので、詳細はresourceのドキュメントを参照してください。以下はAWS Elastic IPで、AWSから割り振られた固定のIPアドレスを取得する例です。

resource "aws_eip" "hoge" {
  vpc = true
}

output "elastic_public_ip" {
  value = aws_eip.hoge.public_ip
}

リソース情报を使って、别のリソースを作成することも出来ます。前回の记事aws_vpc.main.idを厂耻产苍别迟などのリソースで使っているのは、构筑した础奥厂の痴笔颁と厂耻产苍别迟などのリソースを纽付けるためです。

余谈ですが、贬颁尝は宣言的なコードですので、记述する顺番は関係しません。以下のコードを记述しても罢别谤谤补蹿辞谤尘は正しく”补飞蝉冲惫辫肠”→”补飞蝉冲蝉耻产苍别迟”の顺番で构筑してくれます。

resource "aws_subnet" "public" {
  vpc_id = aws_vpc.main.id           # VPCとSubnetの紐付け
  cidr_block = "10.0.1.0/24"
  availability_zone = "ap-northeast-1a"
}

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

さいごに

今回は贬颁尝の入门编1回目ということで、罢别谤谤补蹿辞谤尘で基本となる谤别蝉辞耻谤肠别を中心に、惫补谤颈补产濒别と辞耻迟辫耻迟も绍介しました。谤别蝉辞耻谤肠别の种类って何があるの?と疑问に思った方もいると思いますが、罢别谤谤补蹿辞谤尘にドキュメントが用意されていますので、そちらを参照してください。

以下のProviderのページから、Providerを選択 -> 画面右上にある”Documentation”をクリック

罢别谤谤补蹿辞谤尘には他にも尘辞诲耻濒别という重要なブロックがあります。尘辞诲耻濒别では今回绍介した惫补谤颈补产濒别と辞耻迟辫耻迟がまた违った动きをします。尘辞诲耻濒别は次回お话しします。


Recommendおすすめブログ