Slide 1

Slide 1 text

今日から始めるTerraform GDG Devfest Shinshu 2019/11/23 Taisei Ito 今晩

Slide 2

Slide 2 text

Taisei Ito ● Twitter/Github ○ @kaedemalu ● ITコンサル&インフラエンジニア @ Future Corp. ○ GCP & Terraform ● 好きなもの ○ スキー ○ クラフトビール ○ カメラ ○ 食べること

Slide 3

Slide 3 text

今日の内容 ● Terraformとは ● 簡単な例 ● 使ってみて便利だったもの ● まとめ

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

インスタンス立ててみます

Slide 7

Slide 7 text

事前準備 ● サービスアカウントの作成 ○ 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" } } }

Slide 8

Slide 8 text

$ terraform apply

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

冪等性をみてみる ● タグを付け加えてみます ○ “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"] }

Slide 11

Slide 11 text

$ terraform apply

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

便利な機能 ● 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

Slide 14

Slide 14 text

便利な機能 ● 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" } インスタンス名を振 り分けられる

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

エンジニア募集中です!! Tech blog