Multi Cloud IaCrealized by Terraform
View Slide
Agenda» 自己紹介» マルチクラウドに求めること» マルチクラウドの課題» Terraformとは» Terraformで何が出来るのか» Terraformの実行方法» まとめ2
自己紹介resource “my_profile” “nezumisannn” {name = “Yuki.Teraoka”nickname = “ねずみさん家。”company = “beyond”job = “Site Reliability Engineer”twitter = “@yktr_sre”skills = [“terraform”,”packer”]}3
“What do you ask forMultiCloud”4
良いとこ取り良い所だけを組み合わせたい...5
Why» コスト/性能の最適化⋄ ベンダーごとに当然異なる» DR対策⋄ クラウド自体の障害への備え» クラウドロックインの回避⋄ 特定のクラウドに依存しない» 最適なサービスの利用⋄ 利用したいものを幅広く選定できる6
Problem» 構成の複雑化⋄ 構成が複数クラウドに跨る» 学習コストの増加⋄ 複数のクラウドを理解する必要性» 標準化が難しい⋄ クラウドごとの差異の吸収7
Solution» 構成の複雑化⋄ Infrastructure as code» 学習コストの増加⋄ 気合いでなんとかする» 標準化が難しい⋄ 統一的に記述できる言語を選定8
What is Terraform» インフラオーケストレーションツール» HashiCorp社のOSSでGolangで開発» 豊富なProviderの提供⋄ GCP⋄ Alibaba Cloud⋄ Oracle Cloud» HCLという独自言語で記述する9
Terraformで出来ること» マルチプロバイダ⋄ 種類に関わらず統一言語(HCL)で記述» コードでのインフラ定義/管理(IaC)» 作成/変更/削除の自動化と人的ミスが減少» インフラCI/CDとの親和性が高い10
HCLの優位性APIGoogle gcloud compute networks createAlibaba aliyun vpc CreateVpcOCI oci network vcn create11
HCLの優位性TerraformGoogle HCLAlibaba HCLOCI HCL12
HCLの種類» Provider⋄ クラウドの種類と認証情報を明示する» Resource⋄ Terraformで管理する対象の基本単位» Data Source» Provisioner» State» Backend» Module13
Provider14provider "provider_name" {-> provider setting here}
Providerprovider "google" {credentials = "../credentials/multi-cloud-terraform.json"project = "test-project"region = "asia-northeast2"}15
Providerprovider "alicloud" {access_key = "${var.credential["alicloud_access_key"]}"secret_key = "${var.credential["alicloud_secret_key"]}"region = "${var.credential["region"]}"}16
Providerprovider "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
Variablevariable "access_key" {type = "string"default = "Your Access Key here"}18
Variablevariable "credential" {type = "map"default = {access_key = "Your Access Key here"secret_key = "Your Secret Key here"region = "Your Region here"}}19
Resourceresource "resource_type" "resource_name" {-> resource setting here}20
Resourceresource "google_compute_network" "example" {name = "example-vpc"description = "example-vpc"auto_create_subnetworks = true}21
Resourceresource "alicloud_vpc" "example" {name = "example-vpc"cidr_block = "10.0.0.0/8"}22
Resourceresource "oci_core_vcn" "example" {cidr_block = "192.168.0.0/16"compartment_id = "${var.compartment_id}"display_name = "example-vcn"}23
Terraformの実行Write Plan Apply24Destroy
Terraformの実行» Write⋄ 作成したいリソースをHCLで記述する» Plan⋄ HCLの構文チェックとドライラン» Apply⋄ デプロイ» Destroy⋄ 作成したリソースを全て削除する25
実行すると...26
まとめ» マルチクラウドに求めるものは「良いとこ取り」» 課題を無視すると「良いとこ取れない」» TerraformでマルチクラウドIaCをやろう» HCLを覚える必要がありますがそこは気合いで!27
THANKS!Any questions?You can find me at» @yktr_sre» [email protected]28