Funkcje zasobów dla Bicep

W tym artykule opisano funkcje Bicep służące do pobierania wartości zasobów.

Aby uzyskać wartości z bieżącego wdrożenia, zobacz Funkcje wartości wdrożenia.

extensionResourceId

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

Zwraca identyfikator zasobu dla zasobu rozszerzenia. Zasób rozszerzenia to typ zasobu, który jest stosowany do innego zasobu w celu dodania do jego możliwości.

Przestrzeń nazw: az.

Funkcja extensionResourceId jest dostępna w plikach Bicep, ale zazwyczaj nie jest potrzebna. Zamiast tego użyj nazwy symbolicznej zasobu i uzyskaj dostęp do id właściwości .

Podstawowy format identyfikatora zasobu zwróconego przez tę funkcję to:

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

Segment zakresu zależy od rozszerzonego zasobu.

Po zastosowaniu zasobu rozszerzenia do zasobu identyfikator zasobu jest zwracany w następującym formacie:

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

Gdy zasób rozszerzenia jest stosowany do grupy zasobów, format to:

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

Po zastosowaniu zasobu rozszerzenia do subskrypcji format to:

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

Gdy zasób rozszerzenia jest stosowany do grupy zarządzania, format to:

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

Niestandardowa definicja zasad wdrożona w grupie zarządzania jest implementowana jako zasób rozszerzenia. Aby utworzyć i przypisać zasady, wdróż następujący plik Bicep w grupie zarządzania.

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@2021-06-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

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

Wbudowane definicje zasad to zasoby na poziomie dzierżawy. Aby zapoznać się z przykładem wdrażania wbudowanej definicji zasad, zobacz tenantResourceId.

getSecret

keyVaultName.getSecret(secretName)

Zwraca wpis tajny z usługi Azure Key Vault. Ta funkcja służy do przekazywania wpisu tajnego do bezpiecznego parametru ciągu modułu Bicep.

Uwaga

az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) Funkcji można używać w .bicepparam plikach do pobierania wpisów tajnych magazynu kluczy. Aby uzyskać więcej informacji, zobacz getSecret.

Funkcji można używać getSecret tylko z params sekcji modułu. Można go używać tylko z zasobem Microsoft.KeyVault/vaults .

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

Jeśli spróbujesz użyć tej funkcji w jakiejkolwiek innej części pliku Bicep, wystąpi błąd. Jeśli używasz tej funkcji z interpolacją ciągów, występuje również błąd, nawet w przypadku użycia w sekcji params.

Funkcji można używać tylko z parametrem modułu @secure() , który ma dekorator.

Magazyn kluczy musi mieć enabledForTemplateDeployment ustawioną wartość true. Użytkownik wdrażający plik Bicep musi mieć dostęp do wpisu tajnego. Aby uzyskać więcej informacji, zobacz Use Azure Key Vault to pass secure parameter value during Bicep deployment (Używanie usługi Azure Key Vault do przekazywania wartości bezpiecznego parametru podczas wdrażania Bicep).

Kwalifikator przestrzeni nazw nie jest wymagany, ponieważ funkcja jest używana z typem zasobu.

Parametry

Parametr Wymagania Type Opis
secretName Tak string Nazwa wpisu tajnego przechowywanego w magazynie kluczy.

Wartość zwracana

Wartość wpisu tajnego dla nazwy wpisu tajnego.

Przykład

Poniższy plik Bicep jest używany jako moduł. Ma adminPassword on parametr zdefiniowany za pomocą dekoratora @secure() .

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

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

Poniższy plik Bicep używa poprzedniego pliku Bicep jako modułu. Plik Bicep odwołuje się do istniejącego magazynu kluczy i wywołuje getSecret funkcję w celu pobrania wpisu tajnego magazynu kluczy, a następnie przekazuje wartość jako parametr do modułu.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

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

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

Listy*

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

Funkcję listy dla dowolnego typu zasobu można wywołać za pomocą operacji rozpoczynającej się od list. Niektóre typowe zastosowania to list, , listKeyslistKeyValuei listSecrets.

