Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraform Introduction

Terraform Introduction

Akira Yumiyama

April 07, 2018
Tweet

More Decks by Akira Yumiyama

Other Decks in Technology

Transcript

  1. Terraform超入門
    2018/4 @akiray03

    View Slide

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

    View Slide

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

    View Slide

  4. Terraformは何をしているのか
    ● Terraformはユーザが記述した設定ファイルに従って、APIを呼び出しているだけで

    ● AWSやGCPのAPI呼び出しのラッパーツール、という見方もできます
    ● Terraformの魅力はどこにあるのでしょうか
    設定ファイル
    ( .tf )
    AWS API
    GCP API

    View Slide

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

    View Slide

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

    View Slide

  7. 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}"]
    }

    View Slide

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

    View Slide