次の方法で共有


Bicep のリソース関数

この記事では、リソースの値を取得するための Bicep 関数について説明します。

現在のデプロイから値を取得するには、「Deployment value functions (デプロイ値関数)」を参照してください。

extensionResourceId

extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)

拡張リソースのリソース ID を返します。 拡張リソースは、その機能に追加する別のリソースに適用されるリソースの種類です。

名前空間: az

extensionResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

この関数から返されるリソース ID の基本形式は次のとおりです。

{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

スコープ セグメントは、拡張されるリソースによって変わります。

拡張リソースがリソースに適用される場合、リソース ID は次の形式で返されます。

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

拡張リソースがリソース グループに適用される場合、形式は次のようになります。

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

拡張リソースがサブスクリプションに適用される場合、形式は次のようになります。

/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

拡張リソースが管理グループに適用される場合、形式は次のようになります。

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

管理グループにデプロイされたカスタム ポリシー定義は、拡張リソースとして実装されます。 ポリシーを作成して割り当てるには、以下の Bicep ファイルを管理グループにデプロイします。

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: '___location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

組み込みのポリシー定義は、テナント レベルのリソースです。 組み込みのポリシー定義をデプロイする例については、「tenantResourceId」を参照してください。

getSecret

keyVaultName.getSecret(secretName)

Azure Key Vault からシークレットを返します。 この関数を使用して、Bicep モジュールのセキュリティで保護された文字列パラメーターにシークレットを渡します。

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) 関数はキー コンテナー シークレットを取得するために .bicepparam ファイルで使用できます。 詳細については、「getSecret」を参照してください。

getSecret 関数は、モジュールの params セクション内からしか使用できません。 Microsoft.KeyVault/vaults リソースでのみ使用できます。

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

この関数を Bicep ファイルの他の部分で使用しようとすると、エラーが発生します。 また、パラメーター セクションで使用されている場合でも、文字列補間でこの関数を使用するとエラーが発生します。

この関数は、@secure() デコレーターを持つモジュール パラメーターでのみ使用できます。

キー コンテナーでは、enabledForTemplateDeploymenttrue に設定する必要があります。 Bicep ファイルをデプロイするユーザーは、シークレットにアクセスできる必要があります。 詳細については、「Bicep デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡す」を参照してください。

この関数はリソースの種類と共に使用されるため、namespace 修飾子は必要ありません。

パラメーター

パラメーター 必須 タイプ 説明
シークレット名 はい ひも Key Vault に格納されているシークレットの名前。

戻り値

シークレット名のシークレット値。

次の Bicep ファイルがモジュールとして使用されます。 これには、adminPassword パラメーターが @secure() デコレーターで定義されています。

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  ...
}

次の Bicep ファイルは、前の Bicep ファイルをモジュールとして使用します。 Bicep ファイルは既存のキー コンテナーを参照し、getSecret 関数を呼び出してキー コンテナーのシークレットを取得し、その値をパラメーターとしてモジュールに渡します。

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

リスト*

resourceName.list([apiVersion], [functionValues])

list で始まる操作を使用して、任意のリソースの種類に対して list 関数を呼び出すことができます。 一般的に使用されるものとして、listlistKeyslistKeyValuelistSecrets があります。

この関数の構文は、リスト操作の名前によって異なります。 戻り値も操作によって異なります。 Bicep は現在、list* 関数の完了と検証をサポートしていません。

Bicep CLI バージョン 0.4.X 以上では、アクセサー演算子を使用して list 関数を呼び出します。 たとえば、storageAccount.listKeys() のようにします。

この関数はリソースの種類と共に使用されるため、namespace 修飾子は必要ありません。

パラメーター

