openstackとterraformで作る phoenix environments
TRANSCRIPT
© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.
OpenStackとTerraformで作るPhoenix Environments~よみがえれ、俺のインフラ~
ヒューレット・パッカードカンパニークラウドチーフテクノロジスト真壁徹2015/6/19
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.2
Snowflake vs Phoenix
Snowflake (雪片) Phoenix (不死鳥)
• 同じように見えてそれぞれ違う
• 構築後、個別に手作業で少しずつ手を加えたインフラのよう
• 再現が難しい
• 何度でもよみがえる
• 互換性のある他のインフラでもよみがえる
• 同じ姿でよみがえる
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.3
何度でも
けーん けーん
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.4
Phoenix Environments
http://www.thoughtworks.com/radar/techniques/phoenix-environments
ThoughtWorks Technology Radar (2015/5) • 何度でもPhoenix(不死鳥)のように、システム環境がよみがえる
• なぜできるか?
• APIで操作できるインフラがあるから
• そのAPIを使って環境を再現できる”コード”があるから
• ユースケース
• 開発、検証環境の使い捨て(すぐ作れるので、長期間リソースを割り当てなくていい)
• 類似システムの横展開
• 季節性のあるシステム
• 障害、災害対策
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.5
何が新しいか
• サーバーだけでなく、「環境全体」が対象
• サーバー、ストレージ、ネットワークなどインフラ要素すべて
• 環境を定義したコードで、同じ環境を「作り直す」
• 無停止型は、そもそも壊れないようにする
• クラスタ型は、同じ環境を用意しておき、切り替える
• 無停止/クラスタ、どちらもセットアップに職人が必要
• 職人に依存しない
• コードを実行すればOK
• 作って壊してが多いシステムでうれしい
• いっぱいいっぱいの時にうれしい (障害、災害時)
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.6
鳥かご = クラウド
けーん
無停止型
“うぬは死なぬ”
クラスタ型
“いつでもペア” “かごから呼び出す”
Phoenix Environments
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.7
ポイント
• 宣言的に環境を記述できる構成管理ツールを選ぶ
• 「あるべき姿」だけ書いておけばいい
• 手順や状況がどうであれ、ひとつのコードを実行すればあるべき環境が作られる、維持できるようにする
• 手順や状況を意識しなければいけないツールは、プロしか使わなくなる
• 要するに冪等性が大事
• sshを禁止しよう
• 常にツールを使う
• 必要な作業は、コードに残す
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.8
OpenStackとTerraformで作るPhoenix Environments
Terraform
OpenStack
けーん• Terraform
• オープンソース
• 手軽なので今回採用
• 代替案
• かごの外から
• HP OOなど歴史ある商用ツール
• かごに搭載の機能
• OpenStack Heat
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.9
いでよ不死鳥
• いでよ不死鳥
• terraform apply –var-file=<var-file>
• xxx.tfファイルのあるディレクトリで実行
• 何度流してもOK、欠けた部分は再生してくれる
• 例:サーバーが1台無くなっていたら、そこだけ再生してくれる
• 変数はファイル外だしのほうが別環境で再利用しやすい
• terraform plan で事前チェック可能
• 消えよ不死鳥
• terraform destroy –var-file=<var-file>
• バッサリ環境消せる
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.10
定義ファイルの記述例 (クラウド = Provider 定義)
# Configure the OpenStack Provider
provider "openstack" {
auth_url = "${var.auth_url}"
user_name = "${var.user_name}"
tenant_name = "${var.tenant_name}"
password = "${var.password}"
}
https://github.com/ToruMakabe/terraform-openstack/blob/master/environment.tf
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.11
定義ファイルの記述例 (サブネット定義)
resource "openstack_networking_subnet_v2" "subnet0" {
region = "${var.region}"
network_id = "${openstack_networking_network_v2.net0.id}"
cidr = "10.0.0.0/24"
ip_version = 4
}
https://github.com/ToruMakabe/terraform-openstack/blob/master/environment.tf
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.12
定義ファイルの記述例 (ルーター定義)
resource "openstack_networking_router_v2" "router0" {
region = "${var.region}"
name = "router0"
external_gateway = "${var.external_gateway}"
}
resource "openstack_networking_router_interface_v2" "router_interface0" {
region = "${var.region}"
router_id = "${openstack_networking_router_v2.router0.id}"
subnet_id = "${openstack_networking_subnet_v2.subnet0.id}"
}
https://github.com/ToruMakabe/terraform-openstack/blob/master/environment.tf
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.13
定義ファイルの記述例 (ブロックストレージ定義)
# Create a Volume
resource "openstack_blockstorage_volume_v1" "volume0" {
region = "${var.region}"
availability_zone = "${var.az}"
name = "volume0"
description = "sample volume"
size = 1
}
https://github.com/ToruMakabe/terraform-openstack/blob/master/environment.tf
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.14
定義ファイルの記述例 (サーバー定義 1/2)
# Create a server
resource "openstack_compute_instance_v2" "sample-server" {
region = "${var.region}"
availability_zone = "${var.az}"
name = "tf-sample-server"
image_id = "${var.image_id}"
flavor_id = "${var.flavor_id}"
key_pair = "${var.key_pair}"
security_groups = ["default"]
(続く)
https://github.com/ToruMakabe/terraform-openstack/blob/master/environment.tf
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.15
定義ファイルの記述例 (サーバー定義 2/2)
(続き)
network {
uuid = "${openstack_networking_network_v2.net0.id}"
}
floating_ip = "${openstack_compute_floatingip_v2.floatip0.address}"
volume {
volume_id = "${openstack_blockstorage_volume_v1.volume0.id}"
device = "/dev/vdc"
}
}
https://github.com/ToruMakabe/terraform-openstack/blob/master/environment.tf
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.16
けーん
© Copyright 2015 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.17
注意点
• 障害、災害対策に使う場合
• DBやファイルシステムにおいてあるデータは、再生のために別途救う必要があります
• あくまで救うのはインフラ環境のみです
• DBレプリケーションやオブジェクトストレージを活用しましょう