Tech Sketch Bucket of Technical Chips by TIS Inc.

Microsoft Azure を意のままに操る Ansible 事始め

Pocket

こんにちは、今回本ブログでご紹介するTipsは一言でいうと「Ansible で Microsoft Azure を操作してみる」です。クラウドサービスである Microsoft Azure を Ansible という自動構築・オーケストレーションが行えるオープンソース・ソフトウェア(以下:OSS)を使って操作してしまおうという、今回はその序章です。

MS-Azure_rgb_Blk ansible_wordlogo_black_medium

はじめに

クラウドサービスを利用する場合、専用のUI、主にWebベースのポータルを利用する事があります。GUIポータルの利用は操作しやすくとてもわかりやすいですが、実際の運用上では柔軟に、簡便に、迅速に構築・運用管理することが求められ、その点では向かないケースがあります。一般に様々なクラウドサービスは、そのクラウドサービス用に用意されたAPIで外部のツールから操作を行うことができ、前述の観点においてクラウドを十分に活用できます。むしろそれができるからこそクラウドサービスを利用する価値があるといえます。 このクラウドサービスのAPIを使った構築・運用は、これまでのシステム構築・運用のノウハウとは勝手が異なるため、少しばかりの知識が必要になります。できるだけ、今持っている知識・技術でスマートにクラウドサービスの活用を実現したいものです。その手助けになれる OSS として私が注目したのが Ansible です。私以外のエンジニアの中でも注目されています。

【Google Trend より(検索ワード:Ansible、カテゴリ:オープンソース)】

Google Trend

例えば「自分のPCから、Azure 上に仮想マシンを起動し、さらにその上で必要な開発環境も準備・サービスを動かし、アプリケーションをデプロイする。」といったような事が1オペレーションで可能になります。

前置きが長くなりましたが、百聞は一見にしかずということでさっそく私が試した内容を記事に挙げましたのでご覧ください。なお、本記事をご覧のみなさんは Microsoft Azure についてはご存知な方も多いとおもいますが、Ansible についてはまだあまりご存知ない方もいらっしゃるとおもいますので少しそのあたりも補足するよう以下のようなアジェンダで構成しています。既に両者ともある程度勝手を知っていて、スグに試したいということであれば「Ansible を使って Azure 上に仮想マシンを立ち上げよう」からご参照ください。


アジェンダ

  • はじめに(本セクション)
  • Microsoft Azure について
  • Ansible について
  • Ansible を使って Azure 上に仮想マシンを立ち上げよう
  • おわりに

【本稿のゴールイメージ】 boot up


Microsoft Azure について

Microsoft社のクラウドサービスです。NIST(National Institute of Standards and Technology:米国標準技術局)が公開しているクラウドコンピューティングのサービスモデルの定義でいう、PaaS(Platform as a Service) , IaaS(Infrastructure as a Service)をサポートしていると言えます。Microsoft 社というと「Windows」をスグに思い浮かべる方も多いと思いますが、Microsoft Azure では Windows というくくりにとどまっておらず、とてもオープンなプラットフォームが利用できます。新しい機能やサービスがこれからもどんどん利用できるようになってくるでしょう。

Microsoft Azure Web Page

Ansible について

実は2013年頃くらいに発足したOSSとしてはまだ新しいプロジェクトです。昨今赤丸急上昇中のOSSとなっており、DevOps を実現するツールとしても注目されています。それはとても簡単なのに利用範囲が広く強力だからです。新しいソフト・ツールを使うということは新しい知識を覚えなければならず、ソフトや扱う人によっては多くの時間を要しますし、最悪は使うのを諦めてしまうこともあるでしょう。Ansible は学習コストがとても少ないものとなっています。故に少ない時間で熟練できます。また、エージェントレスでスグはじめることができ、本番環境への適用までの時間もとても短くできます。我々ITに携わる者にとって、すぐに使えるソフトウェアはそれだけで価値です。また、システムの構成情報を Dev と Ops で共通言語化できるのも特徴です。更に簡単なのに自動構築のみならずオーケストレーションも出来る点がクラウドとの親和性も高めています。

Ansible Web Page

簡単ではありますが、私が入門編として講演したコンテンツをスライドシェアに公開しております。まだご存知ない方は一読いただくとこの後のセクションを読む上で理解の助けになると思います。

Ansible を使って Azure 上に仮想マシンを立ち上げよう

