0

I am creating two Azure App Services and 2 App Service Plans using For Loop but I need to pass the HostingPlanID from the AppService plan to each of the App Services, but I'm unable to access the output of the module.

I'm getting the following error Cannot access properties of type "module[]". An "object" type is required.

within my App Service Plan Module, I am creating an output output hostingPlanId string = hostingPlan.id

But i can't reference this from my template (main.bicep)

hostingPlan: AppServicePlan.hostingPlan.id

Module:

param appPlanSkuCode string
param appPlanSkuTier string
param appPlanOS string
param appPlanSize string
param appPlanFamily string
param appPlanCapacity int
param hostingPlanName string



resource hostingPlan 'Microsoft.Web/serverfarms@2020-10-01' = {
  name: hostingPlanName
  location: resourceGroup().location
  kind: appPlanOS
  sku: {
    name: appPlanSkuCode
    tier: appPlanSkuTier
    size: appPlanSize
    family: appPlanFamily
    capacity: appPlanCapacity
  }
  properties: {
    perSiteScaling: false
    maximumElasticWorkerCount: 1
    isSpot: false
    reserved: true
    isXenon: false
    hyperV: false
    targetWorkerCount: 0
    targetWorkerSizeId: 0
    
  }
}

output hostingPlanId string = hostingPlan.id

Template:

module AppService '../../Modules/Azure.App.Service.template.bicep'  = [for i in range(0, length(webAppSettings.webApps)): {
  name: webAppSettings.webApps[i].appServiceType == 'functionApp' ? toLower('fnc-${webAppSettings.webApps[i].name}-${resourceGroupNameSuffix}') : toLower('web-${webAppSettings.webApps[i].name}-${resourceGroupNameSuffix}')
  dependsOn: [
    AppServicePlan
  ]
  params: {
    hostingPlan: AppServicePlan.hostingPlan.id
    webAppSettings:webAppSettings
    vnetSubnetID:webAppSettings.webApps[i].appPurpose == 'backend' ? '${backendvnetSubnetID}' : '${frontendvnetSubnetID}'
    appServiceName:webAppSettings.webApps[i].appServiceType == 'functionApp' ? toLower('fnc-${webAppSettings.webApps[i].name}-${resourceGroupNameSuffix}') : toLower('web-${webAppSettings.webApps[i].name}-${resourceGroupNameSuffix}')
    appServiceType: webAppSettings.webApps[i].appServiceType
    LinuxFXVersion: webAppSettings.webApps[i].LinuxFX
  }
}]

Any ideas where I am going wrong?

Thanks

Thomas
  • 24,234
  • 6
  • 81
  • 125
JacksWastedLife
  • 254
  • 2
  • 15

1 Answers1

0

If you have a hostingPlan.bicep file, you can reference it from the main.bicep file like that:

module hostingPlan 'hostingPlan.bicep' = {
  name: 'hostingPlan'
  params: {
    ...
  }
}

You can then access the outputs of the module:

hostingPlan.outputs.hostingPlanId
Thomas
  • 24,234
  • 6
  • 81
  • 125