パラメーター 必須 タイプ 説明
apiVersion (英語) いいえ ひも このパラメーターを指定しない場合は、リソースの API バージョンが使用されます。 特定のバージョンで関数を実行する必要がある場合にのみ、カスタム API バージョンを指定します。 yyyy-mm-dd の形式を使用します。
functionValues いいえ オブジェクト 関数の値を持つオブジェクト。 このオブジェクトは、ストレージ アカウントの listAccountSas など、パラメーター値を持つオブジェクトの受信をサポートする関数に対してのみ指定します。 関数値を渡す例をこの記事で紹介します。

有効な使用方法

list 関数は、リソース定義のプロパティで使用できます。 Bicep ファイルの outputs セクションでは、機密情報を公開する list 関数を使用しないでください。 出力値はデプロイ履歴に格納されるため、悪意のあるユーザーによって取得される可能性があります。

反復ループと一緒に使用する場合は、listinput 関数を使用できます。これは、式がリソース プロパティに割り当てられるためです。 これらを count と一緒に使用することはできません。カウントは、list 関数が解決される前に決定される必要があるためです。

条件付きでデプロイされるリソースで list 関数を使用した場合、この関数は、リソースがデプロイされていなくても評価されます。 list 関数が存在しないリソースを参照している場合、エラーが返されます。 条件式?: 演算子を使用して、リソースがデプロイされているときにのみ関数が評価されるようにします。

戻り値

返されるオブジェクトは、使用するリスト関数によって異なります。 たとえば、ストレージ アカウントに対して listKeys は次の形式を返します。

{
  "keys": [
    {
      "keyName": "key1",
      "permissions": "Full",
      "value": "{value}"
    },
    {
      "keyName": "key2",
      "permissions": "Full",
      "value": "{value}"
    }
  ]
}

他の list 関数の戻り値の形式はさまざまです。 関数の形式を確認するには、Bicep ファイルの例に示すように、outputs セクションにその関数を含めてください。

リストの例

次の例では、ストレージ アカウントをデプロイし、そのストレージ アカウントで listKeys を呼び出します。 このキーは、デプロイ スクリプトの値を設定するときに使用されます。

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  ___location: ___location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'scriptWithStorage'
  ___location: ___location
  ...
  properties: {
    azCliVersion: '2.0.80'
    storageAccountSettings: {
      storageAccountName: storageAccount.name
      storageAccountKey: storageAccount.listKeys().keys[0].value
    }
    ...
  }
}

次の例は、パラメーターを受け取る list 関数を示しています。 この例では、関数は listAccountSas です。 有効期限のオブジェクトを渡します。 有効期限は将来の日付にする必要があります。

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

実装

list* の使用例を次の表にまとめています。

