Terraform超入門2018/4 @akiray03
View Slide
Terraformとは何かhttps://www.terraform.io/HashiCorpの作るインフラ構成管理ツール
Terrafromは何であって何でないのか● Terraformはインフラリソースをコード管理するツールです● Chefやansibleとは少しレイヤが違いますAWS or GCP or Azure or ...Compute Instance Compute Instancenginx ruby … nginx ruby … Chef or ansible or ..
Terraformは何をしているのか● Terraformはユーザが記述した設定ファイルに従って、APIを呼び出しているだけです● AWSやGCPのAPI呼び出しのラッパーツール、という見方もできます● Terraformの魅力はどこにあるのでしょうか設定ファイル( .tf )AWS APIGCP API
Terraformの魅力(1) インフラの状態を保持する● Terraformは tfstate というJSONファイルにTerraformが操作したリソースの状態を保存しています● tfstateに記録された状態と、現在のAWSやGCP上のリソースの状態を比較することで、期待した状態との差分を計算し、期待した状態に収束するような操作(追加・削除・変更)を実現してくれます設定ファイル( .tf )AWS APIGCP APItfstate
Terraformの魅力(2) 依存関係を解決してくれる● AWSやGCPでCompute Instance を起動するためには、依存するリソースが存在している必要があります (例: ネットワークや、セキュリティ設定、等)● 起動したインスタンスのPublic IPに対してDNSレコードを設定する、という状況でも依存関係が発生します● Terraformはこのようなリソース間の依存関係を解決し、適切な順番でAPI呼び出しを行ってくれます
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}"]}
tfstateの管理● Terraformの認識しているリソース状態はtfstateというJSONファイルに保存される● このファイルは、ローカルに配置することも、Amazon S3やGoogle Cloud Storageに保存することもできる○ S3やGCSに保存することで、複数人・複数端末での tfstateの共有がやりやすくなる○ が、同時に操作すると混乱状態になるので注意● tfstate の単位で plan / apply することになるので、適切なサイズに分割することが重要