Check! Azure にオープンソース版の Ansible Tower (AWX) をたててみる

あけましておめでとうございます！🎍

@dz_ こと大平かづみです。

Prologue - はじめに
====

ひょんなことから、私がスタッフで参加している [hbstudy](https://hbstudy.connpass.com/) で、Linux女子部さん主催の下記のイベントのアンコール公演を引き受けることとなりまして！

- [新定番！Ansible とZabbixで実現する次世代運用管理 - connpass](https://ljstudy.connpass.com/event/71037/)

その流れで Ansible Tower のオープンソース版である [AWX](https://github.com/ansible/awx) に興味をもちまして、Azure VM でたててみました。

ソースコード
====

ARMテンプレートで構成しています。

- [Azure Resource Manager テンプレートの構造と構文 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/resource-group-authoring-templates)

このテンプレートは GitHub にて公開しています。また、「Deploy to Azure」ボタンも設置してみたので、ご興味ありましたらぜひお試しください♪

- [dzeyelid/awx-on-azure](https://github.com/dzeyelid/awx-on-azure)

なお、AWX が指定しているコア数、メモリに該当するVMサイズしか選べないようになっています。VMを含めた各リソースのコストなど、ご確認の上ご利用ください。

ポイント
====
簡単なつくりではありますが、いくつかポイントをピックアップします。

要件にあったVMサイズの確認
----

AWX は、メモリ4GB以上、2コア以上という要求なので、該当するVMサイズ一覧を取得して確認しました。メモを下記にまとめましたので、ご興味あればご覧ください。

- [[小ネタ] Check! az コマンドで条件に合ったメモリやコア数のVMサイズ一覧を表示する - Qiita](https://qiita.com/dz_/items/46c08714c89acd545b4b)

ARMテンプレートの入力パラメータ
----

ARMテンプレートの入力パラメータは、許容する値を定義できたり、セキュアな文字列として隠ぺいして扱うことができたりします。詳細はこちらをご参照ください。

- [Azure Resource Manager template parameter section | Microsoft Docs](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-templates-parameters)

例えば、今回は、VMサイズのパラメータを、 AWX が要求するスペックを満たすVMサイズのみ許可するようにしてみました。

```json
    "parameters": {
        "vmSize": {
            "type": "string",
            "defaultValue": "Standard_A2_v2",
            "allowedValues": [
                "Basic_A3",
                "Basic_A4",
                "Standard_A3",
                "Standard_A4",
                "Standard_A5",
                "Standard_A6",
                "Standard_A7",
                "Standard_A8",
                "Standard_A9",
                "Standard_A10",
                "Standard_A11",
                "Standard_A2_v2",

```


cloud-init
----
Linux VM のいくつかでは cloud-init が使えるので、デプロイ時にプロビジョニングのシェルスクリプトを指定することができます。使えるOSは以下です。

- Ubuntu 16.04-LTS
- Ubuntu 14.04.5-LTS
- CoreOS
- CentOS 7
- RHEL 7

ARM テンプレートで cloud-init のスクリプトを指定するには、 シェルスクリプトを base64 エンコードし、`properties.osProfile.customData` に指定します。

```json
    "resources": [
        {
            "name": "[variables('vmName')]",
            "type": "Microsoft.Compute/virtualMachines",
            "apiVersion": "2017-12-01",
            "location": "[variables('location')]",
            "properties": {
                "osProfile": {
                    "customData": "<シェルスクリプトをbase64エンコードした文字列>",
```

詳細は下記ドキュメントをご参照ください。

- [Azure での Linux 仮想マシンに対する cloud-init のサポートの概要 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/using-cloud-init?toc=%2Fazure%2Fvirtual-machines%2Flinux%2Ftoc.json)

Deploy to Azure ボタン
----

自作したARMテンプレートをパブリックでみえる場所に配置し、そのURLをURLエンコードし以下の要領でリンクを作ると、Azureポータル上でパラメータを指定してデプロイできます。

`https://portal.azure.com/#create/Microsoft.Template/uri/<URLエンコードしたARMテンプレートのURL>`

そして、こんな画像 ![Deploy to Azure](http://azuredeploy.net/deploybutton.png) (ダミー) を用意してくれているので、これにリンクをあてるとそれっぽくて便利ですよね♪

Markdown で書くとこんな感じです。

```md
[![Deploy to Azure](http://azuredeploy.net/deploybutton.png)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fdzeyelid%2Fawx-on-azure%2Fmaster%2Fazure%2Fazuredeploy.json)

```

Epilogue - おわりに
====
ということで、今年も Azure をがんがん学んでいきます！ :raised_hands: 
よろしくお願いいたします！