openstackとterraformで作る phoenix environments

18
© 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

Upload: toru-makabe

Post on 05-Aug-2015

1.278 views

Category:

Technology


2 download

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レプリケーションやオブジェクトストレージを活用しましょう

© Copyright 2014 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.