Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Azure Microsoft

AzureのARMテンプレートをPowerShellからデプロイする手順をご紹介

投稿日:2021年7月15日 更新日:

 

<目次>

(1) AzureのARMテンプレートをPowerShellからデプロイする手順をご紹介
 (1-1) Azure Resouce Managerとは?
 (1-2) ARMテンプレートとは?
 (1-3) ARMテンプレートをデプロイするためのツール準備(Azure PowerShell)
 (1-4) ARMテンプレートをデプロイする手順
 (1-5) ARMテンプレートの作成を補助するツール等

(1) AzureのARMテンプレートをPowerShellからデプロイする手順をご紹介

Azureではリソースを作成する際に「ARMテンプレート」を使う事で、画面からオペレーションする事なく、素早く大量にリソースを作成する事が可能になります。

本記事ではARMテンプレートのご紹介と、実際にテンプレートを使ってリソース(今回はストレージの例をご紹介)をデプロイ(作成)する手順をご紹介いたします。

(1-1) Azure Resouce Managerとは?

「Azure Resouce Manager」(以降「ARM」と記述)はAzureのリソースを集中管理するためのサービスです。

Azureでリソースを作成する際には主に4つのインターフェイス(経路)がありますが、どの方法でリソースを作成しても、内部的には「ARM」を経由して作成の指令が出され、作成が実行されます。
 
具体的には下図のように「Azure Portal」「Azure PowerShell」「Azure CLI」「REST Client」など様々な経路からリソースを作る事ができますが、どれも最終的にはARMを経由して作成されるため、どの手段で作成しても同一の結果が担保されます。
 
(図111)
 
またAzure Active Directoryによる「認証」が入るため、いずれの経路もセキュアです。認証が完了すると、ARMは「リソースプロバイダ」と通信を行い、リソースが作成されます。
 
今回ご紹介する「テンプレートによるリソース作成」は複数ある経路のうち、「Azure PowerShell」からコマンドを実行する方法になります。
 

 

(1-2) ARMテンプレートとは?

冒頭でも少し触れましたが「ARMテンプレート」はリソースを作成する際に事前に用意した「テンプレート」を使う事で、画面操作をする事なく、素早く大量にリソースを作成できる機能になります。

「ARMテンプレート」はJSON形式で表現されており、以下のような構成のイメージです。

(例)

{
  "$schema":"https://schema.management.azure.com/schemas/YYYY-MM-DD/deploymentTemplate.json#",
  "contentVersion":"1.0.0.0",
  "parameters":{},
  "variables":{},
  "resouces":[
    {
      /* リソース1の定義(例:仮想マシン)  */
    },
    {
      /* リソース2の定義(例:ストレージ) */    
    },
    {
      /* リソース3の定義(例:AppService */    
    },
    /* ~中略~ */
    {
      /* リソースNの定義 */
    }    
  ],
  "outputs":{},
  "functions":[]
}

 

以下はVisual Studioで作成した空のARMテンプレートの例です。

(図121)空のテンプレートの例

●テンプレートの各項目について

テンプレートに記載する内容(項目)は作りたいリソースの種類(仮想マシン、ストレージ、仮想ネットワークなど)によって当然異なってきますが、いくつかの必須項目もあり、どのテンプレートにも共通する項目としては次のようなものがあります。

(表)

$schema ●必須 テンプレートにて利用可能なプロパティ(≒属性、項目)を指定する項目です。スキーマには日付が入っており、スキーマのバージョンを表しています。
contentVersion ●必須 テンプレートのバージョンを指定するためのプロパティです。
parameters 任意 テンプレート実行時の入力パラメータを与える際に使います。
リソース毎に共有できない値(ID、パスワード、マシン名)等の値をテンプレートから外だしする等の目的で使用します。
variables 任意 動的な計算を行い、その計算結果をテンプレート実行時の入力パラメータとして与える際に使います。
resouces ●必須 各リソースの定義を記述する、テンプレートで最も重要となる部分です。JSON形式の「配列」で表現されており、各要素が1つのリソースに対応しています。これにより、1つのテンプレートで複数のリソースを同時に作成する事ができます。
outputs 任意 テンプレートの実行結果から値を受け取る(戻り値のようなもの)際に使います。
functions 任意 複数のテンプレートで共通に使う処理があれば、外出ししてこのfunctionsに指定する事ができます。

目次にもどる

(1-3) ARMテンプレートをデプロイするためのツール準備(Azure PowerShell)

今回のデプロイはご自身のクライアント端末に入っているPowerShellから行いますが、そのためにはAzure用のモジュール(Azure PowerShellの「Az」モジュール)を予めインストールしておく必要があります。

そちらの手順は別記事にてご紹介していますので、ご参照頂けたらと思います。
 
 

(1-4) ARMテンプレートをデプロイする手順

Power Shellの準備が出来たら、いよいよ実際のテンプレートを作って、それをデプロイする手順に入ります。

●STEP1:ARMテンプレートを準備