リソースの種類 関数名
Microsoft.Addons/supportProviders listsupportplaninfo
Microsoft.AnalysisServices/servers listGatewayStatus
Microsoft.ApiManagement/service/authorizationServers listSecrets
Microsoft.ApiManagement/service/gateways listKeys
Microsoft.ApiManagement/service/identityProviders listSecrets
Microsoft.ApiManagement/service/namedValues listValue
Microsoft.ApiManagement/service/openidConnectProviders listSecrets
Microsoft.ApiManagement/service/subscriptions listSecrets
Microsoft.AppConfiguration/configurationStores ListKeys
Microsoft.AppPlatform/Spring listTestKeys
Microsoft.Automation/automationAccounts listKeys
Microsoft.Batch/バッチアカウント listkeys
Microsoft.BatchAI/workspaces/experiments/jobs listoutputfiles
Microsoft.BotService/botServices/channels listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/accounts listKeys
Microsoft.ContainerRegistry/registries listCredentials
Microsoft.ContainerRegistry/registries listUsages
Microsoft.ContainerRegistry/registries/agentpools listQueueStatus
Microsoft.ContainerRegistry/registries/buildTasks listSourceRepositoryProperties
Microsoft.ContainerRegistry/registries/buildTasks/steps listBuildArguments
Microsoft.ContainerRegistry/registries/taskruns listDetails
Microsoft.ContainerRegistry/registries/webhooks listEvents
Microsoft.ContainerRegistry/registries/runs listLogSasUrl
Microsoft.ContainerRegistry/registries/tasks listDetails
Microsoft.ContainerService/managedClusters listClusterAdminCredential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/ジョブ listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factories/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynchronizations
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronizationSettings
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft.DataShare/accounts/shareSubscriptions listSynchronizations
Microsoft.Devices/iotHubs listkeys
Microsoft.Devices/iotHubs/iotHubKeys listkeys
Microsoft.Devices/provisioningServices/keys listkeys
Microsoft.Devices/provisioningServices listkeys
Microsoft.DevTestLab/labs ListVhds
Microsoft.DevTestLab/labs/schedules ListApplicable
Microsoft.DevTestLab/labs/users/serviceFabrics ListApplicableSchedules
Microsoft.DevTestLab/labs/virtualMachines ListApplicableSchedules
Microsoft.DocumentDB/databaseAccounts listKeys
Microsoft.DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft.ドメイン登録 listDomainRecommendations
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGridのトピック listKeys
Microsoft.EventHub/名前空間/authorizationRules listkeys
Microsoft.EventHub/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.EventHub/namespaces/eventhubs/authorizationRules listkeys
Microsoft.ImportExport/jobs listBitLockerKeys
Microsoft.Kusto/Clusters/Databases ListPrincipals
Microsoft.LabServices/labs/users 一覧
Microsoft.LabServices/labs/virtualMachines 一覧
Microsoft.Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft.Logic/integrationAccounts/assemblies listContentCallbackUrl
Microsoft.Logic/integrationAccounts listCallbackUrl
Microsoft.Logic/integrationAccounts listKeyVaultKeys
Microsoft.Logic/integrationAccounts/maps listContentCallbackUrl
Microsoft.Logic/integrationAccounts/partners listContentCallbackUrl
Microsoft.Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft.Logic/workflows listCallbackUrl
Microsoft.Logic/workflows listSwagger
Microsoft.Logic/workflows/runs/actions listExpressionTraces
Microsoft.Logic/workflows/runs/actions/repetitions listExpressionTraces
Microsoft.Logic/workflows/triggers listCallbackUrl
Microsoft.Logic/workflows/versions/triggers listCallbackUrl
Microsoft.MachineLearning/webServices listkeys
Microsoft.MachineLearning/Workspaces listworkspacekeys
Microsoft.MachineLearningServices/ワークスペース/コンピューティング listKeys
Microsoft.MachineLearningServices/ワークスペース/コンピューティング listNodes
Microsoft.MachineLearningServices/workspaces listKeys
Microsoft.Maps/アカウント listKeys
Microsoft.Media/mediaservices/assets listContainerSas
Microsoft.Media/mediaservices/assets listStreamingLocators
Microsoft.Media/mediaservices/streamingLocators listContentKeys
Microsoft.Media/mediaservices/streamingLocators listPaths
Microsoft.Network/applicationSecurityGroups listIpConfigurations
Microsoft.NotificationHubs/Namespaces/authorizationRules listkeys
Microsoft.NotificationHubs/Namespaces/NotificationHubs/authorizationRules listkeys
Microsoft.OperationalInsights/workspaces 一覧
Microsoft.OperationalInsights/workspaces listKeys
Microsoft.PolicyInsights/remediations listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices listAdminKeys
Microsoft.Search/searchServices listQueryKeys
Microsoft.SignalRService/SignalR listkeys
Microsoft.Storage/storageAccounts listAccountSas
Microsoft.Storage/storageAccounts listkeys
Microsoft.Storage/storageAccounts listServiceSas
Microsoft.StorSimple/managers/devices listFailoverSets
Microsoft.StorSimple/managers/devices listFailoverTargets
Microsoft.StorSimple/managers listActivationKey
Microsoft.StorSimple/managers listPublicEncryptionKey
Microsoft.Synapse/workspaces/integrationRuntimes listAuthKeys
Microsoft.Web/connectionGateways ListStatus
microsoft.web/connections listconsentlinks
マイクロソフト.ウェブ/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listsecrets
microsoft.web/sites/backups 一覧
マイクロソフト.Web/sites/config 一覧
microsoft.web/sites/functions listkeys
microsoft.web/sites/functions listsecrets
microsoft.web/sites/hybridconnectionnamespaces/relays listkeys
microsoft.web/sites listsyncfunctiontriggerstatus
microsoft.web/sites/slots/functions listsecrets
microsoft.web/sites/slots/backups 一覧
マイクロソフト.Web/sites/slots/config 一覧
microsoft.web/sites/slots/functions listsecrets

