Как ссылаться на имя родительского ресурса для ресурса внутри модуля с помощью bicep

#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’ }