Azure Blueprints で使用する関数

Azure Blueprints では、ブループリントの定義をより動的にする関数が提供されます。 これらの関数は、ブループリントの定義とブループリント アーティファクトで使用するためのものです。 Azure Resource Manager テンプレート (ARM テンプレート) のアーティファクトでは、ブループリントのパラメーターによって動的な値を取得するだけでなく、Resource Manager の関数の使用も完全にサポートされています。

次の関数がサポートされています。

artifacts

artifacts(artifactName)

そのブループリント アーティファクトの出力が設定されたプロパティのオブジェクトが返されます。

注意

artifacts() 関数は、ARM テンプレート内からは使用できません。 Azure PowerShell または REST API によってブループリントを Blueprints-as-code の一部として管理する場合、関数は、ブループリント定義の JSON 内またはアーティファクト JSON 内のみで使用できます。

パラメーター

パラメーター 必須 説明
artifactName はい string ブループリント アーティファクトの名前。

戻り値

出力プロパティのオブジェクト。 outputs のプロパティは、参照されているブループリント アーティファクトの種類に依存します。 すべての種類は次の形式に従います。

{
  "outputs": {collectionOfOutputProperties}
}

ポリシー割り当てアーティファクト

{
    "outputs": {
        "policyAssignmentId": "{resourceId-of-policy-assignment}",
        "policyAssignmentName": "{name-of-policy-assignment}",
        "policyDefinitionId": "{resourceId-of-policy-definition}",
    }
}

ARM テンプレートのアーティファクト

返されるオブジェクトの outputs のプロパティは、ARM テンプレート内で定義されており、デプロイによって返されます。

ロールの割り当てアーティファクト

{
    "outputs": {
        "roleAssignmentId": "{resourceId-of-role-assignment}",
        "roleDefinitionId": "{resourceId-of-role-definition}",
        "principalId": "{principalId-role-is-being-assigned-to}",
    }
}

次のサンプル出力プロパティを含む ID が myTemplateArtifact の ARM テンプレート アーティファクト:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    ...
    "outputs": {
        "myArray": {
            "type": "array",
            "value": ["first", "second"]
        },
        "myString": {
            "type": "string",
            "value": "my string value"
        },
        "myObject": {
            "type": "object",
            "value": {
                "myProperty": "my value",
                "anotherProperty": true
            }
        }
    }
}

myTemplateArtifact サンプルからデータを取得する例を次にいくつか示します。

Type
[artifacts("myTemplateArtifact").outputs.myArray] Array ["first", "second"]
[artifacts("myTemplateArtifact").outputs.myArray[0]] String "first"
[artifacts("myTemplateArtifact").outputs.myString] String "my string value"
[artifacts("myTemplateArtifact").outputs.myObject] Object { "myproperty": "my value", "anotherProperty": true }
[artifacts("myTemplateArtifact").outputs.myObject.myProperty] String "my value"
[artifacts("myTemplateArtifact").outputs.myObject.anotherProperty] Bool True

concat

concat(string1, string2, string3, ...)

複数の文字列値を結合し、連結された文字列を返します。

パラメーター

パラメーター 必須 説明
string1 はい string 連結の最初の値。
残りの引数 いいえ string 連結する順番での追加の値

戻り値

連結された値の文字列。

解説

Azure Blueprints 関数は、文字列でのみ動作する点が、ARM テンプレート関数と異なります。

concat(parameters('organizationName'), '-vm')

parameters

parameters(parameterName)

ブループリント パラメーターの値が返されます。 指定するパラメーター名が、ブループリント定義またはブループリント アーティファクトで定義されている必要があります。

パラメーター

パラメーター 必須 説明
parameterName はい string 返されるパラメーターの名前。

戻り値

指定したブループリント パラメーターまたはブループリント アーティファクト パラメーターの値。

解説

Azure Blueprints 関数は、ブループリント パラメーターでのみ動作する点が、ARM テンプレート関数と異なります。

ブループリント定義でパラメーター principalIds を定義します。

{
    "type": "Microsoft.Blueprint/blueprints",
    "properties": {
        ...
        "parameters": {
            "principalIds": {
                "type": "array",
                "metadata": {
                    "displayName": "Principal IDs",
                    "description": "This is a blueprint parameter that any artifact can reference. We'll display these descriptions for you in the info bubble. Supply principal IDs for the users,groups, or service principals for the Azure role assignment.",
                    "strongType": "PrincipalId"
                }
            }
        },
        ...
    }
}

次に、ブループリント アーティファクトの parameters() に対する引数として principalIds を使います。

{
    "type": "Microsoft.Blueprint/blueprints/artifacts",
    "kind": "roleAssignment",
    ...
    "properties": {
        "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
        "principalIds": "[parameters('principalIds')]",
        ...
    }
}

resourceGroup

resourceGroup()

現在のリソース グループを表すオブジェクトを返します。

戻り値

返されるオブジェクトの形式は次のとおりです。

{
  "name": "{resourceGroupName}",
  "location": "{resourceGroupLocation}",
}

