BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人的メモ

ARM (Azure Resource Manager) テンプレートで環境構築 の基礎

今回はARMテンプレートの基礎的な話と、ストレージアカウントをARMテンプレートで作るっていうメモです(absolute beginner 向け...)。

Azure Antenna のイベントに参加した感想も♪。

PaaSがかり 傘下の私的に、Azure の環境構築するのにARMテンプレートは必須です。

特に開発環境とか改修ごとに環境を手で作るとか、環境構築手順書作って手作業するとか紀元前か!ってくらいクソありえないですね(もう今更感が凄いですが...)。

そんなわけで私の開発チームでもARMテンプレートは作らせているのですが、めんどくさがーりな私は誰かに作らせてばっかで詳しいこと知らんので、渋谷ヒカリエAzure Antenna のイベントで "インフラ野郎" ということばをバズらせた(?)真壁先生のところに体験入隊してきました♪

azure.connpass.com

セッションの感想

先にこのセッションに参加した個人的な感想を書いておくと、
渋谷ヒカリエで毎週やってる Azure Antenna は、MAX8人程度で行われるので、講師といい感じに会話ができて凄くいい感じです。

今回の 真壁さん のようなMSの中のディープな方が登場することもあり、実務に直結するレベルの話が聞けるし質問にも応えて頂けるので非常に役に立っております。ありがとうございました♪

興味がある方は、イベントに参加してディープな質問しまくって、業務でバビッとバリューを出して行きましょう♪なーんて思ってます。

前置き&感想はここまでにして進めましょう。

ARMテンプレートの概要

ざっくりですが、ARMテンプレートは Azure の環境構築をコード化して実行するためのテンプレートです。json形式です。

詳しい情報は、サー・真壁氏の資料、Infrastructure as Code ~ ARMテンプレートについてわかりやすくまとまっています。

www.slideshare.net

ということで、このブログでは個人的なまとめ程度をメモ。

概要 > ARM テンプレートを作る方法

ざっくり2通りあると思っています(これを2通りというかはさておき)。

  1. ゼロから、またはサンプルを元に作る
  2. Azureのポータルで作成済みの環境からテンプレートを出力して編集する

どのみちエディタが必要になりますので、しょぼいテキストエディタ使うくらいなら、インテリセンスのきく Visual Studio Code (VS Code)がおすすめです。前述の真壁隊長の資料 39ページあたり にVS Codeのインストールと拡張機能のインストール方法が書いてあるのでここでは触れません。

概要 > 作った ARM テンプレートの実行方法

実行する方法というか環境については2通り。

  • Azure ポータルのGUIでポチポチしてARMテンプレートで実行
  • PowerShell または Azure CLI のコマンドでARMテンプレートを実行
    この場合PowerShell または Azure CLIの環境が必要です。インストールしてもよいし、Azure Portal の CloudShell 機能、または VS Code の拡張機能で Cloud Shell を実行もできます。環境を手間をかけてインストールすればサクサク動くし、Cloud Shell を使うとちょっと動作が遅いですが、インストールする必要がないので楽です。

実行環境の選定や構築については、隊長の資料の 39ページあたり から解説があります。

今回は、

  • 実行は、Azure ポータルから Cloud Shell
  • Storage 作成のシンプルなARMテンプレートを作ってっ実行
  • ARMテンプレートを外部テンプレート、外部パラメータに分割して実行

くらいを試します。

ってか色々やってたらどんどんやりたいことが増えてブログが書き終える気がしなかったので...ここではシンプルなことに留めておこうって感じになりました。

Cloud Shell の準備

Azure のポータルの上の方にある Cloud Shell のボタンっぽいのをクリックします。

f:id:beachside:20171221175100p:plain


初めての場合、以下の画面が出てきます。Bash or PowerShell の好みの方を選択してセットアップしましょう(後で変えることもできます)。ここでは Bash にて進めます。

f:id:beachside:20171221185808p:plain


選択すると、Storage の作成するような支持が出てきますので、画面にそって進めればよいです。

準備が終わると、リソースグループが作られています。私の場合、cloud-shell-storage-westus という名称のリソースグループができており、その中に ストレージアカウントができています。

f:id:beachside:20171221175128p:plain


ストレージアカウントをクリックし、その中でファイルをクリックしてみます。

f:id:beachside:20171221175150p:plain


