如何使用 bicep 将父资源名称引用到模块内的资源

问题描述 投票:0回答:2

如何使用 Microsoft bicep 代码将父资源名称引用到模块内的资源。

下面的 main.bicep 文件代码正在运行。

# main.bicep

param apimName string = 'devApim'
param apimLocation string = 'eastus'
param publisherName string = 'danny'
param publisherEmail string = '[email protected]'

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 第二个资源(VersionSet 资源)修改为如下文件所示的模块。

# main.bicep

param apimName string = 'devApim'
param apimLocation string = 'eastus'
param publisherName string = 'danny'
param publisherEmail string = '[email protected]'

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 模块文件中不起作用

我对二头肌编码很陌生。

azure azure-resource-manager azure-bicep
2个回答
6
投票

找到此文档以了解更多详细信息:

您需要在子模块中添加父资源名称作为参数:

param apimName string

然后您可以像这样引用现有资源:

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

0
投票

文档所述,如果子资源名称在斜杠之前包含父资源名称,则无需引用父资源。因此,您只需将父资源名称传递到模块中并将其插入到子资源名称中即可。

# main.bicep

param apimName string = 'devApim'
...


resource devApim_resource 'Microsoft.ApiManagement/service@2021-01-01-preview' = {
  name: apimName
  ...
}

module test_api_module 'test-api.bicep' = {
  name: 'test_api'
  params: {
    apimName: devApim_resource.name
    ...
  }
}

# test-api.bicep file

param apimName string 
... 

resource test_api_vs_v1 'Microsoft.ApiManagement/service/apiVersionSets@2021-01-01-preview' = {  
  name: '${apimName}/test_api_vs_name'
  properties: {
    ...
  }
}

这将创建

test_api_vs_name
版本集作为
test_api
APIM 实例的子级。

© www.soinside.com 2019 - 2024. All rights reserved.