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

今晩から始めるTerraform

Avatar for Taisei Ito Taisei Ito
November 23, 2019

 今晩から始めるTerraform

Avatar for Taisei Ito

Taisei Ito

November 23, 2019
Tweet

More Decks by Taisei Ito

Other Decks in Technology

Transcript

  1. Taisei Ito • Twitter/Github ◦ @kaedemalu • ITコンサル&インフラエンジニア @ Future

    Corp. ◦ GCP & Terraform • 好きなもの ◦ スキー ◦ クラフトビール ◦ カメラ ◦ 食べること
  2. Terraform とは • HashiCorp社製のインフラをコードで管理するツール ◦ Infrastructure as Code(IaC) ▪ ex.)

    AWS Cloudformation • HCL(HashiCorp Configuration Language)という言語で記述 されている ◦ 拡張子は .tf • 様々なベンダーに向けて使用できる ◦ 今日は(もちろん)話しませんが...。
  3. Terraform とは • HashiCorp社製のインフラをコードで管理するツール ◦ Infrastructure as Code(IaC) ▪ ex.)

    AWS Cloudformation • HCL(HashiCorp Configuration Language)という言語で記述 されている ◦ 拡張子は .tf • 様々なベンダーに向けて使用できる ◦ 今日は(もちろん)話しませんが...。
  4. 事前準備 • サービスアカウントの作成 ◦ jsonキーを発行して作業ディレクトリに配置 • 以下のコードを使ってGCEインスタンス作成します provider "google" {

    credentials = file("account.json" ) project = "project-name" } resource "google_compute_instance" "sample_instance" { name = "gdg-instance" zone = "asia-northeast1-a" machine_type = "n1-standard-1" network_interface { network = "default" } boot_disk { initialize_params { image = "debian-cloud/debian-9" } } }
  5. 冪等性をみてみる • タグを付け加えてみます ◦ “foo”と”bar”の2つ provider "google" { credentials =

    file("account.json" ) project = "project-name" } resource "google_compute_instance" "sample_instance" { name = "gdg-instance" zone = "asia-northeast1-a" machine_type = "n1-standard-1" network_interface { network = "default" } boot_disk { initialize_params { image = "debian-cloud/debian-9" } } tags = ["foo", "bar"] }
  6. 便利な機能 • terraform fmt でコードの整形ができる ◦ go fmtと機能的には一緒 provider "google"

    { credentials = file("account.json") project = "project_name" region = "us-central1" } ... provider "google" { credentials = file("account.json") project = "project_name" region = "us-central1" } ... terraform fmt
  7. 便利な機能 • workspaceの利用 ◦ 同一コードでstg or prdなどを分けることができる provider "google" {

    credentials = file("account.json" ) project = "project_name" region = "us-central1" } resource "google_compute_instance" "sample_instance" { name = "${terraform.workspace}-sample-instance" zone = "us-central1-a" machine_type = "n1-standard-1" } インスタンス名を振 り分けられる
  8. 最後に • Terraformを使う時はドキュメント必須!! ◦ リソースなど網羅されている ◦ GUIで使えるパラメーターは揃っている • バージョンで使える機能が変わる ◦

    workspaceは0.12から使えるようになった • リソースの消し忘れがなくなる ◦ terraform destroy で綺麗に削除できる
  9. 最後に • Terraformを使うに当たって公式は必須!! ◦ リソースなど網羅されている ◦ GUIで使えるパラメーターは揃っている • バージョンで使える機能が変わる ◦

    workspaceは0.12から使えるようになった • リソースの消し忘れがなくなる ◦ terraform destroy で綺麗に削除できる • 学習コスト高くない!