中にはファイル共有のものが一つ(上図だと「cs-brave....」)作られています。それをクリックすると、ここが Cloud Shell でコマンドをたたく際のデフォルトのディレクトリになります。最初は、「.cloudconsole」のディレクトリだけがあります。

f:id:beachside:20171221181112p:plain

今回は、ARMテンプレートを置いて実行します(もちろん、どこに他のどっかにおいても大丈夫です)。


Cloud Shell で表示されたルートでコマンド ls をたたくと、「clouddrive」 が表示されます。「clouddrive」に移動して ls -a をたたくと、「.cloudconsole」が確認できます。ARMテンプレートを置いて実行するときは、ファイルのパスが通ってるか確認してから実行しましょうって感じです(セミナーでここであれってなっている人がぼちぼちいたので...)。

f:id:beachside:20171221175235p:plain


ARM テンプレートの作成

シンプルなARM テンプレートの作成

シンプルなストレージアカウント作成のテンプレートを用意してみました。

  • 5~21行目の parameters で、パラメーターを定義して defaultValue で値を定義してます。value で値を定義してもよいです。ここで深い意味はありません。

  • 23~27行目 variables では、「name」というキーでストレージアカウントの名称を設定しています。uniqueStringメソッドを使ってリソースグループのidからユニークな変数を生成しています。httpsTrafficOnlyEnabled も定義していますが、これらをvariablesで定義していることに深い意味はありません。実際のテンプレートの中でやってもいいでしょう(用途次第ですね)。

あとは、resources の中で parameters や variables を使ってストレージアカウントを生成しています。

ARM テンプレートの実行

Azure Storage Explorer とか使ってARM テンプレートを先ほどのストレージにアップロードします。先ほど Cloud Shell を準備したときに作られたストレージの clouddrive の直下に置きました。
azコマンドでARMテンプレートを実行する際は、当たり前ですが、ファイルが見えてないと実行できないので、テンプレートを置いたディレクトリに移動してファイルが見えることを確認しておきました。

f:id:beachside:20171221175256p:plain


テンプレートを実行するには、リソースグループを指定しますので、ない場合は作ります。ここでは、demo-arm1 という名称のリソースグループを South Central US に作る、以下のコマンドを実行。

az group create --name demo-arm1 --location "South Central US"


では、今作ったリソースグループ demo-arm1 を指定してARMテンプレートを実行するのに以下のコマンドをツッターン♪

az group deployment create --resource-group demo-arm1 --template-file storage-deploy.json

エラーなくコマンドの実行が終わったら Azure ポータルでストレージアカウントができていることが確認できます。

外部テンプレート、外部パラメーターの使用

汎用的に使うために分割しましょうかねって感じです。詳しくはこちらを読んだ方がいいです。

構成としては、

  • storage.json :ストレージアカウント生成用
  • storage.parameters.json :storage.jsonのパラメーターの値用
  • main.json :実行エントリーポイント用。これをコマンドから呼んでARMテンプレートの実行をする

まずは、storage.json

外部のファイルにパラメーターを定義するからと言っても、このファイルでパラメーターの定義は必要です(5~22行目)。デフォルト値も付けてます。他は最初のテンプレートとあまり差がないですが、outputs (58-62行目) で接続文字列を output してみました。


次は、storage.parameters.json

storage.json で定義してる paramters に値をセットできます。今回 name (5-7行目)を storage.json の defaultValue と別の値にしました。ここで定義した値(正しくはこの値+ storage.json の vriables で生成された値)でストレージアカウントの名前が登録されるはず。

これらの2つのファイルは、次に登場する main.json 内でURLで指定して呼び出すので、今回は特に理由なくBLOBに置きました。
アクセスできるよう、ここでは雑にBLOBのコンテナーに匿名の読み取り権限の付与して作成してます(ちゃんとやるならSASトークン使うとかなんらかのセキュアな方法を使いましょう...)。

f:id:beachside:20171221175334p:plain


最後に main.json

6行目にファイルを置いたBLOBのコンテナーのパスを書きます。
20行目で storage.json のURLを、24行目で storage.parameters.json のパスを設定しています。

また、24-34行目で、storage.json で定義した outputsstorageConnectionString の値を呼び出してみました。

これを実行すると、Bush でちゃんと出力されていることが確認できます。

f:id:beachside:20171221175343p:plain


ということで、なんだか量のわりに中身の薄い内容になったのを感じていますが、うまくARMテンプレートを使って快適なDEVライフを過ごしましょう♪

おしまい。

参考