Składnia tej funkcji różni się w zależności od nazwy operacji listy. Zwrócone wartości różnią się również w zależności od operacji. Bicep nie obsługuje obecnie uzupełniania i walidacji funkcji list* .

Interfejs wiersza polecenia Bicep w wersji 0.4.X lub nowszej wywołuje funkcję listy przy użyciu operatora dostępu. Na przykład storageAccount.listKeys().

Kwalifikator przestrzeni nazw nie jest wymagany, ponieważ funkcja jest używana z typem zasobu.

Parametry

Parametr Wymagania Type Opis
apiVersion Nie. string Jeśli nie podasz tego parametru, używana jest wersja interfejsu API dla zasobu. Podaj niestandardową wersję interfejsu API tylko wtedy, gdy potrzebna jest funkcja do uruchomienia z określoną wersją. Użyj formatu rrrr-mm-dd.
functionValues Nie. obiekt Obiekt, który ma wartości dla funkcji. Udostępniaj ten obiekt tylko dla funkcji, które obsługują odbieranie obiektu z wartościami parametrów, takimi jak listAccountSas na koncie magazynu. Przykład przekazywania wartości funkcji jest pokazany w tym artykule.

Prawidłowe zastosowania

Funkcje list mogą być używane we właściwościach definicji zasobu. Nie używaj list funkcji, która uwidacznia poufne informacje w sekcji danych wyjściowych pliku Bicep. Wartości wyjściowe są przechowywane w historii wdrożenia i mogą być pobierane przez złośliwego użytkownika.

W przypadku użycia z pętlą iteracyjną można użyć list funkcji , input ponieważ wyrażenie jest przypisane do właściwości zasobu. Nie można ich używać, count ponieważ przed rozwiązaniem list funkcji należy określić liczbę.

Jeśli używasz list funkcji w zasobie, który jest wdrażany warunkowo, funkcja jest oceniana nawet wtedy, gdy zasób nie został wdrożony. Jeśli funkcja odwołuje się do zasobu, który nie istnieje, występuje błąd list . Użyj operatora wyrażenia warunkowego ?: aby upewnić się, że funkcja jest oceniana tylko podczas wdrażania zasobu.

Wartość zwracana

Zwrócony obiekt różni się w zależności od używanej funkcji listy. Na przykład dla listKeys konta magazynu zwraca następujący format:

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

Inne list funkcje mają różne formaty zwracane. Aby wyświetlić format funkcji, uwzględnij ją w sekcji danych wyjściowych, jak pokazano w przykładowym pliku Bicep.

Przykład listy

Poniższy przykład wdraża konto magazynu, a następnie wywołuje listKeys to konto magazynu. Klucz jest używany podczas ustawiania wartości dla skryptów wdrażania.

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

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

W następnym przykładzie pokazano list funkcję, która przyjmuje parametr. W tym przypadku funkcja to listAccountSas. Przekaż obiekt przez czas wygaśnięcia. Czas wygaśnięcia musi być w przyszłości.

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

Implementacje

Możliwe zastosowania programu list* przedstawiono w poniższej tabeli.

