#azure-rm #azure-bicep
Вопрос:
Как ссылаться на имя родительского ресурса для ресурса внутри модуля с помощью кода Microsoft bicep.
Ниже приведен код файла main.bicep, который работает.
# main.bicep
param apimName string = 'devApim'
param apimLocation string = 'eastus'
param publisherName string = 'danny'
param publisherEmail string = 'danny@gmail.com'
param api_display_name string = 'Test Consumer API'
param api_description = 'Test API description'
param api_versioningScheme = 'Segment'
resource devApim_resource 'Microsoft.ApiManagement/service@2021-01-01-preview' = {
name: apimName
location: apimLocation
sku: {
name: 'Developer'
capacity: 1
}
properties: {
publisherEmail: publisherEmail
publisherName: publisherName
}
}
resource test_api_vs_v1 'Microsoft.ApiManagement/service/apiVersionSets@2021-01-01-preview' = {
// Below reference to first/parent resource is working fine as it's in the same bicep file.
parent: devApim_resource
name: 'test_api_vs_name'
properties: {
displayName: api_display_name
description: api_description
versioningScheme: api_versioningScheme
}
}
Я хочу изменить этот второй ресурс main.bicep(ресурс набора версий) в модуль, подобный приведенным ниже файлам.
# main.bicep
param apimName string = 'devApim'
param apimLocation string = 'eastus'
param publisherName string = 'danny'
param publisherEmail string = 'danny@gmail.com'
param api_display_name string = 'Test Consumer API'
param api_description = 'Test API description'
param api_versioningScheme = 'Segment'
resource devApim_resource 'Microsoft.ApiManagement/service@2021-01-01-preview' = {
name: apimName
location: apimLocation
sku: {
name: 'Developer'
capacity: 1
}
properties: {
publisherEmail: publisherEmail
publisherName: publisherName
}
}
module test_api_module 'test-api.bicep' = {
name: 'test_api'
params: {
api_display_name: api_display_name
api_description: api_description
api_versioningScheme: api_versioningScheme
}
}
# test-api.bicep file
param api_display_name string
param api_description string
param api_versioningScheme string
resource test_api_vs_v1 'Microsoft.ApiManagement/service/apiVersionSets@2021-01-01-preview' = {
// Below reference to first/parent resource is not working.
//parent: devApim_resource
name: 'test_api_vs_name'
properties: {
displayName: api_display_name
description: api_description
versioningScheme: api_versioningScheme
}
}
Теперь как я могу ссылаться/передавать родительский ресурс «devApim_resource» (первый ресурс) в модульный ресурс test_api_vs_v1 (второй ресурс) в качестве родительского: devApim_resource не работает в файле модуля test-api.bicep
Я очень новичок в кодировании бицепсов.
Ответ №1:
Более подробную информацию можно найти в этой документации:
Вам необходимо добавить имя родительского ресурса в качестве параметра в свой дочерний модуль:
param apimName string
Более простым решением было бы создать имя дочернего ресурса с использованием родительского:
resource test_api_vs_v1 'Microsoft.ApiManagement/service/apiVersionSets@2021-01-01-preview' = {
name: '${apimName}/test_api_vs_name'
...
}
или вы можете сослаться на существующий ресурс, подобный этому:
// Reference to the parent resource
resource devApim_resource 'Microsoft.ApiManagement/service@2021-01-01-preview' existing = {
name: apimName
}
resource test_api_vs_v1 'Microsoft.ApiManagement/service/apiVersionSets@2021-01-01-preview' = {
parent: devApim_resource
name: 'test_api_vs_name'
...
}
Тогда в вашем main.bicep
, вы можете называть вас модулем chil вот так:
module test_api_module 'test-api.bicep' = {
name: 'test_api'
params: {
apimName: devApim_resource.name
api_display_name: api_display_name
api_description: api_description
api_versioningScheme: api_versioningScheme
}
}
Комментарии:
1. ресурс devApim_resource ‘Microsoft. ApiManagement/сервис@2021-01-01-предварительный просмотр’ существующий = { имя: apimName }
2. Помогает ли приведенный выше синтаксис комментариев также получить определение ресурса в bicep так же, как при импорте terraform, или он просто используется для ссылок между необходимыми ресурсами?
3. Использование
existing
ключевого слова также позволяет получить свойства ресурса4. Хорошо, спасибо @Thomas. Допустим, у меня есть учетная запись хранения в azure с именем «examplestorage456». Как мне получить свойства этого ресурса, используя приведенный ниже код бицепса? Например, просто выполнив эту команду или каким-то другим способом. «создание группы развертывания az-g test12 -f учетная запись хранения.bicep -c »
5. ресурс stg ‘Microsoft.Storage/storageAccounts@2021-04-01’ существующий = { имя: ‘examplestorage456’ }