Slide 1

Slide 1 text

Multi Cloud IaC realized by Terraform

Slide 2

Slide 2 text

Agenda » 自己紹介 » マルチクラウドに求めること » マルチクラウドの課題 » Terraformとは » Terraformで何が出来るのか » Terraformの実行方法 » まとめ 2

Slide 3

Slide 3 text

自己紹介 resource “my_profile” “nezumisannn” { name = “Yuki.Teraoka” nickname = “ねずみさん家。” company = “beyond” job = “Site Reliability Engineer” twitter = “@yktr_sre” skills = [“terraform”,”packer”] } 3

Slide 4

Slide 4 text

“What do you ask for MultiCloud” 4

Slide 5

Slide 5 text

良いとこ取り 良い所だけを組み合わせたい... 5

Slide 6

Slide 6 text

Why » コスト/性能の最適化 ⋄ ベンダーごとに当然異なる » DR対策 ⋄ クラウド自体の障害への備え » クラウドロックインの回避 ⋄ 特定のクラウドに依存しない » 最適なサービスの利用 ⋄ 利用したいものを幅広く選定できる 6

Slide 7

Slide 7 text

Problem » 構成の複雑化 ⋄ 構成が複数クラウドに跨る » 学習コストの増加 ⋄ 複数のクラウドを理解する必要性 » 標準化が難しい ⋄ クラウドごとの差異の吸収 7

Slide 8

Slide 8 text

Solution » 構成の複雑化 ⋄ Infrastructure as code » 学習コストの増加 ⋄ 気合いでなんとかする » 標準化が難しい ⋄ 統一的に記述できる言語を選定 8

Slide 9

Slide 9 text

What is Terraform » インフラオーケストレーションツール » HashiCorp社のOSSでGolangで開発 » 豊富なProviderの提供 ⋄ GCP ⋄ Alibaba Cloud ⋄ Oracle Cloud » HCLという独自言語で記述する 9

Slide 10

Slide 10 text

Terraformで出来ること » マルチプロバイダ ⋄ 種類に関わらず統一言語(HCL)で記述 » コードでのインフラ定義/管理(IaC) » 作成/変更/削除の自動化と人的ミスが減少 » インフラCI/CDとの親和性が高い 10

Slide 11

Slide 11 text

HCLの優位性 API Google gcloud compute networks create Alibaba aliyun vpc CreateVpc OCI oci network vcn create 11

Slide 12

Slide 12 text

HCLの優位性 Terraform Google HCL Alibaba HCL OCI HCL 12

Slide 13

Slide 13 text

HCLの種類 » Provider ⋄ クラウドの種類と認証情報を明示する » Resource ⋄ Terraformで管理する対象の基本単位 » Data Source » Provisioner » State » Backend » Module 13

Slide 14

Slide 14 text

Provider 14 provider "provider_name" { -> provider setting here }

Slide 15

Slide 15 text

Provider provider "google" { credentials = "../credentials/multi-cloud-terraform.json" project = "test-project" region = "asia-northeast2" } 15

Slide 16

Slide 16 text

Provider provider "alicloud" { access_key = "${var.credential["alicloud_access_key"]}" secret_key = "${var.credential["alicloud_secret_key"]}" region = "${var.credential["region"]}" } 16

Slide 17

Slide 17 text

Provider provider "oci" { tenancy_ocid = "${var.tenancy_ocid}" user_ocid = "${var.user_ocid}" fingerprint = "${var.fingerprint}" private_key_path = "${var.private_key_path}" region = "${var.region}" } 17

Slide 18

Slide 18 text

Variable variable "access_key" { type = "string" default = "Your Access Key here" } 18

Slide 19

Slide 19 text

Variable variable "credential" { type = "map" default = { access_key = "Your Access Key here" secret_key = "Your Secret Key here" region = "Your Region here" } } 19

Slide 20

Slide 20 text

Resource resource "resource_type" "resource_name" { -> resource setting here } 20

Slide 21

Slide 21 text

Resource resource "google_compute_network" "example" { name = "example-vpc" description = "example-vpc" auto_create_subnetworks = true } 21

Slide 22

Slide 22 text

Resource resource "alicloud_vpc" "example" { name = "example-vpc" cidr_block = "10.0.0.0/8" } 22

Slide 23

Slide 23 text

Resource resource "oci_core_vcn" "example" { cidr_block = "192.168.0.0/16" compartment_id = "${var.compartment_id}" display_name = "example-vcn" } 23

Slide 24

Slide 24 text

Terraformの実行 Write Plan Apply 24 Destroy

Slide 25

Slide 25 text

Terraformの実行 » Write ⋄ 作成したいリソースをHCLで記述する » Plan ⋄ HCLの構文チェックとドライラン » Apply ⋄ デプロイ » Destroy ⋄ 作成したリソースを全て削除する 25

Slide 26

Slide 26 text

実行すると... 26

Slide 27

Slide 27 text

まとめ » マルチクラウドに求めるものは「良いとこ取り」 » 課題を無視すると「良いとこ取れない」 » TerraformでマルチクラウドIaCをやろう » HCLを覚える必要がありますがそこは気合いで! 27

Slide 28

Slide 28 text

THANKS! Any questions? You can find me at » @yktr_sre » [email protected] 28