Codeの様々な手法を、Windowsサーバーエンジニアのためにまとめて紹介します。クラウドサービスに代表される仮想化が主流となった現在では、サーバー自体も仮想化基盤上でソフトウェア的に組み立てて利用する必要があるため、インフラエンジニアといえどもコードを書いてソフトウェア開発者として作業を行うということが必須になってきています。Codeの様々な手法をWindowsサーバーエンジニアのために、まとめて紹介します。Codeでサーバーのソフトウェア構成を制御かつてサーバー管理者は、システムインフラ(基盤)の構築を、ドライバー片手にサーバーにメモリやHDD、ネットワークカードなどを差し込んで組み立てていました。ネットワークケーブルも、実際にスイッチからNICまで線をひっぱりながら繋いでいたような状況で、まさに手作業の世界です。クラウドサービスに代表される仮想化が主流となった現在では、サーバー自体も仮想化基盤上でソフトウェア的に組み立てて利用する形態に変わりました。Codeはこれまで手作業で行ってきた作業を、コードを実行することで実現するという考え方です。Codeという考え方で、サーバーのソフトウェア構成を制御するという考え方もあるようです。Windowsベースのサービス開発を長年続けてきた私にとっては、サービス開発=プロビジョニング=自動化という絶対条件があり、Windowsサーバーや仮想マシンをコードによって制御するということは、改めて定義しなくとも日常的にごくあたりまえにやってきたことでした。Codeとはこういったものだという定義や解釈は様々に書かれているので、ズバリこれ!という指摘は難しいのですが、個人的には、コードを書いて、構築~運用~管理を簡単にして楽をしようという感じです。これまで、インフラエンジニアは物理的なサーバーに対して設置、組み立てなどを行い、Windowsサーバーの機能を細かく構成し、せいぜいバッチ程度のスクリプトを利用してサーバーの運用管理を行うといった具合でした。クラウド全盛期となった現在においては、物理的なサーバーをサービスごとに構築するといった作業は少なくなり、最小の物理サーバーでHyper-Vを展開し、サービスや用途ごとに多くの仮想マシンを作成して上手にリソースを振り分けて利用することが主流となっています。インフラエンジニアといえどもHyper-Vや仮想マシンを管理するためにはコードを書いてソフトウェア開発者として作業を行うということが必須になってきている状況です。いくらコードでWindowsサーバーを制御することができるようになってきたとはいっても、アプリケーション開発者がいきなりHyper-V上の仮想マシンを使ってシステム構築ができるものではありません。Windowsサーバーのことをよく理解した、Windowsサーバーエンジニアの力が必要となります。Codeの様々な手法をWindowsサーバーエンジニアのために、まとめて紹介したいと思います。Managerを利用することで、IaaSの仮想マシンやサービスの利用構成をJSON形式の定義ファイルで展開することができるようになっています。Notation)はデータとして見やすく、システムにとっても解析しやすいシンプルで軽量なテキストファイル形式の構文です。CodeをAzure上で実現することができるようになっています。Azure/azure-quickstart-templates)テンプレートの使い方は簡単です。適当なテンプレートを選択してみましょう。Anti-Malwareの機能があらかじめ設定された仮想マシンのテンプレートを選択しました。Azure」ボタンを選択すると、そのままAzureポータル画面が開きます。自動的にAzureポータルへ)管理者名やパスワードなど必要なパラメーターを設定すると、自動的にJSON形式のテンプレートが作成されます。このまま「作成」ボタンを選択すればAzure上に仮想マシンが作成されますし、これをテンプレートとして保存しておくこともできます。テンプレートとして保存しておけば、同様の仮想マシンを、パラメーターを変えて簡単に作成することも可能です。作成されたJSON形式のテンプレート)GitHubからダウンロードしたり、オリジナルで作成したJSONファイルを元に仮想マシンなどを作成したりする場合は、Azureポータルから「テンプレートのデプロイ」を選択して、JSONファイルを直接作成、編集することも可能です。JSONファイルを作成・編集)さらにAzureでは、リソースマネージャーベースのポータルで作成した仮想マシンやサービスの構成情報を、JSON形式のテンプレートファイルとして出力することもできるようになっています。テンプレートのエクスポート)既存の仮想マシンなどの構成をコピーして使いまわしたり、簡易的なバックアップとしても利用できます。Serverと同様にPowerShellからも管理することが可能となっています。具体的な細かい設定方法は参考サイトを参照してもらうということで、簡単な手順を紹介します。インストールAzureを管理するための専用モジュールをインストールしておきます。https://azure.microsoft.com/ja-jp/documentation/articles/powershell-install-configure/インストール後にインターネット接続可能な手元のPCからPowerShell経由でAzureに接続して、Azure上にコードベースで仮想マシンを作成できるようになります。PowerShellのコードを作成するAzure上に仮想マシンを作成する場合、クラシックポータルに作成する方法と、リソースマネージャーベースの新しいポータルに作成する方法の2つがあります。異なるため、それぞれで実行するPowerShellのコードが異なります。Codeを実現することができます。現在の主流はリソースマネージャーベースの新しいポータルとなっており、Microsoftもこちらを推奨しています。Codeの恩恵を受けることができます。Codeを実現することができます。Azure」のリソースマネージャーベースの新しいポータルであるWebインターフェイスや機能をそのまま利用して、プライベートクラウドのサービス提供を可能にするシステムです。Codeも当然同じように利用できる環境がオンプレにも提供されます。1(TP1)が提供されていますが、正式リリースは2017年以降となる予定です。Server管理者の必須ツールとなっているPowerShellです。Serverに対しての制御はほぼPowerShellのコマンドレッドから実行可能となっています。ServerのPowerShellは、改めてインストールする必要がなく、標準で搭載されています。ISEという専用の統合開発環境も用意されています。Hyper-Vの役割がインストールされていれば、たった一行のNew-VMコマンドレッドで簡単に仮想マシンが作成できてしまいます。D:\HV\VM01.vhdx10台の仮想マシンもこれだけのコードで完了です。1GB}New-VMコマンドレッド以外にも、仮想マシンの起動やネットワークスイッチへの接続、チェックポイントの作成など、Hyper-V上の仮想マシンでできるほとんどのことが、PowerShellのコマンドレッドで記述することができます。2016では、注目の新しい技術であるWindowsコンテナーや、NanoServerが提供される予定です。これらの新技術につては、すべてPowerShellやDockerなどのコマンドでの操作・管理のみとなっています。サーバー管理においてはGUIではなくPowerShellが標準となりつつあります。R2と同時期にリリースされた、PowerShellをベースとする構成管理ツールです。Codeも実現することが可能となっています。構成方法としては、それぞれの項目についてPowerShellのコマンドレッドを実行するというわけはなく、Configurationキーワードを使って宣言構文を作成して実行するといった形態となっています。TP5ではバージョン5.1がすでにインストールされています。PowerShellで実行します。ServerにWebサーバー(IIS)の役割を追加して、ASP.NETの機能を有効化します。-IncludeManagementToolsこちらを実行することとなります。Webサーバーの役割が有効となっている場合はエラーとなってしまいます。スクリプト化して自動化する場合にはそういったエラー対策も必要となってきます。DSCではPowerShellのコマンドレッドでインストールを行うのではなく、Configurationキーワードで定義された内容にサーバーを構成することになります。Webサーバーの役割が有効となっていたとして、構成定義としてはエラーとならず、スキップされるだけとなります。-VerboseDSCの利点としては、PowerShellのコマンドで、ある意味強制的に状態を変更するのではなく、あるべき状態を定義して、その構成情報に基づいて必要な部分だけサーバー自身が変化するといった感じでしょうか。サーバー管理者は構成情報を定義するだけですので、重複設定によるエラーや整合性の矛盾といった問題がなくなり、PowerShellのスクリプト作成によるエラー処理などの手間が大幅に削減されます。Codeの恩恵を受けるために、開発者と同様の開発スキルを必要とするといった矛盾を解消してくれるものとなります。付録として、PowerShellのサンプルスクリプトを紹介します。ServerのHyper-Vでは、PowerShellのコマンドによって仮想マシンを作成できますが、Azureのリソースマネージャーのように、構成情報だけをエクスポートする機能がありません。仮想マシンのエクスポートという機能はありますが、これは仮想ハードディスクもまるごとエクスポートするので、それなりに時間がかかり使う機会を選ぶ場合があります。簡単に仮想マシンの構成情報を取得できて、さらにカスタマイズもできるようにするためのサンプルスクリプトです。C:\Script\VM01.ps1Hyper-V上の既存の仮想マシンの構成をPS1ファイルに出力します。仮想マシンVM01を作成するためのスクリプトが生成されます。Hyper-V上で仮想マシンを削除してしまった場合、仮想ハードディスクが残っていればこのVM01.ps1を実行することで同様のハードウェア構成で作成されます。VM01.ps1のパラメーター$VMNameの値を変更すれば、別マシン名でVM01を同様の構成で仮想マシンを作成することができます。VM01と同時に起動するのであれば、パラメーター$DiskDriveで仮想ハードディスクも別のものを指定する必要があります。同様の構成でいくつも仮想マシンをコピーしたい場合などにも有効です。現時点では、IOPSやNUMAの詳細設定値などについては対応していませんが、Sample.ps1をカスタマイズすることで、完全なコピーを作成するスクリプトも可能です。Codeの例をいくつか紹介しました。Codeが実現できることがお分かりいただけたと思います。Codeはインフラエンジニアにとって決して難しいものではなく、より正確に、より効率化を実現することのできる新しい武器となります。勝一GMOインターネット株式会社1999年6月GMOインターネットに入社。Windowsを用いたホスティング事業の立ち上げの際、サービス開発からその後の保守・運用まで1人で担当。2010年には「お名前.comWindowsデスクトップ」をリリースし、マイクロソフト社と強い信頼関係を構築。PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。