Microsoft Azure(以下Azure)上で仮想マシンを立ち上げるやり方を具体的に解説してきます。
今回の具体的な目標は「Ansibleを使ってAzure上でWindows Server 2012を起動する」です。 ステップは以下のようになります。

  1. Microsoft Azure の準備
  2. Ansible マシンを用意
  3. Ansible の実行
  4. アクセス・ログイン確認

1. Microsoft Azure の準備

Azure において以下の準備が必要です。

1-1. Azure アカウント
1-2. Azure CLI インストール
1-3. ストレージアカウント
1-4. 管理証明書

1-1. Azure アカウント

こちらは、Azure の Web サイトから登録・取得してください。完了後、サブスクリプション ID を確認することが出来ます。この ID 必要です。まだお持ちでない方も1か月間の無料評価版がついておりますのでこれを機にお試しいただけます。ここでは詳細な作成方法はここでは割愛しますので、Azure アカウント作成については こちらをご参照ください。 Get Started

1-2. Azure CLI インストール

Azure をコマンドレベルで操作するユーティリティがあります。Ansible を使う上で必須なわけではないですがこれを使うほうが手っ取り早い事がわかりました。以下は Azure CLI を Ubuntu Linux にインストールする例です。

Azure CLI Web Page

Azure CLI を使用するにあたって、Azure で作ったアカウントを認証するための設定が必要です。

指示されたようにファイルをダウンロードして、以下のように Linux マシンにインポートします。

これで Azure の自分のアカウントで Azure CLI が利用できるようになります。

1-3. ストレージアカウント

これは Azure ポータルまたは Azure CLI にて作成することが出来ます。この時、作成するロケーションに注意します。例えば日本であれば、日本(西)「Japan West」があります。これは後に起動する仮想マシンと同じロケーションにします。アカウントを作成すると、ストレージアカウント名が確認できます。詳細な作成方法は割愛します。

Azure Document Center

ストレージアカウントは1度でも仮想マシンを作った事があるとそれに準じて自動で作成されています。それを使っても構いません。

1-4. 管理証明書

外部 API からのアクセスするアカウントを Azure 側で認証するために必要なものです。Ansible で操作する場合も必要です。Azure CLI をセットアップした後は既にクラウド上に管理証明書が保存されています。クライアント側(操作する側)に秘密鍵を含んだ証明書が必要であり、それを取得します。Azure CLI を使ってそれをエクスポートします。

2. Ansible マシンを用意

Linux マシンを用意します。ここでは前述の Azure CLI をインストールしたマシンと同じです。

2-1. Ansible インストール
2-2. Ansible 実行準備(インベントリファイルとプレイブック)

2-1. Ansible インストール

Ansible をインストールします。ディストリビューションによらず簡単です。他、Mac OSX をご利用の方は別途 Ansible マニュアルを参照してください。

実は Azure 上に Windows 系の仮想マシンを起動させるためには、投稿時点の Ansible 1.9.x 系のバージョンではなく次期バージョンである 2.0.0 以上が必要です。ここでは先取りでこのバージョンを使います。(GA バージョンのインストールは【補足】を参照してください。)

Ansible は専用のモジュールを使って様々な処理を実行します。今回は Ansible で用意されている Azure モジュールを使います。このモジュールは以下の環境でサポートされています。

  • Python >= 2.6
  • Python azure module >= 0.8.0 (Ansible マニュアルは少し古い情報)

2つめの部分からわかるように、Python の Azure モジュールが必要なのでインストールします。

投稿時時点で、Azure 用の Python モジュールは1.0.2が最新ですが、1.0.2は Ansible の Azure モジュールが対応していない事がわかっているため0.11.1を使っています。

2-2. Ansible 実行準備(インベントリファイルとプレイブック)

Ansible の実行に必要なファイルは「インベントリ」ファイルと「プレイブック」ファイルです。今回はそれぞれ以下のように作成します。

インベントリファイルはコンフィグレーションを行いたいターゲットを指定します。通常ホスト名やIPアドレスを記述しますが、ターゲットがクラウドサービスそのものである場合は「localhost(127.0.0.1)」を指定します。

通常、Ansible モジュールはそのターゲットにコピーされてから実行されることになります。しかし、クラウドサービスそのものの操作は、まず Ansible 実行ホスト側でモジュール(今回であれば Azure 用のモジュール)を動かすことになるため、localhost を指定します。

