AnsibleからAzureを操作してみた その1 ~準備編~

みなさん、初めまして。株式会社リアルグローブの廣川と申します。基本的にはアプリケーション・エンジニアなのですが、最近はAnsibleというオープンソースのサーバー構成管理ツールの活用支援や勉強会なんかもやっております。先日、Amazon Kindleストアで『Ansible完全読本』という解説本も出版させていただきました。好評発売中ですので、Ansibleに興味をお持ちの方は是非ご覧ください!

さて、この度はクララオンラインさんのブログをお借りして『Ansible完全読本』では間に合わなかったAnsible 2.1の新機能、Azureリソースマネージャ操作モジュールの使い方を3回に渡って紹介していきたいと思います。

第一回目では、Ansibleから操作するためのAzureの事前設定を行っていきます。

必要なもの

  • Azureのサブスクリプションを管理者として操作できるアカウント
  • Mac/Linuxの環境(Windowsをお使いの方はVagrantなどで仮想環境を用意してください。以下の手順ではMacとUbuntuの場合を紹介します。)

手順1. Azure CLIのインストール

今回のAzure設定は公式のコマンドライン操作ツール『Azure CLI』を使って実行していきますので、まずはこれをインストールしましょう。

Macの場合、Homebrewをインストールしていれば、以下のコマンド一発でインストールできます。

Ubuntuでは以下の様にnpm(Node.jsのライブラリマネージャ)経由でのインストールが可能です。

手順2. Azure CLIの認証

コマンドからAzureのサブスクリプションが使える様に以下のコマンドから認証作業を実施しましょう。

すると、以下の様な表示が出て、コマンドが待機状態になります。

この状態でブラウザから https://aka.ms/devicelogin を開き、表示された認証コード(上の例で言えば6LV9GWLYI)を入力して「続行」をクリックしてください。
スクリーンショット 2016-06-29 19.33.13

この後、Azureへのログイン画面が表示されますのでAzureの管理者アカウントでログインしてください。
ログインに成功すると、待機モードになっていたコマンドは自動で終了します。

実際にサブスクリプションが使えるようになっているかの確認は、

コマンドから実施可能です。
複数のAzureサブスクリプションが表示される場合は、

のようにして、AzureCLIから使うサブスクリプションを設定してあげましょう。

手順3. ActiveDirectoryアプリケーションの設定

AnsibleからAzureを操作するにはActiveDirectory(AD)アプリケーションを設定して、外部アプリケーションからのAzure操作を許可してあげる必要があります。この作業も全てAzureCLIから実行できます。

① ADアプリケーションの作成

のようにADアプリケーションを新規作成しましょう。

(ここで権限エラーなどになってしまう人は、使っているアカウントにサブスクリプションのADを操作する権限が付いていないことが考えられますので、Azureの契約を管理している人に確認してみてください。)

–home-page  –identifier-uris は指定必須項目ですが、実際に有効なURLである必要はないのでここではダミーのURLを指定しています。

–nameにはわかりやすい名前を、–password には長めの安全なパスワードを指定しましょう。
パスワードは再確認出来ませんので、忘れない様にどこかにメモしておきましょう。

の様にopensslコマンドからランダム文字列を生成して使うのが簡単なのでオススメです。

② サービスプリンシパルの作成

次にAnsibleがADアプリケーションに接続するためのサービスプリンシパルを作成します。

で①で作ったアプリケーションのIDを確認しましょう。ここで表示されるAppIdを使ってサービスプリンシパルを作成します。

でサービスプリンシパルが作成可能です。

③ サービスプリンシパルへの権限割り当て

最後に作成したサービスプリンシパルにサブスクリプションを操作するためのオーナー権限を与えてAzure側の設定は完了です!

–spnはADアプリ作成時に指定したURLを入れましょう。
サブスクリプションIDがわからない場合は

で表示できます。

手順4. Azure接続情報ファイルの設置

次に、設定したADアプリケーションの接続情報をAnsibleから使えるように設定ファイルを作成します。

~/.azure/credentialsファイルを以下の様に設定します。

サブスクリプションIDTenant ID

で、AppID

で、それぞれ確認できます。パスワードは作成時に指定した後は表示することが出来ませんので気をつけて下さい!

手順5. Ansibleのインストール

手順5にして遂にAnsibleの登場です!とはいえ、Ansibleのインストールもパッケージマネージャから実行できるので非常に簡単です。

Macならば

Ubuntuでは

でインストールできます。

を実行してAnsibleのバージョンが表示されれば問題なくインストールできています。

また、AnsibleからAzureを使うにはAzureのPythonライブラリも必要になるので、こちらもインストールしておきます。

Ansible 2.1時点のAzure系モジュールは上記で指定しているバージョン2.0.0rc2に依存しており、これ以外のバージョンではエラーになってしまうので気をつけましょう。

(追記: 2016/7/29)
2016/7/28にリリースされた、Ansible 2.1.1 から、必要となるazureライブラリのバージョンが変わりました。以下のようにバージョン指定を2.0.0.rc5にしてください。

手順6. AnsibleからAzureへの接続を確認

最後に実際にAnsibleからAzureを使うことができる様になっていることを確認して準備編は完了です!
ここではAzureリソースマネージャ上に存在するリソースグループ情報を取得してくれる azure_rm_resourcegroup_factsを使って接続を確認してみます。

以下のような結果が返って来ればOKです。

なお、実際に返ってくるリソースグループ情報は利用状態によって変わりますが、最初の行がlocalhost | SUCCESSの様になっていれば問題なくAzureにアクセスできています。

ここでエラーになってしまう人は、手順4.で作った~/.azure/credentialsの中の情報が間違っている恐れがあるので、確認してみてください。

お疲れ様でした、これでAnsibleからAzureを操作する準備は完了です。
次回からは実際にAnsibleからAzureを操作してVMを作成するPlaybookを作っていきますよ!

Share on LinkedIn
LINEで送る
Pocket

realglobe Inc.