AzureリソースをAnsibleからデプロイ
はじめに
Azureの代表的なIaCの手法としては、「ARM Template」「Bicep」「Terraform」があり、Microsoft公式ドキュメントでもこれら3つについては各Azureリソース毎に詳しい説明とサンプルが提供されています。
詳しくは過去に書いた私の以下の記事を参照ください。
昔からある有名なIaCツールとして「Ansible」があり、プレイブックから多数の強力なモジュールを利用することでサーバの設定、アプリケーションのデプロイ、ネットワークの管理などを自動化できたりしますよね。
「お仕事」では特にAzureって訳ではなくAnsibleを使う機会があったのですが、どうせなら「推し事」としてAzureに絡めてAnsibleを使ってみたのでポストします。
参考にした情報
Microsoft公式ドキュメントにもちゃんとAnsibleをAzureで使う記事がありました。
ふむふむ。Azureのモジュールとしては、基本的なリソースはそろっているみたい。
あまり新しめの機能は対応していない感じですが、Networking, IaaS回りは問題なさそう。コンテナ関連もContainer Appsは無さそうですが、AKSやContainer Instancesはあるみたいですね。
https://docs.ansible.com/ansible/2.9/modules/list_of_cloud_modules.html#azure
とりあえず何か作る
まだ学習を始めて間もないため、いろいろなチュートリアルを参考に仮想ネットワークと仮想マシンを作りました。
仮想マシン(Ubuntu Server)にはnginxを入れました。
とりあえずテスト用なので、こちらのリポジトリをクローンした後に、~/.azure/credentials
内に以下の認証関連の情報を入れておきました。
[default]
subscription_id=<サブスクリプションID>
client_id=<サービスプリンシパルのクライアントID>
secret=<サービスプリンシパルのシークレット>
tenant=<テナントID>
後は以下のコマンドで実行です。あっ、AnsibleのCLIは適当にBingって入れてくださいね(雑)。
ansible-playbook azure-resources.yaml -i inventory.yaml -v
いい感じに画面が流れてAzureのリソースが出来ています。
できました!
ちゃんと、NGINXもインストールされていますね。
少しだけハマったところ
私の好みではあるのですが、仮想ネットワークのサブネットにNSGを割り当てて、あまりNIC自身にNSGを割り当てるのを好みません。
その場合、NIC作成時には明示的にcreate_with_security_group: false
を指定しないと勝手にNICと同じ名前でNSGが作成されました。
ルールはTCP/22がAllowになっていましたが、プロパティ省略時のデフォルト値をちゃんと知っておく必要があるかと感じました。
あとは、一つのプレイブックで仮想マシンを作成後に、その仮想マシンに対してnginxパッケージの追加を実施するのですが、仮想マシンのデプロイ完了に時間がかかるため、待ちタスクを入れる必要がありました。
おわりに
今回はとりあえず初めて触っての記事でしたが、既にAnsibleをがっつり使っている人には学習コスト少な目でAzureリソースのデプロイが行えるのではと思います。
……私はBicep, Terraformを使いますけどw
また何か分かったらAnsibleの記事も書きたいと思います。
Discussion