どのリソースの種類にリスト操作が含まれているのかを判断するには、次のオプションを使用できます。

  • リソース プロバイダーの REST API の操作に関するページを参照して、リスト操作を検索します。 たとえば、ストレージ アカウントには listKeys 操作があります。

  • Get-AzProviderOperation PowerShell コマンドレットを使用します。 次の例では、ストレージ アカウントのすべてのリスト操作が取得されます。

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • 次の Azure CLI コマンドを使って、リスト操作のみをフィルター処理します。

    az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
    

managementGroupResourceId

managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)

管理グループ レベルでデプロイされたリソースの一意の識別子を返します。

名前空間: az

managementGroupResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

識別子は、次の形式で返されます。

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

解説

この関数を使用すると、リソース グループではなく、管理グループにデプロイされているリソースのリソース ID を取得できます。 返される ID は、サブスクリプション ID とリソース グループ値が含まれていないという点で、resourceId 関数から返される値とは異なります。

managementGroupResourceID の例

次のテンプレートでは、ポリシー定義を作成し、割り当てます。 ここでは、managementGroupResourceId 関数を使用して、ポリシー定義のリソース ID を取得しています。

targetScope = 'managementGroup'

@description('Target Management Group')
param targetMG string

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2023-04-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: '___location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource location_lock 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: '___location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

pickZones

pickZones(providerNamespace, resourceType, ___location, [numberOfZones], [offset])

リソースの種類がリージョンのゾーンをサポートしているかどうかを判断します。 この関数ではゾーン リソースのみをサポートしています。 ゾーン冗長サービスでは空の配列を返します。 詳細については、「可用性ゾーンをサポートしている Azure サービス」をご覧ください。

名前空間: az

パラメーター

パラメーター 必須 タイプ 説明
プロバイダー名前空間 はい ひも ゾーンのサポートについて確認するためのリソースの種類のリソース プロバイダーの名前空間。
リソースタイプ はい ひも ゾーンのサポートについて確認するためのリソースの種類。
ロケーション はい ひも ゾーンのサポートについて確認するためのリージョン。
numberOfZones いいえ 整数 (integer) 返される論理ゾーンの数。 既定値は 1 です。 この数は、1 から 3 までの正の整数である必要があります。 単一ゾーンのリソースには 1 を使用します。 複数ゾーンのリソースの場合、サポートされているゾーンの数以下の値である必要があります。
オフセット いいえ 整数 (integer) 開始論理ゾーンからのオフセット。 オフセットと numberOfZones の合計が、サポートされているゾーンの数を超えた場合、関数はエラーを返します。

戻り値

サポートされているゾーンを含む配列。 offset および numberOfZones の既定値を使用する場合、ゾーンをサポートするリソースの種類とリージョンでは次の配列を返します。

[
  "1"
]

numberOfZones パラメーターが 3 に設定されている場合は、次を返します。

[
  "1",
  "2",
  "3"
]

リソースの種類またはリージョンがゾーンをサポートしていない場合は、空の配列が返されます。

[
]

解説

