다음을 통해 공유


Bicep의 리소스 함수

이 문서에서는 리소스 값을 가져오는 Bicep 함수에 대해 설명합니다.

현재 배포에서 값을 가져오려면 배포 값 함수를 참조하세요.

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을 참조하세요.

모듈의 params 섹션 내에서만 getSecret 함수를 사용할 수 있습니다. Microsoft.KeyVault/vaults 리소스에서만 사용할 수 있습니다.

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

Bicep 파일의 다른 부분에서 이 함수를 사용하려고 하면 오류가 발생합니다. 매개 변수 섹션에서 사용되는 경우에도 문자열 보간과 함께 이 함수를 사용하는 경우에도 오류가 발생합니다.

함수는 @secure() 데코레이터가 있는 모듈 매개 변수에서만 사용될 수 있습니다.

Key Vault에는 true로 설정된 enabledForTemplateDeployment가 있어야 합니다. Bicep 파일을 배포하는 사용자가 비밀에 액세스할 수 있어야 합니다. 자세한 내용은 Azure Key Vault를 사용하여 Bicep 배포 중에 보안 매개 변수 값 전달을 참조하세요.

함수가 리소스 종류와 함께 사용되기 때문에 네임스페이스 한정자가 필요하지 않습니다.

매개 변수

매개 변수 필수 Type 설명
secretName string 키 자격 증명 모음에 저장된 비밀의 이름입니다.

반환 값

비밀 이름의 비밀 값입니다.

예시

다음 Bicep 파일은 모듈로 사용됩니다. @secure() 데코레이터로 정의된 adminPassword 매개 변수가 있습니다.

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')
  }
}

list*

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

list로 시작하는 작업을 통해 모든 리소스 종류에 대한 목록 함수를 호출할 수 있습니다. 일반적으로 사용되는 일부 함수는 list, listKeys, listKeyValuelistSecrets입니다.

이 함수의 구문은 목록 작업의 이름에 따라 다릅니다. 또한 반환된 값은 연산에 따라 달라집니다. Bicep은 현재 list* 함수 완성 및 유효성 검사를 지원하지 않습니다.

Bicep CLI 버전 0.4.X 이상에서는 접근자 연산자를 사용하여 목록 함수를 호출합니다. 예: storageAccount.listKeys().

함수가 리소스 종류와 함께 사용되기 때문에 네임스페이스 한정자가 필요하지 않습니다.

매개 변수

매개 변수 필수 Type 설명
apiVersion 아니요 string 이 매개 변수를 제공하지 않으면 리소스에 대한 API 버전이 사용됩니다. 함수를 특정 버전으로 실행해야 하는 경우에만 사용자 지정 API 버전을 제공합니다. yyyy-mm-dd 형식을 사용합니다.
functionValues 아니요 개체 함수에 대한 값이 있는 개체입니다. 스토리지 계정에서 listAccountSas와 같이 매개 변수 값이 있는 개체 수신을 지원하는 함수에 대해서만 이 개체를 제공합니다. 함수 값을 전달하는 예제가 이 문서에 나와 있습니다.

올바른 용도

list 함수는 리소스 정의의 속성에서 사용할 수 있습니다. Bicep 파일의 출력 섹션에서 중요한 정보를 노출하는 list 함수를 사용하지 마세요. 출력 값은 배포 기록에 저장되며 악의적인 사용자가 이를 검색할 수 있습니다.

반복 루프와 함께 사용하면 표현식이 리소스 속성에 할당되기 때문에 input에 대해 list 함수를 사용할 수 있습니다. list 함수를 확인하기 전에 개수를 결정해야 하므로 count와 함께 사용할 수 없습니다.

조건부로 배포된 리소스에서 list 함수를 사용하는 경우 리소스가 배포되지 않은 경우에도 함수가 평가됩니다. list 함수가 존재하지 않는 리소스를 참조하면 오류가 발생합니다. 조건식 ?: 연산자를 사용하여 리소스가 배포될 때만 함수가 평가되도록 합니다.

반환 값

반환된 개체는 사용하는 list 함수에 따라 다릅니다. 예를 들어 스토리지 계정의 listKeys는 다음 형식을 반환합니다.

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

다른 list 함수는 반환 형식이 다릅니다. 함수의 형식을 보려면 예제 Bicep 파일에 표시된 것처럼 출력 섹션에 포함합니다.

목록 예제

다음 예에서는 스토리지 계정을 배포한 다음 해당 스토리지 계정에서 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/batchAccounts 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/jobs 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.DomainRegistration listDomainRecommendations
Microsoft.DomainRegistration/topLevelDomains listAgreements
Microsoft.EventGrid/domains listKeys
Microsoft.EventGrid/topics listKeys
Microsoft.EventHub/namespaces/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/workspaces/computes listKeys
Microsoft.MachineLearningServices/workspaces/computes listNodes
Microsoft.MachineLearningServices/workspaces listKeys
Microsoft.Maps/accounts 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
Microsoft.Web/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listsecrets
microsoft.web/sites/backups 목록
Microsoft.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 목록
Microsoft.Web/sites/slots/config 목록
microsoft.web/sites/slots/functions listsecrets

list 작업이 있는 리소스 유형을 확인할 수 있게 다음 PowerShell 옵션이 제공됩니다.

  • 리소스 공급자에 대한 REST API 작업을 보고 list 작업을 찾습니다. 예를 들어 스토리지 계정에는 listKeys 작업이 있습니다.

  • Get-AzProviderOperation PowerShell cmdlet을 사용합니다. 다음 예제에서는 스토리지 계정에 대한 모든 list 작업을 가져옵니다.

    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.