ARMテンプレートは上記でご紹介した基本の雛形に追記をしていきます。今回の例では「ストレージアカウント」を作成しますので、以下の内容を追記します。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {},
  "resources": [
    {
      "name":"rainbowstorageaccount1"
      "type":"Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-01-01",
      "location":"[resouceGroup().location]",
      "sku": {
        "name": "Standard_RAGRS",
        "tier": "Standard"
      },
      "kind":"StorageV2"
      "properties":{
        "accessTier":"Hot"
      }
    }
  ],
  "outputs":{},
  "functions":[]
}
 
 
この追記内容はAzure Portalのストレージアカウント作成画面と紐づいており、下図はその対応関係の例です。設定画面の項目をJSONに落としているのがARMテンプレートである、という点を感じて頂けると思います。

 

(図131)ARMテンプレート vs Azure Portal設定画面

 

●STEP2:デプロイを実行するPowerShellコマンドレットの準備

次にテンプレートを使ってリソースの作成を実行するPowerShellのコマンドレットを準備します。テキストエディタ等に貼り付けて、拡張子「.ps1」で保存します。
 
(PowerShellコマンドレット)
# リージョンの変数を定義
$location = 'japaneast'
# リソースグループの変数を定義
$rgName = 'RainbowResourceGroup2'
# リソースグループを作成(引数にリージョンとリソースを付与)
New-AzResouceGroup -Name $rgName -Location $location

# リソースのデプロイ
New-AzResouceGroupDeployment `
 -Name ‘create-new-storage’ `
 -ResouceGroupName $rgName `
 -TemplateFile C:\Temp\Azure\Storage\StorageBasic\template.json `
 -TemplateParameterFile C:\Temp\Azure\Storage\StorageBasic\parameters.json `

(図132)

(表)コマンドレットの説明

コマンドレット 説明
New-AzResouceGroup 「リソースグループ」を作成するコマンドレットです。今回使用したオプションは次の通りです。

(オプション)
・Name
リソースグループの名前
・Location
リソースグループのリージョン

New-AzResouceGroupDeployment 「リソース」をデプロイるコマンドレットです。今回使用したオプションは次の通りです。

(オプション)
・Name
デプロイの名前(リソースの名前ではありません)
・ResouceGroupName
紐づけるリソースグループの名前を指定します。
・TemplateFile
ARMテンプレートのパスを指定します。
・TemplateParameterFile
パラメータファイルのパスを指定します。

●STEP3:Azure PowerShellを開いてログイン

・検索窓から「PowerShell」を検索して開きます。
(図133)

・Azureにログイン
 
「Connect-AzAccount」コマンドレットを実行するとAzureの認証(ログイン)用のウィンドウが開くので、ログインをします。

(コマンド)
> Connect-AzAccount

(図134)①

(図134)②:認証成功

●STEP4:準備したPowerShellの実行

いよいよ、先ほど準備したPowerShellを実行します。

(図135)

環境にもよりますが、リソースグループは一瞬で作成が完了し、ストレージは私の環境では30秒程度でしたでしょうか?

実際の操作動画をご紹介します。
 
(操作動画)

●STEP5:結果確認

最後にAzure Portalにて実際に作成されたリソース(ストレージアカウント)を確認します。

(図136)PowerShellから作成したリソースが正常に作成されている

目次にもどる

(1-5) ARMテンプレートの作成を補助するツール等

ここまで読んで頂いた方は、「ARMテンプレートに書く内容ってどうやったら分かるの?」とか「素早くテンプレートを作成する方法はあるか?」といった様々な疑問を持たれたかも知れません。 以下、Tipsを2つほどご紹介します。

●①テンプレートの記載内容の確認方法

・リソースの左メニューから「テンプレートのエクスポート」ブレードを選択
(図151)

・上段メニューから「ダウンロード」や「デプロイ」といった操作が可能です。
(図152)

●②テンプレートを素早く作成する方法

Visual Studio CodeのAzure Resouce Manager(ARM) Toolsを使うと、テンプレートを素早く作成する事ができます。

https://marketplace.visualstudio.com/items?itemName=msazurermtools.azurerm-vscode-tools

(図153)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Azure, Microsoft

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Azureの「NSG」と「Azure Firewall」の違いについて

  <目次> (1) Azureの「NSG」と「Azure Firewall」の違いについて  (1-1) Azure Firewallとは?  (1-2) Azure Firewallの設 …

Azure Storageとは?特徴や4種類のストレージの概要をご紹介

  <目次> (1) Azure Storageとは?特徴や4種類のストレージの概要をご紹介  (1-1) Azure Storageとは?4種類のストレージの概要   (1-1-1) BL …

Azure Cosmos DBの使い方入門(作成~データ登録~SQL発行)

  <目次> (1) Azure Cosmos DBの使い方入門(作成~データ登録~SQL発行)  (1-0) Azure Cosmos DBとは?  (1-1) STEP1: Cosmos …

Azure PowerShellのインストール手順(Azモジュール)及びコマンド一覧の確認方法

  <目次> (1) Azure PowerShellのインストール手順(Azモジュール)及びコマンド一覧の確認方法  (1-1) 事前準備:ご自身のPowerShellのバージョン確認   …

Azure AD Privileged Identity Management(PIM)とは?

  <目次> (1) Azure AD Privileged Identity Management(PIM)とは?  (1-1) Azure AD Privileged Identity …

  • English (United States)
  • 日本語
Top