Azure Availability Zones には、ゾーンとゾーン冗長という異なるカテゴリがあります。 pickZones 関数を使用して、ゾーン リソースの可用性ゾーンを返します。 ゾーン冗長サービス (ZRS) の場合、関数では空の配列を返します。 ゾーン リソースには、通常、リソース定義のトップ レベルに zones プロパティがあります。 可用性ゾーンのサポートのカテゴリを確認するには、「可用性ゾーンをサポートするAzure サービスを参照してください。

特定の Azure リージョンまたは場所で可用性ゾーンがサポートされるかどうかを確認するには、ゾーン リソースの種類を指定して pickZones 関数を呼び出します (たとえば、Microsoft.Network/publicIPAddresses)。 応答が空でない場合、リージョンでは可用性ゾーンをサポートします。

pickZones の例

次の Bicep ファイルは、pickZones 関数を使用した場合の 3 つの結果を示しています。

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

前の例からの出力は、3 つの配列を返します。

名前 タイプ
サポート対象 配列 [ "1" ]
notSupportedRegion 配列 []
notSupportedType 配列 []

ゾーンに対して null を指定するか、別のゾーンに仮想マシンを割り当てるかを決定するために、pickZones からの応答を使用することができます。

プロバイダー

providers 関数は Bicep で非推奨になりました。 これの使用は推奨されていません。 この関数を使用してリソース プロバイダーの API バージョンを取得した場合は、Bicep ファイルで特定の API バージョンを指定することをお勧めします。 動的に返された API バージョンを使用すると、プロパティがバージョン間で変更された場合にテンプレートが破損する可能性があります。

providers 演算は、REST API から引き続き使用できます。 Bicep ファイルの外部で使用して、リソース プロバイダーに関する情報を取得できます。

名前空間: az

リファレンス

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

リソースのランタイム状態を表すオブジェクトを返します。 reference 関数の出力と動作は、各リソース プロバイダー (RP) で PUT および GET 応答を実装する方法に大きく依存します。

名前空間: az

Bicep ファイルでは reference 関数へのアクセスを提供しますが、通常は不要です。 代わりに、リソースのシンボリック名を使用することをお勧めします。 reference 関数は、リソースの properties オブジェクト内でのみ使用でき、name___location などの最上位のプロパティでは使用できません。 一般に、シンボリック名を使用する参照にも同じことが当てはまります。 ただし、name などのプロパティの場合は、reference 関数を利用せずにテンプレートを生成できます。 リソース名に関する十分な情報が、その名前を直接出力するために把握されています。 これは、コンパイル時のプロパティと呼ばれます。 Bicep 検証により、シンボリック名の不適切な使用がすべて特定できます。

次の例では、ストレージ アカウントをデプロイします。 最初の 2 つの出力では、同じ結果が得られます。

param storageAccountName string = uniqueString(resourceGroup().id)
param ___location string = resourceGroup().___location

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  ___location: ___location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.___location

テンプレートにデプロイされていない既存のリソースからプロパティを取得するには、existing キーワードを使用します。

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob

親リソース内に入れ子になっているリソースを参照するには、入れ子になったアクセサー (::) を使用します。 この構文は、親リソースの外部から入れ子になったリソースにアクセスする場合にのみ使用します。

vNet1::subnet1.properties.addressPrefix

存在しないリソースを参照しようとすると、NotFound エラーが発生し、デプロイは失敗します。

リソースID

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

リソースの一意の識別子を返します。

名前空間: az

resourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

リソース名があいまいであるか、同じ Bicep ファイル内でプロビジョニングされていないときに、この関数を使用します。 返される ID の形式は、デプロイがリソース グループ、サブスクリプション、管理グループ、またはテナントのスコープで行われるかどうかによって異なります。

次に例を示します。

param storageAccountName string
param ___location string = resourceGroup().___location

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  ___location: ___location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

Bicep ファイルにデプロイされていないリソースのリソース ID を取得するには、既存のキーワードを使用します。

param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageAccountName
}

