SlideShare a Scribd company logo
Azureで始めるDevOps
Japan Azure User Group 福岡支部
株式会社オルターブース 小島 淳
自己紹介
元某有名パンクバンド出身
あるときは
さすらいのハードコアお父さん。
あるときは
釣り師。
あるときは
ゴッドハンド整体師(マジです)。
たまにクラウドコンサルやってま
す。
株式会社オルターブース 代表取締役
小島 淳(Kojima Atsushi)
システムマネジメントのプロフェッショナル
「オペレーションアーキテクト」を提唱し、シ
ステム運用の在り方を大きく変える超マネジメ
ント思考エンジニア。JAZUG福岡支部長として
も日々クラウド技術を啓蒙してます。
Facebook
https://www.facebook.com/a2c.kojima
Profile
ちょっとだけ
4
株式会社オルターブース
オフィスは福岡ですが、主に東京のお仕事が中心。
クラウド専門のコンサル~デベロッパー。
主にエンタープライズ向け業務システムとWindowsスト
アアプリとAzureのコンサルが中心。
超お堅い業界を
超ちゃらくやる
5
DevOpsってなに?
おいしいの??
6
新しいシステム運用の形
開発部門と運用部門が協力し、ビジネスリスクを
軽減させるための仕組みのことです。
7
暗黙知をなくせ
システム運用上で最も大きいビジネスリス
クは「技術力」といわれています。
この技術力が属人化していくと、いわゆる
「暗黙知」ができあがりノウハウ蓄積が困
難になっていきます。
この「暗黙知」を無くすことがDevOpsのメ
リットと言えます。
8
インフラをコード化する
マニ��アルでの手作業の場合、オペレー
ション実行時のログが結果になる。
暗黙知を無くすには「あるべき姿」を作り
上げることが重要です。
そのために、インフラのあるべき姿を
「コード化」することで誰でも同じオペ
レーションで同じ結果を残し、なおかつロ
グ=結果に依存しない環境を作ります。
9
リーンソフトウェアの原則
DevOpsを導入するときの原則に近い。
原則1:無駄をなくす
原則2:品質を作り込む
原則3:知識を作り出す
原則4:デメリットを把握する
原則5:素早く提供する
原則6:人を尊重する
原則7:全体を最適化する
10
誰のためのDevOpsか
• 開発者側でのDevOps
Continuous Deliveryとか。
• 運用者側でのDevOps
Infrastructure as a Codeとか。
• 2つのDevOpsのコラボレーション
Immutable Infrastructureとか。
11
継続的インテグレーションと���、継続的にビルドを実行
しソフトウェアをインテグレーションしたときに発生す
る様々な問題を早期に検出し、フィードバックサイクル
を短くしてソフトウェア開発の品質と生産性を向上させ
る仕組みのことです。
継続的インテグレーション
デプロイ
コンパイル
インスペク
ション
テスト
DevOps全体像
13
Microsoft Azure
Virtual machine
Config Management Server
Web Site
Cloud Service
• PowerShell DSC
• Chef
• Puppet
• Ansible
代表的な構成管理アプリケーション
仮想マシンおさらい
15
Azureが提供するコンピューティングサービス
Web サイトWeb サイト
アプリケーション
データ
クラウド サービス
アプリケーション
データ
ファイアウォール
仮想ネットワーク
仮想マシン
アプリケーション
データ
ファイアウォール
仮想ネットワーク
OS
オンプレミス
アプリケーション
データ
ファイアウォール
ネットワーク
OS
仮想化
ハードウェア
IaaS
PaaS
仮想マシン
Microsoft Azureが提供するコンピューティング
サービスの一つで、仮想マシン(VM)をクラウド
上に構築できる。
Windows Server あるいは Linux の仮想マシンを作成し、任意のアプリ
ケーションをインストール可能。
仮想マシンのベースとなる
仮想アーキテクチャ
ハードウェア(x64アーキテクチャー)・Intel VT・AMD-V
Windows Hypervisor(仮想化レイヤー)
ペアレンタル
パーティション
VHD
OS Image
VHD
OS Image
VHD
OS Image
VHD
OS Image
Hyper-V
イメージ (テンプレート)
プラットフォーム イメージ
(標準テンプレート)
Windows CentOS Ubuntu
VHD VHD VHD
VHD
・・・
マイ イメージ
(カスタムテンプレート)
(Generalize 済)
アップロード 仮想マシン
インス
タンス化
イメージ化 コピー
BLOB ストレージ 仮想マシン
VHD
Microsoft
Azure
・・・
仮想マシンの展開パターン
オンプレミスからクラウドへをシームレス
にサポートする。
Windows Server
Hyper-V
オンプレミスの Hyper-V と Azure
の間で仮想マシンを相互に移行可能
インスタンスサイズ
• 追加ディスクも同様に BLOB スト
レージに保存される
• ディスク 1 本当たりの最大サイズは
1023 GB
• 接続可能な最大数は仮想マシンの
サイズによって異なる
サイズ コア数
メモリ容
量
(GB)
データ
ディスク
数
A0 共有 0.768 1
1 x
500
A1 1 1.75 2 2 x 500
A2 2 3.5 4 4 x 500
A3 4 7 8 8 x 500
A4 8 14 16
16 x
500
A6 4 28 8 8 x 500
A7 8 56 16
16 x
500
A8
(※)
8 56 16
16 x
500
A9
(※)
16 112 16
16 x
500
ディスクの追加
A8/A9は大規模コンピューティング用
としてRDMA(Remote Direct
Memory Access)で構成されている。
ディスク接続状態(A1の場合)
仮想マシンの2つの階層レベル
■Basic (基本) レベル
Azure ロード バランサーと自動スケーリング機能が提供さ
れず、料金は最大で 27% 低く設定されている。
■Standard(標準)レベル
全ての機能が提供されている最も標準なレベル。
2つの階層レベルは管理ポータルより切り替えが可能。ただ
しすでにAzure ロードバランサーや自動スケーリングなど
を組み込んである場合は、一端それらの機能を削除しなけ
ればダウングレード(標準→基本)は出来ない。
PowerShell DSC
で簡単サーバー構築
24
PowerShellおさらい
25
• MS-DOS時代から使われてきたコマンドスクリプト。豊富なコマン
ド群があり現在でも実用性が高く多くのシステムで利用されている。
バッチファイル
(.bat)
• VBのスクリプト版。と言ってもVisualではない。VBライクに使える
ので気軽に利用できる。VBAはまた別。
VBScript
(.vbs)
• JavaScriptをマイクロソフト独自の仕様によって拡張することで汎
用性を増した。最近流行っている.js的なスクリプトではない。
Jscript(.js)
• .NETが利用できることから様々なアプリケーションが動かせる。ま
た多くのMS製品がPowerShell拡張を持っているので汎用性が高い。
PowerShell
(.ps1)
PowerShellおさらい
26
実行環境
PowerShell スクリプト
PowerShell エンジン
COM .NET Framework
PowerShellおさらい
27
OS 1.0 2.0 3.0 4.0
WinSrv 2003 ○SP1 ○SP2 × ×
WinSrv 2003 R2 ○SP1 ○SP2 × ×
WinSrv 2008 ○SP1 ○SP2 ×
WinSrv 2008 R2 ◎ ○SP1 ��SP1
WinSrv 2012 ◎ ○
WinSrv 2012 R2 ◎
Windows 7 ◎ ○SP1 ○SP1
Windows 8 ◎ ×
Windows 8.1 ◎
GUIで快適操作
コマンドラインでPowerShellを利用する場合、デバッ
グやコードエディタがないため非常に効率が悪いです。
そこでコードエディタ、実行環境、デバッグ環境が統合
されたPowerShell ISEを使うことをお勧めします。
コード保管やデ
バッグ、ステッ
プ実行などが可
能。
また、マウス
オーバーでヘル
プ表示されます。
PowerShellおさらい
PowerShell DSCとは
PowerShell DSCは、WMF4.0から新たに導
入されたサーバー構成管理ツールです。
PowerShell4.0がインストールされている
Windows Server 2012 R2とWindows8.1
からは標準で使えます。
ChefやPuppetと同じくサーバー構成をコー
ド化し、冪等性を持ちます。
29
PowerShell DSCの特徴
• DMTF標準に沿ってManaged Object
Format(MOF)やWS-Managementで構成
されている。
• Pullだけでなく、Pushもサポートしている。
• Pushでは、サーバーとノード間の通信には
Windows版WS-Management実装のWinRM
を利用する。
• Pullでは、サーバーとノード間の通信には
HTTP(あるいはHTTPS)を利用する。
• PowerShellで記述ができる。
30
PowerShell DSCの構成
31
DSC Server
Node
Node
Push
DSCサーバーが各ノードに対して問い合わせて
ノードを構築していく。
Pull
ノードがDSCサーバーに対して「あるべき構成」
が変化してないかどうかを定期的に確認する。
.MOFファイル
MOF(Managed Object Format)とは、
サーバー構成を既述したファイルだが、こ
れを手書きで書くととても大変。
DSCはこの.MOFファイルを簡単に生成する
Configurationが用意されていて、
Configurationを元に.MOFファイルが自動
生成されます。
32
Resource拡張
DSCにはResourceと呼ばれるPowerShellの
拡張モジュールが用意されており、目的に応じ
たResourceを利用することで簡単に構成管理
をすることが可能です。
ちなみにResourceは自作することも出来ます
が、拡張Resource Kitを公式からダウンロード
できます。
http://gallery.technet.microsoft.com/scriptcenter/DSC-
Resource-Kit-All-c449312d
33
宣言的構文
DSC Resourceを使って「あるべき姿」を
コード化したものを「Configuration」と
言います。DSCではConfigurationを「宣言
的構文」で記述します。
宣言的構文をを用いたConfigurationでは従
来の「どのように構成するか」ではなく、
シンプルに「何をしたいか」を記述します。
34
コード比較
従来のPowerShellコード
Web Server(IIS)の機能が未インストールかどうか確認
してから、未インストールならIISをインストールする。
Import-Module ServerManager
If (-not (Get-WindowsFeature "Web-Server").Installed)
{
try
{
Add-WindowsFeature Web-Server -IncludeManagementTools -ErrorAction Stop
}
catch [Exception]
{
Write-Error $_
}
}
35
コード比較
DSCのコード
Web Server(IIS)の機能が未インストールかどうか確認
してから、未インストールならIISをインストールする。
Configuration IISInstall
{
Node localhost
{
WindowsFeature IIS
{
Ensure = "Present"
Name = "Web-Server"
IncludeAllSubFeature = $true
}
}
}
36
冪等性(べきとうせい)
冪等性とは「何回実行しても同じ結果を返
す」という概念です。これはChefやPuppet
でも担保されている概念で、オペレーショ
ンの品質保証にも繋がる大事なことです。
一度インストールしたら、2回目は失敗する
ということがないように「あるべき姿」を
常に捉え、自動化をより安全なものにしま
す。
37
実装
38
DSCによる実装の流れ
以下はPush構成であった場合の流れです。
1. Configurationを書く。
2. Configurationを実行して、Nodeごと
に.MOFファイルを生成する。
3. .MOFをファイルを対象ノードに転送して
実行させる。
39
シナリオ
Local ServerにIISとASP.NETを実装する。
PowerShellのバージョンを確認する。
40
$PSVersionTable
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34014
BuildVersion 6.3.9600.17090
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
Configuration構文の構造
41
Resource
Block
Configuration WebSiteConfigInstall
{
Node "localhost"
{
WindowsFeature IIS
{
}
}
}
Configuration
Block
Configuration Block:Configuration名を定義するブロック
Node
Block
Node Block:コンピュータノードを定義するブロック
Resource
Block
Resource Block:処理内容を記述するブロック
Resource code
42
WindowsFeature IIS
{
Ensure = "Present"
Name = "Web-Server"
}
WindowsFeature IISMgmt
{
Ensure = "Present"
Name = " Web-Mgmt-Tools"
}
WindowsFeature ASP
{
Ensure = "Present"
Name = "Web-Asp-Net45"
}
IIS機能追加
IIS管理機能追加
.NET4.5追加
.MOFファイルの生成
Configurationの最下部に以下のコマンドを
挿入する。
43
WebSiteConfigInstall -OutputPath . -Node localhost
-OutputPath:.MOFファイルの生成先
-Node:対象Node
Configurationを実行すると指定したPathに
Node Block毎に.MOFファイルが生成され
る。
DSCとNode間での接続設定
Configurationを各ノードに配布するには以
下のPowerShellコマンドをDSC Serverお
よびNodeで実行しなくてはいけない。
44
Enable-PSRemoting -Force
Set-Item wsman:localhostClientTrustedHosts -Value * -Force
Set-ExecutionPolicy RemoteSigned
実装
DSC ServerとNode間でのポリシーセット
が完了したら、.MOFファイルをNodeに転
送して実行させます。
※今回はlocal Serverが対象です。
45
Start-DscConfiguration -Path .WebSiteConfigInstall -Wait -Verbos
-Path:.MOFファイルがあるフォルダ+
Configuration名
-Wait:完了するまで待機する
-Verbos:詳細メッセージ出力
実は。。。。
46
Linuxも!!
Node側セットアップ
47
yum groupinstall ‘Development Tools‘
yum install pam-devel openssl-devel
mkdir /root/downloads
cd /root/downloads
wget https://collaboration.opengroup.org/omi/documents/30532/omi-
1.0.8.tar.gz
tar -xvf omi-1.0.8.tar.gz
cd omi-1.0.8/
./configure
make && make install
yum install python python-devel
cd /root/downloads
Node側にてomiserverをセットアップする。
Node側セットアップ
48
wget
https://github.com/MSFTOSSMgmt/WPSDSCLinux/releases/download/
v1.0.0-CTP/PSDSCLinux.tar.gz
tar -xvf PSDSCLinux.tar.gz
mv ./dsc/* ./
make
make reg
続き
OMI_HOME=/opt/omi-1.0.8 /opt/omi-1.0.8/bin/omiserver -d
omiserverの起動。
Configuration Code
49
Configuration MyDSCDemo
{
Import-DSCResource -Module nx
Node “to-linux.cloudapp.net"
{
nxFile myTestFile
{
Ensure = "Present"
Type = "File"
DestinationPath = "/tmp/test"
Contents="This is my DSC Test!"
}
}
}
MyDSCDemo -OutputPath C:UsersazureuserDesktopPS_DSC
Nodeへ配布
50
$cred=Get-Credential -UserName:"root" -Message:"Root User?"
$opt = New-CimSessionOption -UseSsl:$true -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$linuxcomp=New-CimSession -Credential:$cred -ComputerName:to-
linux.cloudapp.net -Port:5986 -Authentication:basic -
SessionOption:$opt
Start-DscConfiguration -CimSession:$linuxcomp -Path:"C:temp" -
Verbose -Wait
Immutable
Infrastructure
51
壊す、作る、壊す、・・・
システム運用のリスクは本番環境への変更オペレーションです。本番
環境ではすでにサービスが稼働しているため、何かトラブルがあれば
サービスダウンの危険性が高まります。解決策は意外と簡単で本番環
境に「触らない」ことです。
Immutable Infrastructreとは本番環境と全く同じ構成のステージン
グ環境を用意し、それらを交互に入れ替えていく運用方法です。
Immutable Infrastructure
本番サーバー ステージングサーバー
変更オペレーション
Docker
DockerとはDocker社が開発するOSSでコンテナ型仮想アプリケーションです。
※従来の���ストOS型仮想化と仕組みは似ている
Immutable Infrastructure
主な機能
Dockerは、コンテナーでアプリケーションを実行するために以
下の機能を持ちます。
 コンピューターリソースの隔離および制限
 他のホスト、他のコンテナーとのネットワークの構成
 ファイル/ディレクトリの世代と差分の管理
Dockerの特徴の1つとして、新しい独自技術はほとんど使って
いないということがあります。コンテナ管理に必要となる既存
のOSSを組み合わせて、コマンドラインおよびREST APIで手軽
かつ効率良くコンテナー管理ができるようになっていることが、
Dockerが広く支持され、注目されている理由だと思います。
Immutable Infrastructure
Azureの展望
• Docker VM 拡張(新ポータルとxplat-cli)
http://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-docker-vm-extension/
• CoreOSイメージ
http://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-linux-coreos-how-to/
• Nano Server
http://blogs.technet.com/b/server-cloud/archive/2015/04/08/microsoft-announces-new-container-
technologies-for-the-next-generation-cloud.aspx
• マイクロソフトのコンテナ仮想技術
Windows Server Container
Hyper-V Container
Immutable Infrastructure
詳しくは
de:codeで!!
56
Azure
Automation
57
Azure Automationって?
PowerShellスクリプトを定期実行するため
のサービス。
Runbookと言われるPowerShellワークフ
ローを使って簡単にプロセス処理ができる
ので、定期ジョブ以外にも使い道が多くあ
ります。
58
Runbook
Runbookは既存のPowerShellワークフロー
を活用することも、自作もできるが
Runbookギャラリーから必要なRunbookを
取得し利用した方が手間がなく、簡単です。
RunbookとはChefでいうところの
cookbookと同じようなものと考えてもいい
と思います。
59
だが、しかし・・・・
60
Runbook
RunbookギャラリーにあるRunbookは結構
中途半端なやつが多くて、修正が必要にな
る可能性が高いorz
61
Runbookの作り方
http://www.techno-
officer.com/blog/archives/1671
62
Automationの使い方
1. 管理証明書の作成と管理ポータルへの
アップロード
2. ASSETの作成
3. Runbookの作成
4. テスト、発行
63
まとめ
Azureは他にも様々なサービスを展開してい
ています。是非楽しんで試してみてくださ
い。
64
ご清聴
ありがとうございました。
65

More Related Content

Azureで始めるDevOps