在主bicep模板中添加Azure Traffic Manager终结点作为子资源

lqfhib0f  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(83)

我试图通过在main.bicep文件中调用的Network/trafficManagerProfiles.bicep模块添加新的流量管理器配置文件。
这个很好用。
main.bicep文件正在使用它们自己的小模块创建多个Function App,调用方式类似于下面

module functionAppModule 'Web/functions.bicep' = {
  dependsOn: [
    appServicePlanModule
    webApiStorageAccount
  ]
  name: 'functionAppModule'
  params: {
    environmentName: environmentName
    systemName: systemName
    azureRegion: azureRegion
    appServicePlanId: appServicePlanModule.outputs.id
  }
}

现在,我尝试将我的Web应用程序(Azure函数)的必要端点添加到Traffic Manager Profile中,这也可以通过using the endpoints property实现。
但是,这意味着我需要在这个文件中添加一个参数,以接受包含所有关于我的App Services信息的对象数组,或者我需要在这里解析它们(通过使用existing关键字检索示例)。这听起来不像是实现它的方法,因为所有这些资源都已经在main.bicep文件中可用/引用了。
Traffic Manager Profile模块现在如下所示:

param systemName string
@allowed([
  'dev'
  'test'
  'acc'
  'prod'
])
param environmentName string
param relativeLiveEndpoint string = '/api/Live'

var trafficManagerProfileName = '${systemName}${environmentName}'

resource trafficManagerProfile 'Microsoft.Network/trafficmanagerprofiles@2018-08-01' = {
  name: trafficManagerProfileName
  location: 'global'
  properties: {
    allowedEndpointRecordTypes: [
      'DomainName'
    ]
    dnsConfig: {
      relativeName: trafficManagerProfileName
      ttl: 60
    }
    profileStatus: 'Enabled'
    trafficRoutingMethod: 'Performance'
    monitorConfig: {
      profileMonitorStatus: 'Online'
      protocol: 'HTTPS'
      port: 443
      path: relativeLiveEndpoint
      timeoutInSeconds: 10
      intervalInSeconds: 30
      toleratedNumberOfFailures: 3
    }
    endpoints: [
      {
        id: 'the resource id'
        name: 'the resource name'
        type: 'the resource type'
        properties: {
          endpointStatus: 'Enabled'
          endpointMonitorStatus: 'Online'
          targetResourceId: 'the resource id'
          target: 'mysite.azurewebsites.net'
          endpointLocation: 'West Europe'
          weight: 1
          priority: 1
        }
      }
      // All other app services
    ]
  }
}

根据Stack Overflow上的一些答案,endpoints也可以通过ARM模板中的子资源创建(类似于Microsoft.Network/trafficmanagerprofiles/endpoints),但是,这似乎在Bicep中不可用(或者在自动完成中不可用)。
我想在我的main.bicep文件中做的是这样的事情,因为这样我就可以引用我想要添加的所有应用服务。

var trafficManagerProfileEndpoints 'Microsoft.Network/trafficmanagerprofiles/endpoints@2050-01-01` = {
  name: '${trafficManagerProfile.Name}/endpoints'
  endpoints: [ 
    // All of my endpoints
  ]
}

与通过Microsoft.Web/sites/config@2020-12-01在App Service中提供的配置设置有点类似。
对此有什么想法吗?

lf3rwulv

lf3rwulv1#

我刚刚以 lightning 般的速度完成了你的问题,如果我没有完全理解,请原谅我,但看起来你需要再次将你的Web应用程序声明为资源,但作为现有资源。这允许您从应用服务访问所需的所有 prop 。
这个博客解释了如何使用Bicep中的现有资源:https://hexmaster.nl/posts/bicep-existing/

k7fdbhmy

k7fdbhmy2#

通过Bicep ARM可以实现这一点,但是Microsoft.Network/trafficManagerProfiles API没有端点可用的类型,所以即使部署工作完美,它也会生成警告。
如果您定义的流量管理器配置文件没有endpoints属性:

resource trafficManager 'Microsoft.Network/trafficmanagerprofiles@2018-08-01' = {
  name: '<name>'
  location: 'global'
  properties: {
    profileStatus: 'Enabled'
    trafficRoutingMethod: '<trafficRoutingMethod>'
    dnsConfig: {
      ...
    }
    monitorConfig: {
      ...
    }    
  }
}

然后,您可以像这样添加端点:

// Azure endpoints: cloud service, app service, app service slots, public ip
resource trafficManagerAzureEndpoint 'Microsoft.Network/trafficManagerProfiles/azureEndpoints@2018-08-01' = {
  name: name
  parent: trafficManager 
  properties: {
    ...
  }
}

// External endpoint
resource trafficManagerExternalEndpoint 'Microsoft.Network/trafficManagerProfiles/externalEndpoints@2018-08-01' = {
  name: name
  parent: trafficManager 
  properties: {
    ...
  }
}

// Nested endpoints
resource trafficManagerNestedEndpoint 'Microsoft.Network/trafficManagerProfiles/nestedEndpoints@2018-08-01' = {
  name: name
  parent: trafficManager 
  properties: {
    ...
  }
}

相关问题