Azureでポータルを使わずデプロイしてみよう 〜 解説編

さて、ポータルを使わないでデプロイをするお話の3回目です。初回はテンプレートを使うとどんなことができるのかを見てみました。2回目はAzureのリソースに関する知識をおえながらテンプレートのカスタマイズを行いました。今回はまとめの回です。これまでを振り返ることでAzureの非常に重要な概念を理解することができると思います。また、これまで使ってきたAzure CLIについても知識を整理してみます。ここまでを理解できるとグッとAzureのことが解ってきて、面白く感じられると思います。

正体は「デプロイメント(配置作業)を作る」

これまではazure group createコマンドを使ってきました。これは読んで字のごとく、リソースグループの作成コマンドです。実はこのコマンドはちょっと気の利いた機能が備わっており、裏でdeploymentを作ってくれています。deploymentとは、リソースグループ内にリソースを配置する作業を指します。その設計図となるのがテンプレートです。

1

ということで、今回もCLIのヘルプを見ていきます。azure group deploymentと実行してみましょう。

2

一番最初の行にCommands to manage your deployment in a resource groupとあります。訳すとリソースグループへの配置作業を管理するコマンド群となりますね。

では次に、azure group deploymentcreateコマンドのヘルプを見てみます。

3

一行目を見てみるとCreates a deploymentと書かれております。つまり、配置作業の作成です。コマンドのヘルプの変えるかつが先ほどと少し異なっています。先ほどのazure group deploymentの実行結果はどのようなコマンドが使えるかのガイドが表示され、今回のコマンドのガイドは-hを末尾に付けることで表示されています。この流れがわかると途端にCLIを使うときに楽になるので、この機会に是非覚えておきましょう。

では、実行例です。

4

実行例の読み方・意味を一から考えてみましょう。

このコマンドではリソースグループへのリソース配置作業をAzureへ伝えています。 具体的な作業内容はazuredeploy2.jsonに書かれおり、リソースグループはpaku1604です。この作業そのものをcreatevmと命名する、というのが このコマンドの意味になります。

ProvisioningStateを見るとAcceptedになっております。つまり、作業受付完了。

ModeがIncrementalになっておりますので配置作業を行うとき、テンプレートと見比べてすでにリソースがあれば無視され、無いものが作成されるという意味です。あとは、受け付けたパラメーターが表示されております。

さて、ではこの配置作業がどうなったかを見てみましょう。基本的に詳細を見たいときはshowというコマンドになります。これでCLIの法則性が少しわかってきたかと思います。create, list, show, deleteというのがコマンドとなり、その前に対象となるもの、今回であればgroup deploymentが対象です。

では、azure group deployment show リソースグループ デプロイ名を実行した例です。

5

ProvisioningStateがSucceededになっていますね。つまり、成功したということです。そして、最後のOutputsを見てみましょう。ここにSSHのコマンドが出ています。これは、これまで説明を割愛してきましたが、テンプレートファイルにちょっとした仕込みがあり、このようなメッセージを残すようにしてくれていました。(元々の公式テンプレートがそうなってる)

ということで、これを見ればすぐに接続できて便利です。このように、最終的に実行時に決まるような内容はメッセージとして残すひと工夫は非常に有益です。

6

以上のように、メッセージの通りのコマンドでちゃんとアクセスできました。

ということで、配置作業をAzureに定義し、実行するという方法の解説が、この全3回にわたってお伝えしたかったものでした。この過程は、筆者が理解をしていった過程をそのまま書いてみました。どうやって理解を深めていったかを体験してもらうためです。このように手を動かしながら、意味を考えていくことで理解は深まると思います。

さて、もう少し考えてみましょう。そもそも、配置作業を定義することの利点は何でしょうか?

この方法の最大の利点は色々なリソースをまとめて指示できるため、複雑な構成(ネットワークやストレージ、Azureの各種サービス等など)を創りだすことができるという点です。テンプレートファイルさえ作れてしまえば、あとは何度でもどこのDCにでもこれが適応できます。

一方、Azureで可能な作業を定義できるため非常に強力な反面、マスターするのもなかなか難しいとも言えます。特にテンプレートの作成は実のところ大変です。

