jazug福島 azure vm_20150404
TRANSCRIPT
Azure Virtual MachineInfrastructure as Code 始めてみた
木村忠宏 @kimura016
自己紹介
木村 忠宏(きむら ただひろ)
JAZUG仙台
サトヤ仙台
東北デベロッパーズコミュニティ 運営委員
Twitter @kimura016
Facebook http://www.facebook.com/kimuratadahiro
集合写真を2枚
今日の概要
•Microsoft Azure 仮想マシンについて
• Infrastructure as codeを始めてみる
Windows Server あるいは Linux の
仮想マシンを作成し、任意のアプリ
ケーションをインストール可能
• 既存の社内サーバーのクラウド移行に
• 検証・テスト環境として
• 自社データセンター被災時の災害対策用に
Microsoft Azure 仮想マシン
Microsoft Azure OS(ホストOS)
Microsoft Azure Hypervisor
コンピュート
・・ゲスト OS(仮想マシン)
Hyper-V
仮想マシンの展開パターン
イメージ (テンプレート)
プラットフォームイメージ(標準テンプレート)
Windows CentOS Ubuntu
VHD VHD VHD
VHD
・・・
マイイメージ(カスタムテンプレート)
(Generalize 済)
・・・
アップロード 仮想マシン
インスタンス化
イメージ化 コピー
BLOB ストレージ 仮想マシン
VHD
仮想マシン
BLOB に配置された VHD ファイルの堅牢性
BLOB に配置された VHD ファイルの堅牢性
仮想マシン
仮想マシン
BLOB に配置された VHD ファイルの堅牢性
拠点間複製(geo-replication)
パターン毎の責任範囲の考え方
ストレージ
サーバー
ネットワーク
OS
ミドルウエア
仮想化
データ
アプリケーション
ランタイム
OS
ミドルウエア
データ
アプリケーション
ランタイムユーザー管理
アプリケーション
データ
仮想マシンWindows Server Web サイトモバイルサービス
Office 365
オンプレミス IaaS PaaS SaaS
Infrastructure as Code始めてみた
きっかけはGoAzure 2015 への参加
「Infrastructure as Code for Azure」青木賢太郎さん/亀渕景司さん
http://www.slideshare.net/kamebuchi/infrastructure-as-code-for-azure
現状のインフラ作業の課題
・手順書はどれ?
・手順書の内容と、実機で状態が違う 資料の更新漏れ?
・毎回微妙に違う
・手間と時間がかかる
1台とか少ない台数なら良いけど、それ何台も何回もやるの?
→コードで管理、自動化
Infrastructure as Code
Immutableと冪等性(べき等性)
・Immutable (不変の)
→初期設定を状態を変えない。何回でも作り直しできる。
・冪等(べき等)
ある操作を1度行っても複数回行っ ても同じ結果(効果)になること
→これは課題を解決してくれそう!
・誰がやっても同じ結果になる
・ヒューマンエラーの回避(実行漏れ、手順書の更新漏れ)
・暗黙的作業の明示化(熟練技術者の暗黙知)
Azureでの基本
・Azure PowerShell, Azure クロスプラットフォーム CLI
Azureでの基本はおいといて・・・
・今までのインフラ構築作業
- 手順書をもとに手動による設定
・1stステップ
- シェルスクリプトによる設定
・2ndステップ
- Ansible、Chef等、構成管理ツールによる設定
構成管理ツール
・Ansible(アンシブル)
- Pythonで実装されている
PlaybookというYAML形式のファイルで設定記述
・Chef(シェフ)
- Rubyで実装されている
Rubyスクリプトで、
レシピと呼ばれるファイルを作成して設定記述
DemoAnsible Demo内容(事前準備含) ※ubuntu14.04 LTSにて実施
(1)Azure仮想マシンにAnsibleをインストール
sudo apt-get install python-pip
sudo pip install ansible
(2) inventory file(対象ホスト記述)の作成
ファイル名:localhost
以下1行を記述 今回は対象をlocalhostとする
127.0.0.1 ansible_connection=local
(3) Playbookの記述
ファイル名:sample.yml
以下、LAMP環境作成のためのapache, php, mysqlのインストール内容を記述
- hosts: 127.0.0.1user: azureusertasks:- name: "apt-get install apache"
apt: pkg=apache2sudo: yes
- name: "apt-get install php"apt: pkg=php5sudo: yes
- name: "apt-get install mysql"apt: pkg=php5-mysqlsudo: yes
(4) Ansibleの実行
以下コマンドを実行。
ansible-playbook sample.yml -i localhost -K
→” –i ”オプションでinventoryファイルを指定
“ -K ”オプションでsudoのパスワードを要求する
“-K”の代わりに”--ask -sudo -pass”でも可
課題
・新しい構成管理ツールを使うための学習コスト
・コードで設定を記述するが、テストをどうするか?
テスト用ツールあるが、例えばAnsibleだとテストはRubyで書かないといけない(Serverspec)など