Open9

Terraform学習メモ

ピン留めされたアイテム
akkeyakkey

初めに

Terraformの概要と学習メモ
※Terraform ver.0.14を題材にした教材

akkeyakkey

コマンド

  • terraform init
    terraform環境で使うプロバイダ(Provider)情報を取得・セットアップするコマンド。
    プロバイダには、AWSの他GCPなど、様々なものがある。ディレクトリ移動したらまず必ず実施する必要があるコマンド。
  • terraform plan
    実行されたディレクトリ上において、コードで定義されたリソースと作成・削除などの起こることが表示されるコマンド。applyの前には必ずチェックすること。
  • terraform apply
    リソースを作成するコマンド。確認ののち、yesを押すことでリソースの作成が実施される。
  • terraform destroy
    applyで作成されたリソースを削除するコマンド。
akkeyakkey

インフラを定義するファイルの記法など

akkeyakkey

Resourceブロック

プロバイダによって提供されており、ここに書いた情報で各種AWSリソースが作成される。
定義方法は、リソース名(下は「EC2」)と、そのリソースにつけるローカルネーム(下は「test」)をつける。

例. 
resource "aws_instance" "test" {
以下情報
}

これで作られたリソースの情報は、以下で取得できる。

<RESOURCE TYPE>.<NAME>.<ATTRIBUTE>

例. 上記の「test」インスタンスから、ARNを取得する場合
aws_instance.test.arn

Variableブロック

変数定義のためのブロック。様々な変数の参照方法がある。
変数については後述。

Providerブロック

先述のプロバイダー情報(サービス名・バージョンなど)を定義。

akkeyakkey

変数

インプット変数

Variableブロックで定義する。

variable "image_id"{
以下変数情報
}

の形式。
この中では、変数のtype(String, number, mapなど)や、description, default値, sensitive(※apply実行時に実際の変数を表示させないようにする設定)などが記載できる。

変数へのアクセス

variableブロックで定義した変数などには、var.<NAME>の形式で変数にアクセス。
例えば、

resource "aws_instance" "test" {
instance_type = "t2.micro"
  ami           = var.image_id
}

のように記載することで、image_idのインプット変数を取ってこれる。

なお、変数はapplyコマンド時に-varオプションを使うことで上書くこともできる。

terraform apply -var="image_id=ami-xxxxxxxd"

アウトプット変数

resouceブロックで定義・作成されたリソースの情報を、他のリソースで使えるようにする役割を持つ。以下のように、アウトプット変数としてアウトプットブロックで定義している、

例. 作成後のインスタンスのIPアドレスをアウトプット変数化している。
output "instance_ip_address" {
  value = aws_instance.test.private_ip
}

ここで定義したアウトプット変数は、terraform applyコマンド実行後に、Outputs: としても表示されるようになる。

ローカル変数

localブロックを使って作成し、同じモジュール (= 同じフォルダ内)からしか参照できない変数。変数として複数回利用でき、インターナルな環境のみで使う場合に有効な変数。

akkeyakkey

値のタイプ

以下の種類がある。

  1. string :文字列形式。””で囲む。
    string_var = "hogehoge"
  2. number:数字。特に何も囲まない数字。
    number_var = 100
  3. bool:true/false形式の値。これも何も囲まない。
    bool_var = true
  4. list:複数定義する値。[]内で定義。
    例. aws_regions = ["us-west-1a", "us-west-1c"]
  5. map:キーバリューペアの値。{}内で定義。
map_var = {
	a = "hoge"
	b = 100
	c = true
}
akkeyakkey

データソース

dataブロックで定義する。用途としては、モジュール外(同一ディレクトリではない)のリソースから、情報を引っ張る場合に活用する。モジュール外のリソースとしては、別モジュールのmain.tfや、AWSが提供するリソース、コンソールで作成されたリソースなどがある。これらの情報を、dataブロック内で定義するfilterで探し、持ってくる。

. AWS提供の最新のAL2 AMIを持ってくる場合。
data "aws_ami" "amazon_linux_2" {
  most_recent = true
  owners = ["amazon"]

  filter {
    name   = "owner-alias"
    values = ["amazon"]
  }

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-ebs"]
  }
}

dataブロックで定義した値を引く場合は、以下のように引く。

例.上記AMI IDを引っ張る場合。
ami = data.aws_ami.amazon_linux_2.id
akkeyakkey

ファイルの種類

akkeyakkey

main.tfファイル

一番メインとなるファイル。ここに書いてあるリソースや情報でapplyが実施される。

.tfvarsファイル

変数と定義するのに使うファイル。ここで定義した変数をmain.tfで引用する形で使う。
こうすることで、様々なテンプレートで流用したり、git管理がしやすくなったりする。