Ansibleを利用してAzure仮想マシンを作成するためのAzure資格情報の作成と準備

## はじめに

Ansibleを利用してAzure仮想マシンを作成するために必要なAzure資格情報を作成してみます。
あわせてWSL環境を利用してAnsibleを導入してみます。

## Windows 10 の場合

### Azure CLI のインストールと Azure サブスクリプションの確認

[Windows での Azure CLI のインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?view=azure-cli-latest)を参考にしました。

* 下記サイトから Azure CLI をダウンロードしてインストールします。

  [Windows での Azure CLI のインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?view=azure-cli-latest)

* azure-cli-2.0.58.msi をインストールしました。

* PowerShell を起動して Azure にログインします。

```powershell
> az login
```

* ブラウザが起動しますので、アカウントとパスワードを指定してログインします。

* PowerShell に以下のようなサブスクリプションの情報が出力されます。

```powershell
[
  {
    "cloudName": "AzureCloud",
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "isDefault": true,
    "name": "Visual Studio Professional with MSDN",
    "state": "Enabled",
    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "user": {
      "name": "<account mail address>",
      "type": "user"
    }
  }
]
```

> この情報をAzure資格情報の作成で利用します。

* アカウントを指定することも可能です。

```powershell
> az login -u <account mail address>
```

* ログインしているアカウントの情報を表示できます。

```powershell
> az account show
```

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

[Azure CLI で Azure サービス プリンシパルを作成する](https://docs.microsoft.com/ja-jp/cli/azure/create-an-azure-service-principal-azure-cli?view=azure-cli-latest)を参考にしました。

* 下記コマンドでサービスプリンシパルを作成します。

```powershell
> az ad sp create-for-rbac -n "任意のアプリ名" --role contributor
```

* PowerShell に以下のようなサービスプリンシパルの情報が出力されます。

```powershell
{
  "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "displayName": "任意のアプリ名",
  "name": "http://任意のアプリ名",
  "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

> この情報をAzure資格情報の作成で利用します。

### Azure資格情報の作成

[Azure 仮想マシンへの Ansible のインストール](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/ansible-install-configure)を参考にしました。

* サブスクリプションとサービスプリンシパルの情報をもとにAzure資格情報を作成します。

* Azure資格情報のファイルを作成します。

```powershell
> code ~/.azure/credentials
```

* 下記内容を記述して保存します。

```powershell
[default]
subscription_id=<サブスクリプションの"id">
client_id=<サービスプリンシパルの"appId">
secret=<サービスプリンシパルの"password">
tenant=<サブスクリプションの"tenantId">
```

## WSL (Ubuntu 18.04.2 LTS) の場合

### Azure CLI のインストール

[apt での Azure CLI のインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-apt?view=azure-cli-latest)を参考にしました。

* 必要なパッケージをインストールします。

```bash
#!/bin/bash
$ sudo apt-get install apt-transport-https lsb-release software-properties-common dirmngr -y
```

* sources list を更新します。

```bash
#!/bin/bash
$ AZ_REPO=$(lsb_release -cs)
$ echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | \
$  sudo tee /etc/apt/sources.list.d/azure-cli.list
```

* Microsoftのパッケージを信頼させます。

```bash
#!/bin/bash
$ sudo apt-key --keyring /etc/apt/trusted.gpg.d/Microsoft.gpg adv \
$  --keyserver packages.microsoft.com \
$  --recv-keys BC528686B50D79E339D3721CEB3E94ADBE1229CF
```

* Azure CLI をインストールします。

```bash
#!/bin/bash
$ sudo apt update
$ sudo apt install azure-cli
```

* Windows 10 のAzure資格情報を共有する場合はシンボリックリンクをはります。

```bash
#!/bin/bash
$ ln -s /mnt/c/users/<ユーザー名>/.azure ~
```

* WSL (Ubuntu 18.04.2 LTS) 側でAzure資格情報を作成してもOKです。

```bash
#!/bin/bash
$ mkdir ~/.azure
$ vi ~/.azure/credentials
```

> Windows 10 の場合と同様にAzure資格情報のファイルを作成します。

* ログインしているアカウントの情報を表示できます。

```bash
#!/bin/bash
$ az account show
```

## WSL (Ubuntu 18.04.2 LTS) に Ansible をインストールして動作確認

### Python3の仮想環境を作成して動作確認

[Azure 仮想マシンへの Ansible のインストール](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/ansible-install-configure)を参考にしました。

* パッケージを最新にしておきます。

```bash
#!/bin/bash
$ sudo apt update
$ sudo apt upgrade
```

* 必要なパッケージをインストールします。

```bash
#!/bin/bash
$ sudo apt install libssl-dev libffi-dev
```

* venvとpipもインストールします。

```bash
#!/bin/bash
$ sudo apt install python3-venv python3-pip
```

* Pythonのバージョンなどを確認してみます。

```bash
#!/bin/bash
$ which python3
$ which pip3
$ python3 -V
$ pip3 -V
```

* Python仮想環境を作成するためのディレクトリを用意します。

```bash
#!/bin/bash
$ mkdir ansible
$ cd ansible
```

* Python仮想環境を作成して有効化します。

```bash
#!/bin/bash
$ python3 -m venv venv
$ source venv/bin/activate
```

* ansibleやazure接続に必要なものをインストールします。

```bash
#!/bin/bash
(venv)$ sudo pip install packaging
(venv)$ sudo pip install msrestazure
(venv)$ sudo pip install ansible[azure]
```

* ansibleが利用するPythonのバージョンを確認します。

```bash
#!/bin/bash
(venv)$ ansible --version | grep "python version"
```

* 動作確認のためにhostsファイルを作成します。

```bash
#!/bin/bash
(venv)$ touch hosts
(venv)$ echo "localhost ansible_connection=local" >> hosts
(venv)$ cat hosts
```

* ansible を利用して ping を打ってみます。

```bash
#!/bin/bash
(venv)$ ansible localhost -i hosts -m ping
```

* ping の応答があればOKです。

```bash
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
```

* pythonを指定する場合は下記のようにインタプリタを指定して実行します。

```bash
#!/bin/bash
$ ansible localhost -i hosts -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
```

## おわりに

Ansibleを利用してAzure仮想マシンを作成するためのAzure資格情報の作成と準備をしてみました。
次回はplaybookを作成して、Azure仮想マシンを作成してみます。