Slide 1

Slide 1 text

Terraform超入門 2018/4 @akiray03

Slide 2

Slide 2 text

Terraformとは何か https://www.terraform.io/ HashiCorpの作るインフラ構成管理ツール

Slide 3

Slide 3 text

Terrafromは何であって何でないのか ● Terraformはインフラリソースをコード管理するツールです ● Chefやansibleとは少しレイヤが違います AWS or GCP or Azure or ... Compute Instance Compute Instance nginx ruby … nginx ruby … Chef or ansible or ..

Slide 4

Slide 4 text

Terraformは何をしているのか ● Terraformはユーザが記述した設定ファイルに従って、APIを呼び出しているだけで す ● AWSやGCPのAPI呼び出しのラッパーツール、という見方もできます ● Terraformの魅力はどこにあるのでしょうか 設定ファイル ( .tf ) AWS API GCP API

Slide 5

Slide 5 text

Terraformの魅力(1) インフラの状態を保持する ● Terraformは tfstate というJSONファイルにTerraformが操作したリソースの状態を 保存しています ● tfstateに記録された状態と、現在のAWSやGCP上のリソースの状態を比較するこ とで、期待した状態との差分を計算し、期待した状態に収束するような操作(追加・ 削除・変更)を実現してくれます 設定ファイル ( .tf ) AWS API GCP API tfstate

Slide 6

Slide 6 text

Terraformの魅力(2) 依存関係を解決してくれる ● AWSやGCPでCompute Instance を起動するためには、依存するリソースが存在 している必要があります (例: ネットワークや、セキュリティ設定、等) ● 起動したインスタンスのPublic IPに対してDNSレコードを設定する、という状況でも 依存関係が発生します ● Terraformはこのようなリソース間の依存関係を解決し、適切な順番でAPI呼び出し を行ってくれます

Slide 7

Slide 7 text

Terraformの魅力(2) 依存関係を解決してくれる resource "aws_instance" "web" { ami_id = "ami-123456" instance_type = "t2.micro" } resource "aws_route53_record" "www" { zone_id = "Z12345678" name = "abc.example.com" type = "A" ttl = "300" records = ["${aws_instance.web.public_ip}"] }

Slide 8

Slide 8 text

tfstateの管理 ● Terraformの認識しているリソース状態はtfstateというJSONファイルに保存される ● このファイルは、ローカルに配置することも、Amazon S3やGoogle Cloud Storage に保存することもできる ○ S3やGCSに保存することで、複数人・複数端末での tfstateの共有がやりやすくなる ○ が、同時に操作すると混乱状態になるので注意 ● tfstate の単位で plan / apply することになるので、適切なサイズに分割することが 重要