プレイブックファイルではコンフィグレーションを行いたい内容を書きます。今回は Azure モジュールを使って仮想マシンの起動に必要な情報を書いています。Ansible の Azure モジュールについての使い方はマニュアルをご参照ください。Ansible Azure Module

インベントリは INI 、プレイブックは YAML というフォーマットで書かれています。「フォーマットを覚えなければならないのか?」と思うかもしれませんが、これらのフォーマットはとても単純で、直感的に扱えます。YAML はいわば日本語の箇条書き(それを入れ子にする)をのようなフォーマットです。フォーマットについては前述の私のスライドや Ansible のマニュアルに書かれている程度の内容がわかれば事足ります。Inventory , YAML Syntax

上記の Azure モジュールの各オプションで Azure 側の情報を知らないとわからないものとして、 image , location , role_size があります。これらは自身で選択することになります。まず、image と location は Azure CLI で確認できます。

role_size (仮想マシンのサイズ・スペック)についてはこちらのドキュメントによると、

"ExtraSmall"、"Small"、"Medium"、"Large"、"ExtraLarge"、
"A5"、"A6"、"A7"、"A8"、"A9"、"A10"、"A11"、"Basic_A0"、"Basic_A1"、"Basic_A2"、"Basic_A3"、"Basic_A4"、
などです。使える仮想マシンのサイズはロケーションにより異なります。なお、role_size のデフォルトは "Small" です。

今回は、image に Windows Server 2012R2イメージを、location には Japan West 、role_size は Basic_A2 というのを指定しています。

3. Ansible 実行

以下のように作成したプレイブックを実行します。

少し出力結果を解説すると、「ok=1」というのは実行したアクションが正しく完了した事を表します。今回は「仮想マシンを起動させる」というアクションのみでしたのでカウントは"1"でした。そして、具体的に仮想マシンの起動が行われているため「changed=1」と表されています。この意味は例えば、このあと同じ Ansible コマンドを実行すると「ok=1、changed=0」と出力されます。前回の実行で「仮想マシンが起動されている状態」になっているためです。これにより Ansible が冪等性というものを保っていることが確認できます。冪等性については【補足】をご参照ください。

Azure CLI または GUIポータル画面を確認してみてください。ステータスが確認できます。少し時間を要します。

【開始中・・・】 dashboard azure 【実行中(プロビジョニング中)・・・】 dashboard azure2

Azure CLI では【Status】が ReadyRole となると起動完了です。GUIポータルでは【状態】が実行中となります。

4. アクセス・ログイン確認

Azure 上で起動させた仮想マシンへのアクセスを行ってみます。リモートデスクトップ接続でアクセスします。Ansible の Azure モジュールオプションでendpoints: "3389"としていたのは外からリモートデスクトップでアクセスするためです。

通常GUIポータルから仮想マシンを起動するとデフォルトではパブリック側のポートは別のものがアサインされますが、Ansible の Azure モジュールではその構成にまだ対応できないため、3389を指定しています。

【リモートデスクトップ】 RD2

補足

Ansible インストール

投稿時点で Version は 1.9.4 が最新です。

failed to create the new virtual machine

モジュールオプションで既に使われている「hostname」を指定していると以下のようにエラーとなります。別の名前で再実行してみてください。

冪等性

日本語は聞き慣れないものかとおもいますが「ある操作を1回やっても、何回実行しても同じ結果(状態)を得ることができる」ということです。今回の実行例でいうと、Ansibleコマンドを実行した結果、仮想マシンが起動していないなら起動するし既に起動しているのであればその操作を行う必要がないため起動処理を行わない、ということです。Ansible の Azure モジュールに冪等性を保つ実装がされています。

おわりに

いかがでしたでしょうか、まずは Ansible が大体どのようなものであるか、そして Azure とどのように関連付けて操作させるのか、ご理解いただけたのではとおもいます。ただ、感のいい方はお気づきかもしれませんが、 実は今回ご紹介した内容はわざわざ Ansible を使わなくても Azure CLI だけでもできてしまいます。しかし、Ansible では Azure CLI だけでは出来ない仮想マシン上のセットアップ、ミドルウェアインストール・セットアップ・デプロイ、オーケストレーションもできてしまうのです。はじめにお話した「・・・が1オペレーションで」というやつです。次回はその部分も含めてご紹介したいとおもいます。

エンジニア採用中!私たちと一緒に働いてみませんか?