Typ zasobu Nazwa funkcji
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/openid Połączenie Providers listSecrets
Microsoft.ApiManagement/service/subscriptions listSecrets
Microsoft.AppConfiguration/configurationStores ListKeys
Microsoft.AppPlatform/Spring listTestKeys
Microsoft.Automation/automationAccounts listKeys
Microsoft.Batch/batchAccounts listkeys
Microsoft.BatchAI/workspaces/experiments/jobs listoutputfiles
Microsoft.BotService/botServices/channels listChannelWithKeys
Microsoft.Cache/redis listKeys
Microsoft.CognitiveServices/accounts listKeys
Microsoft.ContainerRegistry/rejestry listCredentials
Microsoft.ContainerRegistry/rejestry 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/rejestry/zadania listDetails
Microsoft.ContainerService/managedClusters listCluster Administracja Credential
Microsoft.ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft.ContainerService/managedClusters listClusterUserCredential
Microsoft.ContainerService/managedClusters/accessProfiles listCredential
Microsoft.DataBox/jobs listCredentials
Microsoft.DataFactory/datafactories/gateways listauthkeys
Microsoft.DataFactory/factory/integrationruntimes listauthkeys
Microsoft.DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft.DataShare/accounts/shares listSynchronizations
Microsoft.DataShare/accounts/shareSubscriptions listSourceShareSynchronization Ustawienia
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 list Połączenie ionInfo
Microsoft.DomainRegistration listDomain Rekomendacje
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/przestrzenie nazw/authorizationRules listkeys
Microsoft.EventHub/przestrzenie nazw/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.EventHub/namespaces/eventhubs/authorizationRules listkeys
Microsoft.ImportExport/jobs listBitLockerKeys
Microsoft.Kusto/Clusters/Databases ListPrincipals
Microsoft.LabServices/labs/users lista
Microsoft.LabServices/labs/virtualMachines lista
Microsoft.Logic/integrationAccounts/agreement 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.Machine Edukacja/webServices listkeys
Microsoft.Machine Edukacja/Workspaces listworkspacekeys
Microsoft.Machine Edukacja Services/workspaces/computes listKeys
Microsoft.Machine Edukacja Services/workspaces/computes listNodes
Microsoft.Machine Edukacja Services/workspaces listKeys
Microsoft. Mapy/konta 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/Przestrzenie nazw/authorizationRules listkeys
Microsoft.NotificationHubs/Przestrzenie nazw/NotificationHubs/authorizationRules listkeys
Microsoft.Operational Szczegółowe informacje/workspaces lista
Microsoft.Operational Szczegółowe informacje/workspaces listKeys
Microsoft.Policy Szczegółowe informacje/korygowania listDeployments
Microsoft.RedHatOpenShift/openShiftClusters listCredentials
Microsoft.Relay/przestrzenie nazw/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft.Search/searchServices list Administracja Keys
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/menedżerowie listActivationKey
Microsoft.StorSimple/menedżerowie listPublicEncryptionKey
Microsoft.Synapse/workspaces/integrationRuntimes listAuthKeys
Microsoft.Web/connectionGateways ListStatus
microsoft.web/connections listconsentlinks
Microsoft.Web/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listsecrets
microsoft.web/sites/backups lista
Microsoft.Web/sites/config lista
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 lista
Microsoft.Web/sites/slots/config lista
microsoft.web/sites/slots/functions listsecrets

Aby określić, które typy zasobów mają operację listy, dostępne są następujące opcje:

  • Wyświetl operacje interfejsu API REST dla dostawcy zasobów i poszukaj operacji listy. Na przykład konta magazynu mają operację listKeys.

  • Użyj polecenia cmdlet Get-AzProviderOperation programu PowerShell. Poniższy przykład pobiera wszystkie operacje listy dla kont magazynu:

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Użyj następującego polecenia interfejsu wiersza polecenia platformy Azure, aby filtrować tylko operacje listy:

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

pickZones

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

Określa, czy typ zasobu obsługuje strefy dla regionu. Ta funkcja obsługuje tylko zasoby strefowe. Usługi strefowo nadmiarowe zwracają pustą tablicę. Aby uzyskać więcej informacji, zobacz Usługi platformy Azure, które obsługują Strefy dostępności.

Przestrzeń nazw: az.

Parametry

Parametr Wymagania Type Opis
providerNamespace Tak string Przestrzeń nazw dostawcy zasobów dla typu zasobu, aby sprawdzić obsługę strefy.
resourceType Tak string Typ zasobu do sprawdzania obsługi strefy.
lokalizacja Tak string Region, w którym ma być sprawdzana obsługa stref.
numberOfZones Nie. integer Liczba stref logicznych do zwrócenia. Wartość domyślna to 1. Liczba musi być dodatnią liczbą całkowitą z zakresu od 1 do 3. Użyj 1 dla zasobów z jedną strefą. W przypadku zasobów wielostrefowych wartość musi być mniejsza lub równa liczbie obsługiwanych stref.
offset Nie. integer Przesunięcie z początkowej strefy logicznej. Funkcja zwraca błąd, jeśli przesunięcie plus numberOfZones przekracza liczbę obsługiwanych stref.

Wartość zwracana