output storageID string = storageAccount.id

詳細については、JSON テンプレート resourceId 関数に関する記事を参照してください。

subscriptionResourceId

subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)

サブスクリプション レベルでデプロイされたリソースの一意の識別子を返します。

名前空間: az

subscriptionResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

識別子は、次の形式で返されます。

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

解説

この関数を使用すると、リソース グループではなく、サブスクリプションにデプロイされているリソースのリソース ID を取得できます。 返される ID は、リソース グループ値が含まれていないという点で、resourceId 関数から返される値とは異なります。

subscriptionResourceID の例

次の Bicep ファイルでは、組み込みのロールが割り当てられます。 リソース グループまたはサブスクリプションにデプロイできます。 ここでは、subscriptionResourceId 関数を使用して、組み込みロールのリソース ID を取得しています。

@description('Principal Id')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var roleDefinitionId = {
  Owner: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
  }
  Contributor: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  Reader: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
  properties: {
    roleDefinitionId: roleDefinitionId[builtInRoleType].id
    principalId: principalId
  }
}

tenantResourceId

tenantResourceId(resourceType, resourceName1, [resourceName2], ...)

テナント レベルでデプロイされたリソースの一意の識別子を返します。

名前空間: az

tenantResourceId 関数は Bicep ファイルで使用できますが、通常は必要はありません。 代わりに、リソースのシンボリック名を使用して、id プロパティにアクセスします。

識別子は、次の形式で返されます。

/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

組み込みのポリシー定義は、テナント レベルのリソースです。 組み込みのポリシー定義を参照するポリシー割り当てをデプロイするには、tenantResourceId 関数を使用します。

@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'

@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-04-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

toLogicalZone

toLogicalZone(subscriptionId, ___location, physicalZone)

特定の Azure リージョンの指定したサブスクリプションの物理可用性ゾーンに対応する論理可用性ゾーン ( 123など) を返します。

名前空間: az

パラメーター

パラメーター 必須 タイプ 説明
サブスクリプションID はい ひも Azure サブスクリプションの ID (たとえば、 12345678-1234-1234-1234-1234567890ab)。
ロケーション はい ひも 可用性ゾーンをサポートする Azure リージョン (たとえば、 westus2)。
physicalZone はい ひも 物理可用性ゾーン識別子 (たとえば、 westus2-az1などのデータ センター固有の識別子)。

戻り値

指定したリージョンとサブスクリプションの指定された物理ゾーンに対応する論理可用性ゾーン ( 123など) を表す文字列。 物理ゾーンが無効であるか、サポートされていない場合は、空の文字列 ('') が返されます。

解説

  • toLogicalZone関数は、指定したリージョンのサブスクリプションのゾーン構成に基づいて論理ゾーン マッピングを取得します。
  • 論理ゾーンは、リソース構成で使用される標準化された識別子 ( 123など) であり、Azure サービス全体で一貫したゾーン割り当てを確保します。
  • 物理ゾーン識別子はリージョン固有であり、サブスクリプションによって異なる場合があります。 このマッピングを元に戻すには、 toPhysicalZone 関数を使用します。
  • この関数では、リージョンが可用性ゾーンをサポートしている必要があります。 サポートされているリージョンの一覧については、 可用性ゾーンをサポートする Azure サービスを参照してください。
  • 物理ゾーンが存在しないか、サブスクリプションにマップされていない場合、関数は空の文字列を返します。
  • この関数は、特にサブスクリプション間または複数リージョンのシナリオで、物理ゾーンのデプロイをテンプレートの論理ゾーン構成に合わせて調整する場合に役立ちます。

例示

次の例では、特定のサブスクリプションの米国西部 2 の物理ゾーンの論理ゾーンを取得します。

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZone string = 'westus2-az1'

output logicalZone string = toLogicalZone(subscriptionId, 'westus2', physicalZone)

予想される出力:

