terraform basic

  • depends_on
    • 各リソースの依存関係を考慮し、depends_on で指定したリソースも含めて作成することが可能
  • family
    • task definition の一意の名称
  • data
    • 参照用の読み取り専用データ。計算させることも可能。

depends_on 例

# New resource for the S3 bucket our application will use.
resource "aws_s3_bucket" "example" {
  # NOTE: S3 bucket names must be unique across _all_ AWS accounts, so
  # this name must be changed before applying this example to avoid naming
  # conflicts.
  bucket = "terraform_getting_started_guide"
  acl    = "private"
}

# Change the aws_instance we declared earlier to now include "depends_on"
resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"

  # Tells Terraform that this EC2 instance must be created only after the
  # S3 bucket has been created.
  depends_on = ["aws_s3_bucket.example"]
}

terraform 公式サイト より抜粋

変数

variable ブロックで定義。

$ terraform apply -var-file ./variables.tfvars

Provisioners

resource の作成/削除の一貫として remote machine 又は local で Script を実行する為に利用される。resource の bootstrap, clean up, 構成管理の実行に利用される。

resource "aws_instance" "web" {
  # ...

  provisioner "local-exec" {
    command = "echo ${self.private_ip} > file.txt"
  }
}

RDS

下記 resource が必要。

  • aws_db_subnet_group
  • aws_security_group
  • aws_db_parameter_group
  • aws_db_instance

module

  • Terraform resourceを抽象化する。
  • よく使うパラメータを module 内に記述し汎用性を高める。

ファイル構成は以下の通り。
main.tf : メイン処理
variables.tf : 変数
outputs.tf : モジュール外で呼び出したいパラメータ

パスワード等の扱い

バージョン管理する為 variable.tf へパスワード等は記載したくない。

variable "db_username" {}
variable "db_password" {}
variable "ami" {}

terraform.tfvars へ指定した変数を記述する。

db_username = "root"
db_password = "hogefuga"
key_name = "test"

output

変数の内容を出力する。
https://www.terraform.io/intro/getting-started/outputs.html

output "cluster-pg" {
    value = "${aws_rds_cluster_parameter_group.zabbix-cluster-pg.name}"
}
$ terraform apply
$ terraform output cluster-pg
zabbix-cluster-pg

lifecycle

    lifecycle {
      create_before_destroy = true
    }
  • create_before_destroy (bool)
    • 既存のリソースが存在する場合、削除して作成し直す。
  • prevent_destroy (bool)
    • resource を削除しようとすると、エラーにする。
  • ignore_changes (list of strings)
    • 実際の resource と terraform 管理の差分が合った場合、resource の変更が無視される。

target

target で指定した resource を削除可能。

$ terraform destroy -target=aws_launch_configuration.test_launch_conf
$ terraform destroy -target=aws_launch_configuration.xxx_launch_conf

Terraform を使用する上での懸念点

  • version up が多いので追尾が大変
  • apply と plan で挙動が違うことがある

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です