解説

Azure Blueprints 関数は、ARM テンプレート関数と異なります。 resourceGroup() 関数は、サブスクリプション レベルのアーティファクトまたはブループリント定義では使用できません。 リソース グループ アーティファクトの一部であるブループリント アーティファクトでのみ使用できます。

resourceGroup() 関数の一般的な使用方法は、リソース グループ アーティファクトと同じ場所にリソースを作成することです。

リソース グループの場所を使用するには、ブループリント定義または割り当て中のいずれかで、別のアーティファクトに対する場所として設定し、ブループリント定義でリソース グループのプレースホルダー オブジェクトを宣言します。 次の例では、NetworkingPlaceholder がリソース グループ プレースホルダーの名前です。

{
    "type": "Microsoft.Blueprint/blueprints",
    "properties": {
        ...
        "resourceGroups": {
            "NetworkingPlaceholder": {
                "location": "eastus"
            }
        }
    }
}

その後、リソース グループのプレースホルダー オブジェクトを対象とするブループリント アーティファクトのコンテキストで、resourceGroup() 関数を使います。 この例では、テンプレート アーティファクトは NetworkingPlaceholder リソース グループにデプロイされ、NetworkingPlaceholder リソース グループの場所が動的に設定されたパラメーター resourceLocation がテンプレートに提供されます。 NetworkingPlaceholder リソース グループの場所は、ブループリント定義で静的に定義されているか、または割り当ての間に動的に定義されています。 いずれの場合も、テンプレート アーティファクトでは、パラメーターとしてその情報が提供され、正しい場所にリソースをデプロイするために使用されます。

{
  "type": "Microsoft.Blueprint/blueprints/artifacts",
  "kind": "template",
  "properties": {
      "template": {
        ...
      },
      "resourceGroup": "NetworkingPlaceholder",
      ...
      "parameters": {
        "resourceLocation": {
          "value": "[resourceGroup().location]"
        }
      }
  }
}

resourceGroups

resourceGroups(placeholderName)

指定したリソース グループ アーティファクトを表すオブジェクトが返されます。 アーティファクトのコンテキストが必要な resourceGroup() とは異なり、この関数は、特定のリソース グループ プレースホルダーのプロパティを、そのリソース グループのコンテキスト内にないときに取得するために使用されます。

パラメーター

パラメーター 必須 説明
placeholderName はい string 取得するリソース グループ アーティファクトのプレースホルダーの名前。

戻り値

返されるオブジェクトの形式は次のとおりです。

{
  "name": "{resourceGroupName}",
  "location": "{resourceGroupLocation}",
}

リソース グループの場所を使用するには、ブループリント定義または割り当て中のいずれかで、別のアーティファクトに対する場所として設定し、ブループリント定義でリソース グループのプレースホルダー オブジェクトを宣言します。 次の例では、NetworkingPlaceholder がリソース グループ プレースホルダーの名前です。

{
    "type": "Microsoft.Blueprint/blueprints",
    "properties": {
        ...
        "resourceGroups": {
            "NetworkingPlaceholder": {
                "location": "eastus"
            }
        }
    }
}

その後、任意のブループリント アーティファクトのコンテキストから resourceGroups() 関数を使って、そのリソース グループ プレースホルダー オブジェクトへの参照を取得します。 この例では、テンプレート アーティファクトは NetworkingPlaceholder リソース グループの外側にデプロイされ、NetworkingPlaceholder リソース グループの場所が動的に設定されたパラメーター artifactLocation がテンプレートに提供されます。 NetworkingPlaceholder リソース グループの場所は、ブループリント定義で静的に定義されているか、または割り当ての間に動的に定義されています。 いずれの場合も、テンプレート アーティファクトでは、パラメーターとしてその情報が提供され、正しい場所にリソースをデプロイするために使用されます。

{
  "kind": "template",
  "properties": {
      "template": {
          ...
      },
      ...
      "parameters": {
        "artifactLocation": {
          "value": "[resourceGroups('NetworkingPlaceholder').location]"
        }
      }
  },
  "type": "Microsoft.Blueprint/blueprints/artifacts",
  "name": "myTemplate"
}

subscription

subscription()

現在のブループリント割り当てのサブスクリプションの詳細が返されます。

戻り値

返されるオブジェクトの形式は次のとおりです。

{
    "id": "/subscriptions/{subscriptionId}",
    "subscriptionId": "{subscriptionId}",
    "tenantId": "{tenantId}",
    "displayName": "{name-of-subscription}"
}

サブスクリプションの表示名と concat() 関数を使って、テンプレート アーティファクトにパラメーター resourceName として渡される名前付け規則を作成します。

{
  "kind": "template",
  "properties": {
      "template": {
          ...
      },
      ...
      "parameters": {
        "resourceName": {
          "value": "[concat(subscription().displayName, '-vm')]"
        }
      }
  },
  "type": "Microsoft.Blueprint/blueprints/artifacts",
  "name": "myTemplate"
}

次のステップ