名前 タイプ
logicalZone 1

次の例では、 toLogicalZone を使用して、適切な論理ゾーンを使用して仮想マシンを構成します。

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZone string = 'westus2-az1'
param ___location string = 'westus2'

var logicalZone = toLogicalZone(subscriptionId, ___location, physicalZone)

resource vm 'Microsoft.Compute/virtualMachines@2024-03-01' = {
  name: 'myVM'
  ___location: ___location
  zones: logicalZone != '' ? [logicalZone] : []
  properties: {
    // VM properties
  }
}

output logicalZone string = logicalZone

予想される出力:

名前 タイプ
logicalZone 1

toLogicalZones

toLogicalZones(subscriptionId, ___location, physicalZones)

特定の Azure リージョンの指定したサブスクリプションの物理可用性ゾーンに対応する論理可用性ゾーン ( 123など) を返します。 1 つの物理ゾーンを変換するには、 toLogicalZone 関数を使用します。

名前空間: az

パラメーター

パラメーター 必須 タイプ 説明
サブスクリプションID はい ひも Azure サブスクリプションの ID (たとえば、 12345678-1234-1234-1234-1234567890ab)。
ロケーション はい ひも 可用性ゾーンをサポートする Azure リージョン (たとえば、 westus2)。
physicalZones はい 配列 論理ゾーンに変換する物理ゾーン名の配列 (たとえば、 westus2-az1westus2-az2、... などのデータ センター固有の識別子)。

戻り値

指定された物理ゾーンに対応する論理ゾーン名の配列 ( 123など)。 物理ゾーンが無効であるか、サポートされていない場合は、空の文字列 ('') が返されます。

解説

toLogicalZones関数は、物理ゾーン名を、指定された Azure サブスクリプションとリージョンに対応する論理ゾーンにマップします。 これは、Azure リージョン内の論理ゾーンに基づいてリソースを構成またはクエリする場合に役立ちます。 この関数には、有効なサブスクリプション ID、サポートされている Azure の場所、物理ゾーン名の配列が必要です。 物理ゾーンが無効であるか、指定された場所で使用できない場合、関数はコンテキストに応じて、そのゾーンの空の文字列を返すか、エラーをスローする可能性があります。

例示

次の例では、特定のサブスクリプションの米国西部 2 の物理ゾーンの一覧の論理ゾーンを取得します。

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZones array = ['westus2-az1', 'westus2-az2', 'westus2-az3']

output logicalZones array = toLogicalZones(subscriptionId, 'westus2', physicalZones)

予想される出力:

名前 タイプ
logicalZone 配列 ["1","2","3"]

toPhysicalZone

toPhysicalZone(subscriptionId, ___location, logicalZone)

特定の Azure リージョンの指定されたサブスクリプションの論理可用性ゾーンに対応する物理可用性ゾーン識別子 ( westus2-az1 などのデータ センター固有の識別子) を返します。

名前空間: az

パラメーター

パラメーター 必須 タイプ 説明
サブスクリプションID はい ひも Azure サブスクリプションの ID (たとえば、 12345678-1234-1234-1234-1234567890ab)。
ロケーション はい ひも 可用性ゾーンをサポートする Azure リージョン (たとえば、 westus2)。
logicalZone はい ひも 論理可用性ゾーン ( 123など)。

戻り値

特定のリージョンとサブスクリプションの指定された論理ゾーンに対応する物理可用性ゾーン識別子 ( westus2-az1 など) を表す文字列。 論理ゾーンが無効であるか、サポートされていない場合は、空の文字列 ('') が返されます。

