Infrastructure as Code with VSTS and Azure Web Apps
Azureでのサーバ構築をAzure portalからポチポチやって作成しても良いのですが、毎回GUIでポチポチする作業は自動化には向きませんね。Azureでは、自動作成するための定義情報を出力できるし、Visual Studio Team Service(VSTS)では、それらの定義情報を簡単に流せる仕組みを持っています。Infrastructure as Codeと聞くとすごく面倒な印象があるかもしれませんが、Azure + VSTSでスゴく簡単に実現できるので、インフラ定義情報をコード化して、ビルド、デプロイするというのを試してみたいと思います。
昨今言われているDevOpsを行うためには、インフラ構築の自動化が欠かせないので試してみる価値はあるのかなぁって思ってます。
Azureでインフラ定義情報の出力
Azureには色々な機能がありますが、今回は、PaaS機能であるAzure App Serviceを使っていきます。PaaSなので簡単にアプリケーションの実行基盤が構築できる機能です。
まず、Azure Portalにアクセスして、Azure App ServiceをGUIから構築していきます。あれ・・・話が違うって。Infrastructure as Codeじゃないのかって?まぁ後でわかりますので、とりあえずやって見てください。
App Serviceの画面から、“+追加”で、Web Appを選択します。
Web Appの画面に進むのでそのまま“作成”で進んでいきます。この辺りは説明するまでもないですが、いかに簡単に出来るのかわかってもらうために丁寧目に説明しておきますね。
各種情報を入れていきます。"アプリ名"は、一意になればなんでも良いので好みで設定してください。"サブスクリプション"、"リソースグループ"、"App Service プラン/場所"は各環境に合わせて適切に入力します。これらはGUIの指示に従っていけば簡単に入力できると思います。ここまで入力出来ると、思わず"作成"を押したくなりますが、ちょっと待ってください。
作成ボタンの横に“Automationオプション”というものがありますね。今回はこちらを使います。作成はしません。せっかく色々入力したのに・・・これもコード化の為です。ここでの作成は行わず先に進みましょう。
“Automationオプション”を押すとコードのようなもの(実際にはJSONの定義情報)が表示された画面が表示されます。これが先ほどGUIで入力した内容のインフラ定義情報をコード化したものです。ダウンロードしましょう。
これで、Azure Web Appsを構築するためのインフラ定義情報が準備出来ました。GUIから出力するだけなのでスゴく簡単にですね。
VSTSのGitリポジトリに登録
VSTSで出力した定義情報を使っていくためには、VSTSでソースコード管理していく必要があります。まぁVSTS内のリポジトリでなくても連携は出来るのですが、せっかくVSTSを使用しているので、VSTSのGitにインフラ定義情報を格納していきましょう。
VSTSでGitを使う方法については、過去の記事に書いているのでそちらを参照してもらえれば簡単に出来ると思います。
インフラ定義情報をダウンロードすると、template.jsonとparameters.jsonというJSONファイルが存在すると思います。この2つをPushしておきます。私の場合は"azureWebApps"というリポジトリを作成して2ファイルをPushしました。
VSTSでビルド定義
ここまでがほぼ準備で、ここからが本番ですね。VSTSにビルド定義作っていきます。VSTSのBuild&ReleaseからBuildsでビルド定義を行なっていきます。(あら・・・GUIが変わってる・・・。)とりあえず今回はテンプレートになるものは存在しないので“enpty process”で進めます。
Add Task で、Azure Resource Group Deploymentを選択します。Azure Resource Groupに対して操作を行うタスクです。
タスクの情報を埋めていきましょう。Display nameは適当につけてください。Azure subscriptionは、Azureで設定しているサブスクリプションをいれます。初回は認証が必要だったはずです。何度かやっているので私の場合は認証聞かれませんでした。Actionは“Create or update resource group”で。Resource GroupとLocationも適切に入力します。この辺りは、Azureで設定した情報と合わせます。
Templateには、ダウンロードしてGitにPushしておいたtemplate.json、Template parametersには、parameters.jsonを指定します。 これで、タスクの情報は埋まりました。はい、お疲れ様です。Savaしておきましょう。
環境構築を実行
Savaできたら、Buildを走らせましょう。Queueをポチッと。
VSTSが頑張ってビルドを走らせてくれます。そして、Azureに環境をせっせと作ってくれるのです。しばらく待ちましょう。
成功しましたね。さて環境は出来ているでしょうか。Azure Portalから出来ているか確認しておきましょう。
出来てますね。これで今回の環境をいつでも壊して再デプロイできますね。クリーンな環境にアプリケーションをデプロイしたい場合でも、一旦、Web Appを消してVSTSで再構築ってすぐ出来ます。あと、CIとして回すためにインフラ定義を変更すればビルドしてデプロイするなんてことも少し改良すれば出来るようになると思います。Infrastructure as Codeと聞くと、難しいインフラ定義情報を自分で書いて、スクリプト組んで・・・みたいなイメージしている人もいたのではないかと思いますが、VSTSとAzureを使えば、ここまで簡単に出来るんですね。VSTSがますます使い込んでいきたくなってきました。
皆さんの参考に少しでもなれば幸いです。