Check! Rancher のホストとして Azure を登録してみよう！

あけましておめでとうございます！ :bamboo: @dz_ こと大平かづみです。

今年もどうぞよろしくお願いいたします！

Prologue - はじめに
====
さて、新年1発目の投稿は、いろんなホストを扱えるコンテナ管理プラットフォーム  [Rancher](http://rancher.com/rancher/) で、ホストに Azure を登録してみます！

Rancher とは？
----

Rancher は、Docker をはじめとするコンテナを管理できるプラットフォームです。Kubernetes, Swarm, Mesos など主要なオーケストレーションツールに対応し、また様々なホストを利用することができます。

この管理プラットフォームとは別に、 [RancherOS](http://rancher.com/rancher-os/ "Rancher Labs | RancherOS | Rancher Labs") という、Dockerコンテナを動かすための軽量Linuxも提供されています。

Rancher のホストに Azure を登録する準備
====
Rancher サーバーの準備
----
Rancher で外部のホストを利用するには、そのホストから Rancher サーバーにアクセスできないとなりません。そこで、今回は Azure 上に構築しました。

Azure での Rancher サーバー構築について、下記にまとめましたので、ご参考になれば幸いです。

- [Check! コンテナ管理プラットフォーム Rancher を Azure 上で動かしてみよう](http://qiita.com/dz_/items/e8a96acd532a97ee0868)

なお、本来は安全面で TLS の設定をすべきなのですが、今回は割愛します。

Azure CLI の準備
----
Azure 側で Azure Active Directory のアプリケーション登録などの作業があるため、Azure CLI を準備しておきましょう。Rancher のドキュメントに合わせて、 Azure CLI 1.x 系 (Node.js) を利用します。インストール手順はこちらをご参考ください。

- [Azure コマンド ライン インターフェイスのインストール | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/xplat-cli-install "Azure コマンド ライン インターフェイスのインストール | Microsoft Docs")

また、JSON パースできるコマンドの `jq` も併用します。

- [jq](https://stedolan.github.io/jq/ "jq")

Rancher のホストに Azure を登録する
====
さて、Azure CLI と Rancher サーバーの準備ができたら、 [Adding Azure Hosts](http://docs.rancher.com/rancher/v1.2/en/hosts/azure/ "Adding Azure Hosts") を参考にすすめましょ！

大まかな流れ
----

1. ホスト登録画面を開く
2. サブスクリプションIDを取得する
3. Azure AD にアプリケーションを登録し、接続情報を取得する
4. それぞれ情報を入力して、ホストを作成する

1. ホスト登録画面を開く
----

画面上部のメッセージの「Add a host」をクリックするか、メニューから INFRASTRUCTURE > HOSTS でホストの画面を開き、「Add Host」をクリックします。Add Host の画面が開いたら、 Azure のアイコンを選択しましょう。

![20170101_rancher-host_azure_003.png](https://qiita-image-store.s3.amazonaws.com/0/3812/26f424d6-816a-e8b9-1e9f-8e4ef8e76e30.png)


2. サブスクリプションIDを取得する
----

次に、Azure CLI を使って、サブスクリプションIDを入手します（★の箇所）。 `jq` も併用してますが、JSON をパースしてるだけなので、ない場合は適宜読み替えてください。

```bash
# モードを arm (Azure Resource Management) に切り替える
$ azure config mode arm

# ログインする
$ azure login

# Azure のアカウント一覧を表示して、使用するアカウントを確認する
$ azure account list --json | jq '.[].name'

# 使用するアカウントを設定する
$ azure account set <ACCOUNTNAME>

# 設定されたアカウントのサブスクリプションIDを表示する ← ★ Subscription ID
$ azure account show --json | jq ".[] | .id"
```

3. Azure AD にアプリケーションを登録し、接続情報を取得する
----
引き続き、Azure AD にアプリケーションを登録し、 クライアントID とクライアントシークレットを用意します（★の箇所）。

`<xxx>` は適宜読み替えて入力してください。 `<APPURL>` は、Rancher サーバーのURLを入力しました。

```bash
# Azure AD にアプリケーション登録する
# ★ ここで指定したパスワードが Client Secret になるので控えておいてください！
$ azure ad app create -n <APPNAME> -m <APPURL> -i <APPURL> -p <PASSWORD>

# アプリケーションIDを取得する ← ★ Client ID
$ azure ad app list --json |  jq '.[] | select(.displayName | contains("<APPNAME>")) | .appId'

# サービスプリンシパルを作成する
$ azure ad sp create --applicationId <APPID>

# アプリケーションに権限を設定する
$ azure role assignment create --spn <APPURL> -o "Owner" -c /subscriptions/<SUBSCRIPTIONID>

# 設定した権限を確認する
$ azure role list --json | jq ".[] | {name:.Name, description:.Description}"
```



4. それぞれ情報を入力して、ホストを作成する
----
Azure 側の準備ができたら、ホスト設定の欄を埋めていきましょう。

- Subscription ID, Client ID, Client Secret は上記で得たものを入力
- INSTANCE の Size や、Storage Type は料金に関わるので、よく確認すること

これら以外はデフォルトでも構いませんが、わかりやすいように適宜調整するとよいと思います。ラベルや拡張オプションについては、任意なので割愛します。

![20170101_rancher-host_azure_004.png](https://qiita-image-store.s3.amazonaws.com/0/3812/9f076725-3a00-7120-1399-6a08faa90910.png)

設定を入力し終えたら、「Create」ボタンをクリックして、しばし待ちます。意外に簡単！

![20170101_rancher-host_azure_005.png](https://qiita-image-store.s3.amazonaws.com/0/3812/d5aac273-dd1b-cd22-3d7c-67e828317ca6.png)

ほんの数分でプロビジョニングが完了しました！ヾ(oゝω・o)ﾉ))

かんたん！

メモ
====
備忘録がてらのメモです。

Rancher のホストとエージェント
----

Rancher は、ホスト上でエージェントコンテナを動かすことで、そのホストを管理します。

また、様々なプラットフォームに対応したドライバが用意されており、必要なパラメータを埋めるだけで、簡単にホスト登録できるようになっています。

今回使った Azure のドライバは、内部的には、 `docker-machine` を使って Azure に Docker ホストを構築するそうです。余談になりますが、 `docker-machine` コマンドを使った Azure VM の構築については、こちらをご参考下さいませ。

- [Docker Machine を利用し、Azure で Docker ホストを作成する | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-docker-machine?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json "Docker Machine を利用し、Azure で Docker ホストを作成する | Microsoft Docs")


Epilogue - おわりに
====
ついでに、ホストが立ち上がった後、カタログからコンテナ立ち上げてみたら、とても簡単…！

例えば、カタログから WordPress を立ち上げて、Azure 側のファイアウォールの 80番ポートを空けてあげるだけ！

おそるべし Rancher ！ :cow2:

今年は酉年ですけど、もっとコンテナくんたち :whale2: :cow2: を飼いならしていきたいと思います！