
ARM templateによるAzure構築に超入門してきた
先々週に続いてAzure Antennaのセミナー「AzureのLinux VMをテンプレートで自動化しよう」に参加してきました。タイトルはこうですが、実際にはLinux VMとか登場しなくて(そんな時間はなくて)ARM Templateの話をみっちりでした。とはいえ今回も資料が公開されているので内容はそちらをご参照ということで、いろいろと質問させてもらったことを記録しておきます。
Azure構築のA or B
例えばAzure CLIとPowerShell(+AzureRMモジュール)で強みや弱みといったものはあるのか。PowerShellはAzureの全範囲をカバーするが、Azure CLIはカバー範囲が(特にPaaSで)弱い。一方でWindowsよりな技術者はPowerShellを使うだろうけど、Linux寄りやMacよりな技術者はAzure CLIのほうがなじむのではないか、とのこと。PowerShellのオブジェクト指向は「シェルと言いながらLinuxのとは似て非なるそれ」とも言われていました。
Infrastructure as Codeにするとして、ARM templateとTerraformでは?これもまた、Terraformは人気を集めているプロダクトで、一方ARM templateであればAzureでできる設定のすべてができる、とのこと。アプリケーション開発者の立場であればインフラ間の差異を意識させない適度に抽象化されたTerraformが使いやすそうに思いますが、逆にAzureのリソース構築等に責任を持つ立場では抽象化されていないゴリゴリの世界だからこそARM templateの方が確実なのかもしれません。
ではARM templateを使うにせよ使わないにせよ、PortalのGUIとPowerShell等のCUIではというと、Portalもわかりやすい反面できないことがある、とのこと。例えばARM templateのデプロイは、templateにあって既存リソースグループにまだないものだけを足しこむ「インクリメンタル」なデプロイが可能。ただしPortalからだと、templateにあって既存リソースグループにもすでにあるものがあると、スキップされるのではなくエラー停止してしまうそうです。
Azure構築のTWMTOWTDI
そのARM templateですが、1から書き上げるとか10まで読みこなすといったことはちょっと現実的ではなさそう。そうするとAzure PortalやAzure CLI、PowerShellである程度の構築を行い、同じか類似した構成のリソースやリソースグループを作るときに、作成済みのもののARM templateを取得して再利用するという使い方になりそうです。ARM templateですべてをというのは、ちょっと無理筋感。
ARM templateの利用状況はというと「米国では積極的に使われてる」「国内でもSIerなどを含め使うところは使い始めている」「構築にも使うしパラメータ確認にも使う」とのこと。しかし使い方をもう少し聞いてみると「GUIやCLIで作った構成を元に類似構成の構築」「障害時に特定パラメータを探して確認」など、限定的な代わりにはまれば強いという使い方だそうです。
Azureの構築は結局どの角度で切っても「TIMTOWTDI(やり方は複数ある)」。ツールとしての優劣より業務要件との相性で、自分なりのベストチョイスをしていく感じになりそうです。
僕たちとAzureのHow to 構築
いま、今後Azureのリソース構築をする機会が増えそうな状況があって、それは僕一人でじゃなくて数名のチームで分担してさばいていくことになる、という状況にいます。ARM templateの話を聞きにいったのも、これが構築の確実化や効率化にどう使えそうかを知りたいから。そして僕たちチームでの構築の「標準方式」や「標準手順」を作りたいから。
その観点でいくつか質問させてもらったりもしましたのですが、僕たちの業務要件だと、PaaSへの対応や、リソースグループ外の部分、例えばAzureユーザー管理や権限設定なども必要になってくるので、PowerShellでの手作業が主方式。特定のリソース群で、類似構成の構築が何度も発生してくるようだったら、その時になってからその部分はARM templateで定型化する、という感じが相性いいかな。
それぐらいの考え方でいくのがよさそうだ、と思いました。