テンプレート関数を使用して 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 テンプレート関数がいくつか用意されています。 これらの関数は、その型に基づいてグループで一覧表示されます。
- 配列を操作するための "配列関数"。 たとえば、
first
やlast
です。 - テンプレート内で比較を行うための "比較関数"。 たとえば、
equals
やgreater
です。 - 日付を操作するための "日付関数"。 たとえば、
utcNow
やdateTimeAdd
です。 - テンプレートのセクションの値とデプロイに関連する値を取得するための "デプロイ値関数"。 たとえば、
environment
やparameters
です。 - 論理条件を操作するための "論理関数"。 たとえば、
if
やnot
です。 - 整数を操作するための "数値関数"。 たとえば、
max
やmod
です。 - オブジェクトを操作するための "オブジェクト関数"。 たとえば、
contains
やlength
です。 - リソースの値を取得するための "リソース関数"。 たとえば、
resourceGroup
やsubscription
です。 - 文字列を操作するための "文字列関数"。 たとえば、
length
やstartsWith
です。
1 つの式で複数の関数を使用する方法
複数のテンプレート関数を一緒に使用して、独自の式を作成できます。 このシナリオでは、プレフィックスの入力とリソース グループ ID のハッシュを組み合わせることによって、リソース グループごとに一意の名前を作成する式を作成する必要があります。 この式の結果は、dev2hu6fktr577wh
や staging5his8hgr67tt5
などのストレージ アカウント名になります。 4 つの関数を使用して、この文字列値を作成できます。 次に例を示します。
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
この式を詳しく見ていきましょう。
まず concat ですが、この関数は任意の数の引数を受け取り、パラメーターに文字列または配列を渡すことができます。 ここでは、リテラル文字列 "Storage"
を使用し、別の関数 uniqueString の結果と連結します。 uniqueString
関数により、パラメーターに基づいて決定性のハッシュ文字列が作成されます。 この式で、別の関数 resourceGroup を使用して、現在のリソース グループ ID のハッシュを作成します。
これまで説明した内容の出力は次のとおりです。
名前付け規則に従うには、この文字列をすべて小文字にする必要があります。 ここでは、外側の関数として toLower 関数を追加します。
結果の文字列は次のようになります。