この記事では、リソースの値を取得するための 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()
デコレーターを持つモジュール パラメーターでのみ使用できます。
キー コンテナーでは、enabledForTemplateDeployment
を true
に設定する必要があります。 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 関数を呼び出すことができます。 一般的に使用されるものとして、list
、listKeys
、listKeyValue
、listSecrets
があります。
この関数の構文は、リスト操作の名前によって異なります。 戻り値も操作によって異なります。 Bicep は現在、list*
関数の完了と検証をサポートしていません。
Bicep CLI バージョン 0.4.X 以上では、アクセサー演算子を使用して list 関数を呼び出します。 たとえば、storageAccount.listKeys()
のようにします。
この関数はリソースの種類と共に使用されるため、namespace 修飾子は必要ありません。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
apiVersion (英語) | いいえ | ひも | このパラメーターを指定しない場合は、リソースの API バージョンが使用されます。 特定のバージョンで関数を実行する必要がある場合にのみ、カスタム API バージョンを指定します。 yyyy-mm-dd の形式を使用します。 |
functionValues | いいえ | オブジェクト | 関数の値を持つオブジェクト。 このオブジェクトは、ストレージ アカウントの listAccountSas など、パラメーター値を持つオブジェクトの受信をサポートする関数に対してのみ指定します。 関数値を渡す例をこの記事で紹介します。 |
有効な使用方法
list
関数は、リソース定義のプロパティで使用できます。 Bicep ファイルの outputs セクションでは、機密情報を公開する list
関数を使用しないでください。 出力値はデプロイ履歴に格納されるため、悪意のあるユーザーによって取得される可能性があります。
反復ループと一緒に使用する場合は、list
の input
関数を使用できます。これは、式がリソース プロパティに割り当てられるためです。 これらを 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 リージョンの指定したサブスクリプションの物理可用性ゾーンに対応する論理可用性ゾーン ( 1
、 2
、 3
など) を返します。
名前空間: az
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
サブスクリプションID | はい | ひも | Azure サブスクリプションの ID (たとえば、 12345678-1234-1234-1234-1234567890ab )。 |
ロケーション | はい | ひも | 可用性ゾーンをサポートする Azure リージョン (たとえば、 westus2 )。 |
physicalZone | はい | ひも | 物理可用性ゾーン識別子 (たとえば、 westus2-az1 などのデータ センター固有の識別子)。 |
戻り値
指定したリージョンとサブスクリプションの指定された物理ゾーンに対応する論理可用性ゾーン ( 1
、 2
、 3
など) を表す文字列。 物理ゾーンが無効であるか、サポートされていない場合は、空の文字列 (''
) が返されます。
解説
-
toLogicalZone
関数は、指定したリージョンのサブスクリプションのゾーン構成に基づいて論理ゾーン マッピングを取得します。 - 論理ゾーンは、リソース構成で使用される標準化された識別子 (
1
、2
、3
など) であり、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 リージョンの指定したサブスクリプションの物理可用性ゾーンに対応する論理可用性ゾーン ( 1
、 2
、 3
など) を返します。 1 つの物理ゾーンを変換するには、 toLogicalZone
関数を使用します。
名前空間: az
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
サブスクリプションID | はい | ひも | Azure サブスクリプションの ID (たとえば、 12345678-1234-1234-1234-1234567890ab )。 |
ロケーション | はい | ひも | 可用性ゾーンをサポートする Azure リージョン (たとえば、 westus2 )。 |
physicalZones | はい | 配列 | 論理ゾーンに変換する物理ゾーン名の配列 (たとえば、 westus2-az1 、 westus2-az2 、... などのデータ センター固有の識別子)。 |
戻り値
指定された物理ゾーンに対応する論理ゾーン名の配列 ( 1
、 2
、 3
など)。 物理ゾーンが無効であるか、サポートされていない場合は、空の文字列 (''
) が返されます。
解説
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 | はい | ひも | 論理可用性ゾーン ( 1 、 2 、 3 など)。 |
戻り値
特定のリージョンとサブスクリプションの指定された論理ゾーンに対応する物理可用性ゾーン識別子 ( westus2-az1
など) を表す文字列。 論理ゾーンが無効であるか、サポートされていない場合は、空の文字列 (''
) が返されます。
解説
-
toPhysicalZone
関数は、指定したリージョンのサブスクリプションのゾーン構成に基づいて物理ゾーン マッピングを取得します。 - 物理ゾーンは、サブスクリプションによって異なる可能性があるデータ センター固有の識別子であり、論理ゾーン (
1
、2
、3
など) はリソース構成用に標準化されています。 -
toLogicalZone
関数を使用してこのマッピングを反転し、物理ゾーンを論理的に等価に変換します。 - この関数では、リージョンが可用性ゾーンをサポートしている必要があります。 サポートされているリージョンの一覧については、 可用性ゾーンをサポートする Azure サービスを参照してください。
- 論理ゾーンが存在しないか、サブスクリプションにマップされていない場合、関数は空の文字列を返します。
- この関数は、複数リージョンのデプロイでログ記録、監査、サブスクリプション間ゾーンの配置など、物理ゾーン識別子を必要とするシナリオに役立ちます。
例示
次の例では、特定のサブスクリプションの米国西部 2 の論理ゾーンの物理ゾーンを取得します。
param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'
output physicalZone string = toPhysicalZone(subscriptionId, 'westus2', logicalZone)
予期される出力 (論理ゾーン 1
が westus2-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[] | 物理ゾーンに変換する論理可用性ゾーン ( 1 、 2 、 3 など)。 |
戻り値
指定された論理ゾーンに対応する物理ゾーン名 ( westus2-az1
、 westus2-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)
予想される出力 (論理ゾーン 1
が westus2-az1
にマップされ、論理ゾーン 1
が westus2-az1
にマップされ、論理ゾーン 3
が westus2-az3
にマップされていると仮定します)。
名前 | タイプ | 値 |
---|---|---|
physicalZone | 配列 | ["westus2-az1","westus2-az2","westus2-az3"] |
次のステップ
- 現在のデプロイから値を取得するには、「Deployment value functions (デプロイ値関数)」を参照してください。
- リソースの種類を作成するときに指定した回数反復処理を行う場合は Bicep での反復ループを参照してください。