テンプレート関数を使用して Azure Resource Manager テンプレートの柔軟性を高める

完了

このシナリオでは、異なる環境への Azure Resource Manager (ARM) テンプレートのデプロイを、可能な限り容易にすることが目標です。 競合する部分の 1 つは、Azure ストレージ アカウントに対する一意の名前に関するものです。

この問題を解決するため、あなたは ARM テンプレート関数を使用して式を作成することにします。

ARM テンプレート関数とは

ARM テンプレート関数を使用してデプロイの間に値を動的に取得することで、ARM テンプレートの柔軟性が向上します。

関数を理解するには、まず式を理解する必要があります。 式は、テンプレートがデプロイされるときに評価される値です。 角かっこ [] で始まりと終わりが示され、文字列、整数、ブール値、配列、またはオブジェクトを返すことができます。

この学習パスの前のモジュールの Resource Manager テンプレートで、式は既に使用しています。 たとえば、次のように使用しました。

"parameters": {
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},

defaultValue: 属性の値が "" です。 この式では、"ARM テンプレート関数" の resourceGroup() が保持されていることに注意してください。 この関数では、このテンプレートのデプロイ先のリソース グループに関する情報が返されます。 .location では、関数によって返されたオブジェクトから 1 つのプロパティが取得されます。 関数を使用すると、必要な値を動的に構築できます。

ARM テンプレート関数の使用方法

関数を使用する場合は、従うべきいくつかのルールがあります。

  • 関数に文字列値を渡す場合は、単一引用符を使用します。 次に例を示します: concat('storage',uniqueString(resourceGroup().id))。 関数は concat で、関数に渡す文字列は 'storage' です。

  • テンプレート関数でリテラル値を使用するには、"エスケープ文字" が必要です。 エスケープ文字は、エスケープする対象によって異なります。

  • プロパティを null に設定するには、null または [json('null')] を使用します。 パラメーターとして null を指定した場合、JSON 関数からは空のオブジェクトが返されます。

    "stringValue": null,
    "objectValue": "[json('null')]"
    

Resource Manager には、ARM テンプレート関数がいくつか用意されています。 これらの関数は、その型に基づいてグループで一覧表示されます。

  • 配列を操作するための "配列関数"。 たとえば、firstlast です。
  • テンプレート内で比較を行うための "比較関数"。 たとえば、equalsgreater です。
  • 日付を操作するための "日付関数"。 たとえば、utcNowdateTimeAdd です。
  • テンプレートのセクションの値とデプロイに関連する値を取得するための "デプロイ値関数"。 たとえば、environmentparameters です。
  • 論理条件を操作するための "論理関数"。 たとえば、ifnot です。
  • 整数を操作するための "数値関数"。 たとえば、maxmod です。
  • オブジェクトを操作するための "オブジェクト関数"。 たとえば、containslength です。
  • リソースの値を取得するための "リソース関数"。 たとえば、resourceGroupsubscription です。
  • 文字列を操作するための "文字列関数"。 たとえば、lengthstartsWith です。

1 つの式で複数の関数を使用する方法

複数のテンプレート関数を一緒に使用して、独自の式を作成できます。 このシナリオでは、プレフィックスの入力とリソース グループ ID のハッシュを組み合わせることによって、リソース グループごとに一意の名前を作成する式を作成する必要があります。 この式の結果は、dev2hu6fktr577whstaging5his8hgr67tt5 などのストレージ アカウント名になります。 4 つの関数を使用して、この文字列値を作成できます。 次に例を示します。

"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"

この式を詳しく見ていきましょう。

まず concat ですが、この関数は任意の数の引数を受け取り、パラメーターに文字列または配列を渡すことができます。 ここでは、リテラル文字列 "Storage" を使用し、別の関数 uniqueString の結果と連結します。 uniqueString 関数により、パラメーターに基づいて決定性のハッシュ文字列が作成されます。 この式で、別の関数 resourceGroup を使用して、現在のリソース グループ ID のハッシュを作成します。

これまで説明した内容の出力は次のとおりです。

Storage という単語を、大文字と小文字の両方を含む 13 文字のハッシュと連結して作成された文字列の画像。

名前付け規則に従うには、この文字列をすべて小文字にする必要があります。 ここでは、外側の関数として toLower 関数を追加します。

結果の文字列は次のようになります。

Storage という単語を 13 文字のハッシュと連結した後、すべての文字を小文字に変換することで作成された文字列の画像。