Tablica z obsługiwanymi strefami. W przypadku używania wartości domyślnych dla przesunięcia i numberOfZones, typ zasobu i region, który obsługuje strefy, zwraca następującą tablicę:

[
    "1"
]

numberOfZones Gdy parametr jest ustawiony na wartość 3, zwraca:

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

Gdy typ zasobu lub region nie obsługuje stref, zwracana jest pusta tablica.

[
]

Uwagi

Istnieją różne kategorie dla usługi Azure Strefy dostępności — strefowe i strefowo nadmiarowe. Funkcja pickZones może służyć do zwracania strefy dostępności dla zasobu strefowego. W przypadku strefowo nadmiarowych usług (ZRS) funkcja zwraca pustą tablicę. Zasoby strefowe zwykle mają zones właściwość na najwyższym poziomie definicji zasobu. Aby określić kategorię obsługi stref dostępności, zobacz Usługi platformy Azure, które obsługują Strefy dostępności.

Aby określić, czy dany region lub lokalizacja platformy Azure obsługuje strefy dostępności, wywołaj pickZones funkcję z typem zasobu strefowego, takim jak Microsoft.Network/publicIPAddresses. Jeśli odpowiedź nie jest pusta, region obsługuje strefy dostępności.

przykład pickZones

Poniższy plik Bicep przedstawia trzy wyniki użycia pickZones funkcji.

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

Dane wyjściowe z powyższych przykładów zwracają trzy tablice.

Nazwisko Typ Wartość
Obsługiwane tablica [ "1" ]
notSupportedRegion tablica []
notSupportedType tablica []

Możesz użyć odpowiedzi z pickZones , aby określić, czy zapewnić wartość null dla stref, czy przypisać maszyny wirtualne do różnych stref.

dostawców

Funkcja providers została uznana za przestarzałą w Bicep. Nie zalecamy już korzystania z niego. Jeśli ta funkcja jest używana do pobrania wersji interfejsu API dla dostawcy zasobów, zalecamy podanie określonej wersji interfejsu API w pliku Bicep. Użycie dynamicznie zwracanej wersji interfejsu API może spowodować przerwanie szablonu, jeśli właściwości zmienią się między wersjami.

Operacja dostawców jest nadal dostępna za pośrednictwem interfejsu API REST. Można go użyć poza plikiem Bicep, aby uzyskać informacje o dostawcy zasobów.

Przestrzeń nazw: az.

reference

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

Zwraca obiekt reprezentujący stan środowiska uruchomieniowego zasobu. Dane wyjściowe i zachowanie reference funkcji bardzo zależy od tego, jak każdy dostawca zasobów implementuje odpowiedzi PUT i GET.

Przestrzeń nazw: az.

Pliki Bicep zapewniają dostęp do funkcji referencyjnej, chociaż zwykle jest to niepotrzebne. Zamiast tego zaleca się użycie symbolicznej nazwy zasobu. Funkcji referencyjnej można używać tylko w properties obiekcie zasobu i nie można jej użyć dla właściwości najwyższego poziomu, takich jak name lub location. To samo dotyczy odwołań przy użyciu nazwy symbolicznej. Jednak w przypadku właściwości, takich jak name, można wygenerować szablon bez użycia funkcji referencyjnej. Wystarczające informacje o nazwie zasobu są znane bezpośrednio z emitowania nazwy. Jest on określany jako właściwości czasu kompilacji. Walidacja Bicep może identyfikować nieprawidłowe użycie nazwy symbolicznej.

Poniższy przykład umożliwia wdrożenie konta magazynu. Pierwsze dwa dane wyjściowe dają te same wyniki.

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

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-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

Aby uzyskać właściwość z istniejącego zasobu, który nie został wdrożony w szablonie, użyj słowa kluczowego existing :

param storageAccountName string

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

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

Aby odwołać się do zasobu zagnieżdżonego wewnątrz zasobu nadrzędnego, użyj zagnieżdżonego dostępu (::). Ta składnia jest używana tylko wtedy, gdy uzyskujesz dostęp do zasobu zagnieżdżonego spoza zasobu nadrzędnego.

vNet1::subnet1.properties.addressPrefix