解説

  • toPhysicalZone関数は、指定したリージョンのサブスクリプションのゾーン構成に基づいて物理ゾーン マッピングを取得します。
  • 物理ゾーンは、サブスクリプションによって異なる可能性があるデータ センター固有の識別子であり、論理ゾーン ( 123など) はリソース構成用に標準化されています。
  • toLogicalZone関数を使用してこのマッピングを反転し、物理ゾーンを論理的に等価に変換します。
  • この関数では、リージョンが可用性ゾーンをサポートしている必要があります。 サポートされているリージョンの一覧については、 可用性ゾーンをサポートする Azure サービスを参照してください。
  • 論理ゾーンが存在しないか、サブスクリプションにマップされていない場合、関数は空の文字列を返します。
  • この関数は、複数リージョンのデプロイでログ記録、監査、サブスクリプション間ゾーンの配置など、物理ゾーン識別子を必要とするシナリオに役立ちます。

例示

次の例では、特定のサブスクリプションの米国西部 2 の論理ゾーンの物理ゾーンを取得します。

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'

output physicalZone string = toPhysicalZone(subscriptionId, 'westus2', logicalZone)

予期される出力 (論理ゾーン 1westus2-az1にマップされていると仮定):

名前 タイプ
physicalZone westus2-az1

次の例では、 toPhysicalZone を使用して、仮想マシンのデプロイの物理ゾーンをログに記録します。

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'
param ___location string = 'westus2'

var physicalZone = toPhysicalZone(subscriptionId, ___location, logicalZone)

resource vm 'Microsoft.Compute/virtualMachines@2024-03-01' = {
  name: 'myVM'
  ___location: ___location
  zones: [logicalZone]
  properties: {
    // VM properties
  }
}

output physicalZone string = physicalZone

予想される出力:

名前 タイプ
physicalZone westus2-az1

toPhysicalZones

toPhysicalZones(subscriptionId, ___location, logicalZones)

特定の Azure リージョン内の指定したサブスクリプションの論理可用性ゾーンに対応する物理可用性ゾーン識別子 ( westus2-az1 などのデータ センター固有の識別子) を返します。 1 つの論理ゾーンを変換するには、 toPhysicalZone 関数を使用します。

名前空間: az

パラメーター

パラメーター 必須 タイプ 説明
サブスクリプションID はい ひも Azure サブスクリプションの ID (たとえば、 12345678-1234-1234-1234-1234567890ab)。
ロケーション はい ひも 可用性ゾーンをサポートする Azure リージョン (たとえば、 westus2)。
logicalZone はい string[] 物理ゾーンに変換する論理可用性ゾーン ( 123など)。

戻り値

指定された論理ゾーンに対応する物理ゾーン名 ( westus2-az1westus2-az2 など) の配列。 論理ゾーンが無効であるか、サポートされていない場合は、空の文字列 ('') が返されます。

解説

toPhysicalZones関数は、論理ゾーン名を、指定された Azure サブスクリプションとリージョンに対応する物理ゾーンにマップします。 これは、Azure リージョン内の特定の物理ゾーンにリソースをデプロイまたは構成する場合に役立ちます。 この関数には、有効なサブスクリプション ID、サポートされている Azure の場所、および論理ゾーン名の配列が必要です。 論理ゾーンが無効であるか、指定された場所で使用できない場合、関数はコンテキストに応じて、そのゾーンの空の文字列を返すか、エラーをスローすることがあります。

例示

次の例では、特定のサブスクリプションの米国西部 2 の論理ゾーンの一覧の物理ゾーンを取得します。

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZones array = ['1', '2', '3']

output physicalZones array = toPhysicalZones(subscriptionId, 'westus2', logicalZones)

予想される出力 (論理ゾーン 1westus2-az1にマップされ、論理ゾーン 1westus2-az1にマップされ、論理ゾーン 3westus2-az3にマップされていると仮定します)。

名前 タイプ
physicalZone 配列 ["westus2-az1","westus2-az2","westus2-az3"]

次のステップ

  • 現在のデプロイから値を取得するには、「Deployment value functions (デプロイ値関数)」を参照してください。
  • リソースの種類を作成するときに指定した回数反復処理を行う場合は Bicep での反復ループを参照してください。