매개 변수

매개 변수 필수 Type 설명
providerNamespace string 영역 지원을 확인할 리소스 종류에 대한 리소스 공급자 네임스페이스입니다.
resourceType string 영역 지원을 확인할 리소스 종류입니다.
location string 영역 지원을 확인할 지역입니다.
numberOfZones 아니요 정수 반환할 논리적 영역의 수입니다. 기본값은 1입니다. 숫자는 1~3 사이의 양수여야 합니다. 단일 영역 리소스에 대해 1을 사용합니다. 다중 영역 리소스의 경우 값은 지원되는 영역 수보다 적거나 같아야 합니다.
offset 아니요 정수 시작 논리적 영역의 오프셋입니다. offset과 numberOfZones의 합이 지원되는 영역의 수를 초과하는 경우 함수에서 오류를 반환합니다.

반환 값

지원되는 영역이 있는 배열입니다. offset 및 numberOfZones에 대한 기본값을 사용할 때 영역을 지원하는 리소스 종류 및 지역은 다음 배열을 반환합니다.

[
    "1"
]

numberOfZones 매개 변수가 3으로 설정된 경우 다음을 반환합니다.

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

리소스 유형 또는 지역이 영역을 지원하지 않는 경우 빈 배열이 반환됩니다.

[
]

설명

Azure 가용성 영역의 범주에는 영역 및 영역 중복이 있습니다. pickZones 함수를 사용하여 영역 리소스에 대한 가용성 영역을 반환할 수 있습니다. ZRS(영역 중복 서비스)의 경우 함수는 빈 배열을 반환합니다. 영역 리소스에는 일반적으로 리소스 정의의 최상위 수준에 zones 속성이 있습니다. 가용성 영역에 대한 지원 범주를 확인하려면 가용성 영역을 지원하는 Azure 서비스를 참조 하세요.

지정된 Azure 지역 또는 위치가 가용성 영역을 지원하는지 확인하려면 Microsoft.Network/publicIPAddresses와 같은 영역 리소스 종류로 pickZones 함수를 호출합니다. 응답이 비어 있지 않은 경우 해당 지역은 가용성 영역을 지원합니다.

pickZones 예제

다음 Bicep 파일은 pickZones 함수를 사용한 세 가지 결과를 보여 줍니다.

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 배열 []

pickZones의 응답을 사용하여 영역에 null을 제공할지 아니면 가상 머신을 다른 영역에 할당할지 결정할 수 있습니다.

providers

공급자 함수는 Bicep에서 더 이상 사용되지 않습니다. 더는 사용하지 않는 것이 좋습니다. 리소스 공급자의 API 버전을 가져오기 위해 이 함수를 사용한 경우 Bicep 파일에 특정 API 버전을 제공하는 것이 좋습니다. 버전 간에 속성이 변경된 경우 동적으로 반환된 API 버전을 사용하면 템플릿이 손상될 수 있습니다.

공급자 작업은 REST API를 통해 계속 사용할 수 있습니다. Bicep 파일 외부에서 리소스 공급자에 대한 정보를 가져오는 데 사용할 수 있습니다.

네임스페이스: az.

reference

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

리소스의 런타임 상태를 나타내는 개체를 반환합니다. reference 함수의 출력 및 동작은 각 RP(리소스 공급자)가 PUT 및 GET 응답을 구현하는 방법에 크게 의존합니다.

네임스페이스: az.

Bicep 파일은 일반적으로 불필요하지만 참조 함수에 대한 액세스를 제공합니다. 대신 리소스의 기호 이름을 사용하는 것이 좋습니다. 참조 함수는 리소스의 properties 개체 내에서만 사용할 수 있으며 name 또는 location같은 최상위 속성에는 사용할 수 없습니다. 일반적으로 기호 이름을 사용하는 참조에도 동일하게 적용됩니다. 그러나 name 같은 속성의 경우 참조 함수를 사용하지 않고 템플릿을 생성할 수 있습니다. 리소스 이름에 대한 충분한 정보가 있으면 이름을 직접 내보낼 수 있습니다. 컴파일 시간 속성이라고 합니다. Bicep 유효성 검사는 기호 이름의 잘못된 사용을 식별할 수 있습니다.

다음 예제에서는 저장소 계정을 배포합니다. 처음 두 개의 출력은 동일한 결과를 제공합니다.

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 오류가 발생하고 배포에 실패합니다.

resourceId

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

리소스의 고유 식별자를 반환합니다.

네임스페이스: az.

resourceId 함수는 Bicep 파일에서 사용할 수 있지만 일반적으로 필요하지 않습니다. 대신 리소스에 대한 기호 이름을 사용하고 id 속성에 액세스합니다.

리소스 이름이 모호하거나 동일한 Bicep 파일 내에서 프로비전되지 않은 경우 이 함수를 사용합니다. 반환된 식별자의 형식은 리소스 그룹, 구독, 관리 그룹 또는 테넌트 중에서 테넌트가 어떤 범위에서 발생하는지에 따라 달라집니다.

예시:

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

다음 단계

  • 현재 배포에서 값을 가져오려면 배포 값 함수를 참조하세요.
  • 리소스 종류를 만들 때 지정된 횟수만큼 반복하려면 Bicep의 반복 루프를 참조하세요.