Jeśli spróbujesz odwołać się do zasobu, który nie istnieje, zostanie wyświetlony NotFound błąd i wdrożenie zakończy się niepowodzeniem.

resourceId

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

Zwraca unikatowy identyfikator zasobu.

Przestrzeń nazw: az.

Funkcja resourceId jest dostępna w plikach Bicep, ale zazwyczaj nie jest potrzebna. Zamiast tego użyj nazwy symbolicznej zasobu i uzyskaj dostęp do id właściwości .

Ta funkcja jest używana, gdy nazwa zasobu jest niejednoznaczna lub nie jest aprowizowana w tym samym pliku Bicep. Format zwróconego identyfikatora różni się w zależności od tego, czy wdrożenie odbywa się w zakresie grupy zasobów, subskrypcji, grupy zarządzania lub dzierżawy.

Na przykład:

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

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

Aby uzyskać identyfikator zasobu dla zasobu, który nie został wdrożony w pliku Bicep, użyj istniejącego słowa kluczowego.

param storageAccountName string

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

output storageID string = storageAccount.id

Aby uzyskać więcej informacji, zobacz funkcję resourceId szablonu JSON.

subscriptionResourceId

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

Zwraca unikatowy identyfikator zasobu wdrożonego na poziomie subskrypcji.

Przestrzeń nazw: az.

Funkcja subscriptionResourceId jest dostępna w plikach Bicep, ale zazwyczaj nie jest potrzebna. Zamiast tego użyj nazwy symbolicznej zasobu i uzyskaj dostęp do id właściwości .

Identyfikator jest zwracany w następującym formacie:

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

Uwagi

Ta funkcja służy do pobierania identyfikatora zasobu dla zasobów wdrożonych w subskrypcji , a nie grupy zasobów. Zwrócony identyfikator różni się od wartości zwracanej przez funkcję resourceId , nie uwzględniając wartości grupy zasobów.

przykład subscriptionResourceID

Poniższy plik Bicep przypisuje wbudowaną rolę. Można go wdrożyć w grupie zasobów lub subskrypcji. Używa subscriptionResourceId funkcji , aby uzyskać identyfikator zasobu dla ról wbudowanych.

@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
  }
}

managementGroupResourceId

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

Zwraca unikatowy identyfikator zasobu wdrożonego na poziomie grupy zarządzania.

Przestrzeń nazw: az.

Funkcja managementGroupResourceId jest dostępna w plikach Bicep, ale zazwyczaj nie jest potrzebna. Zamiast tego użyj nazwy symbolicznej zasobu i uzyskaj dostęp do id właściwości .

Identyfikator jest zwracany w następującym formacie:

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

Uwagi

Ta funkcja służy do pobierania identyfikatora zasobu dla zasobów wdrożonych w grupie zarządzania, a nie grupy zasobów. Zwrócony identyfikator różni się od wartości zwracanej przez funkcję resourceId , nie uwzględniając identyfikatora subskrypcji i wartości grupy zasobów.

przykład managementGroupResourceID

Poniższy szablon tworzy i przypisuje definicję zasad. Używa managementGroupResourceId funkcji , aby uzyskać identyfikator zasobu dla definicji zasad.

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@2021-06-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@2021-06-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

tenantResourceId

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

Zwraca unikatowy identyfikator zasobu wdrożonego na poziomie dzierżawy.

Przestrzeń nazw: az.

Funkcja tenantResourceId jest dostępna w plikach Bicep, ale zazwyczaj nie jest potrzebna. Zamiast tego użyj nazwy symbolicznej zasobu i uzyskaj dostęp do id właściwości .

Identyfikator jest zwracany w następującym formacie:

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

Wbudowane definicje zasad to zasoby na poziomie dzierżawy. Aby wdrożyć przypisanie zasad odwołujące się do wbudowanej tenantResourceId definicji zasad, użyj funkcji .

@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@2022-06-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

Następne kroki

  • Aby uzyskać wartości z bieżącego wdrożenia, zobacz Funkcje wartości wdrożenia.
  • Aby iterować określoną liczbę razy podczas tworzenia typu zasobu, zobacz Iteracyjne pętle w Bicep.