そこで、幾つかテンプレート作成を楽にする方法をご紹介します。

楽してテンプレートを作るには

まずひとつ目は公式テンプレート集です。 サイトは2つあります。

1つ目は公式ページです。 https://azure.microsoft.com/ja-jp/documentation/templates/

こちらではキーワードで検索することにより、テンプレートを見るけることができます。

2つ目がGithubのページです。 https://github.com/Azure/azure-quickstart-templates/

基本的にこれらは同じ内容ですが、Githubの方にしかないものが結構あります。 1つ目の公式ページにはGithubへのリンクがありますし、実行するときのコマンド例やパラメーターの解説などもありますので、すぐに使う場合は公式のほうが良いと思います。 GithubのほうはやはりGitコマンドで手元の環境にソースを落とせるのが良い所ですね。

公式テンプレートを読み込んで、必要な箇所を集めると比較的作成が楽になると思います。

次の方法はエクスポートです。

完成したリソースグループの内容をエクスポートしてしまうというものです。やり方は2種類あり、CLIでやる方法とポータルから実施する方法があります。

まずはCLIの例です。

7

azure group exportコマンドでJSONが取得できます。-pオプションを付けることで、デフォルトの値を含めることができます。落ちてきたJSONはずらーっとインデントなどがされない状態になっているので、VSCodeや普段お使いのエディタなどでカラーハイライトを効かせて読むのが良いと思います。

もうひとつの方法はポータルのエクスポート機能を利用するものです。

8

ポータルでリソースグループを表示し、すべての設定を開くとメニューがあると思います。

9

この機能はリソースグループのテンプレート化したものを見たり、変更したり、変更後にデプロイを実施したりすることができます。また、ダウンロードを押すとZipファイルが取得できます。

10

ファイルを開けてみると、JSONファイルの他にShellで実行できるようになっているファイルが含まれております。

11

テンプレートはAzure上に保存をしておくことができ、改めて呼び出すこともできます。

12

テンプレートを編集したり、また他のユーザーに公開することもできるようです。(ここでいう他のユーザーとは同一サブスクリプションを利用できるユーザーだと思います。未確認です。)この機能は組織内での再利用を想定して作られている感じですね。

13

なお、このテンプレートの機能はプレビューのため、GAまでに色々と変更になったり、機能が追加されたりがあるかと思いますので、2016年5月の段階ではこうだという認識でお願いします。

再現実験

さて、それではひとつ実験をしてみます。

エクスポートしたテンプレートからデプロイし同じ西日本に作った別のリソースグループに同一の構成が復元するか検証してみます。

まず西日本にリソースグループ(paku16t04_2)を作りました。

17

テンプレートからデプロイを作成しています。

18

少し時間を置いて、グローバルIPを表示させました。IPとFQDNが表示されております。

19

最後にSSHでの接続です。

20

無事接続することができました。

念の為、ポータルでも確認してみました。

21

ということで、きっちり同じものが出来上がっています。

なお、記事を書きながら作業した時に、テンプレートのリソースの名前を短い名前に置き換えしてしまったため、最後の表示されているリソースの名前とエクスポート元の名前が違っておりますが、リソースの種類や従属関係については全く同じ状態になってます。

最後に

以上でリソーステンプレート、そしてAzure CLIの基本的な部分について記事化できたと思います。いかがでしたでしょうか?

途中にも書きましたが、今回までの3回分の流れは筆者がAzureのテンプレートとそろそろちゃんと向きあおうと重い腰を上げ、取り組んだ流れをそのまま記事にしてあります。冗長なところもありますが、一つ一つ踏みしめながら状況を考えて理解を深めていくことは多くの学びがあるのではないかと思います。

今回はテンプレートを書き上げてみたりをあえてしておりません。VSCodeを使うとインテリセンスのおかげでプロパティが表示され、選ぶだけで組み上げることもできます。また、Visual Studioを使うともっと楽に組めるそうですが、今回は比較的リッチなツールを使わないでやってみました。また、テンプレートの使い方にフォーカスを当てましたが、CLIには色々なコマンドがあり使うとどうなるのか気になるものも多くあります。

興味を持った方は是非それらのツールについても色々と試してみてください。