Configuring Bicep Parameters for ILAP Analytics

Modified on Fri, 11 Jul at 9:55 AM

Table of contents



Introduction

This guide outlines how to prepare and configure your Bicep parameter file to deploy the necessary Azure resources for ILAP Analytics.


1. Find Key Values

You need the following values to configure your parameter file: clientId, tenantId, and audience.

Steps:

  1. Go to the Azure Portal and search for Entra ID.

  2. Under the Overview tab, locate the tenantId. Copy this value.

  3. Navigate to App Registrations in the left menu.

    • Search for your Analytics API (created during API registration).

    • Copy the clientId from the application.

  4. Under Expose an API, copy the Application ID URI. This will be the value for your audience parameter.


2. Note Custom Domain Parameters

If you're using custom domains:

  1. Document the custom domain names you created during the prerequisites setup.

  2. Note the Key Vault name, resource group, and certificate names associated with these custom domains.


3. Note SQL Server Admin Details

To configure SQL Server, note:

  1. The User Principal Name of the Azure AD admin for your SQL Server:

    • Go to Entra ID > Users, and search for the intended admin.

  2. The Object ID for this user.


4. Get Flow API Parameters

To configure ILAP Analytics' connection to the Flow API:

  1. Select the appropriate environment URL:

    • Dev: https://dev.ilapdataexchange.promineo.no/api/api

    • Beta: https://beta.ilapdataexchange.promineo.no/api/api

    • Prod: https://ilap.collabor8.no/api/api

  2. Log in to the Flow UI of your target environment and:

    • Go to Analytics Client.

    • Click Add New Component, provide a name and description, and create it.

    • From the three-dot menu of the created component, select Service Tokens and Add New Token.

  3. Set an expiration date and click Create.

  4. Copy the generated access token and store it securely.


5. Build the Bicep Parameter File

With all the required values, create a .bicepparam file and paste the following code as follows:

Code:

using 'main.bicep'

var env = 'dev'  // Your environment name. Example: test, beta, prod etc.
var company = 'promineo'  // Your company name

param azureAd = {
  clientId: '5f9d20ce-8ac7-4115-80a7-2f1b2acd7bda' // client id from step-1
  instance:'https://login.microsoftonline.com/'
  tenantId:'e8ddb777-121f-4abc-a113-6b91d4b5defc' // tenant id from step-1
  audience:'api://5f9d20ce-8ac7-4115-80a7-2f1b2acd7bda' // audience from step-1
}

// Note: if useCustomDomain is false, then leave customDomain and certficateName parameters as is.

param webAppParams = {
  ilapAnalyticsUi: {
    name: 'app-ilapanalytics-ui-${env}'
    customDomain: '${env}.ilapanalytics.${company}.no'  // Custom domain name from Step-2
    certificateName: '${env}-ilapanalytics-${company}-no'  // Certificate name from Step-2
    useCustomDomain: true 
  }
  ilapAnalyticsApi: {
    name: 'app-ilapanalytics-api-${env}'
    customDomain: 'api.${env}.ilapanalytics.${company}.no'  // Ilap Analytics Api domain name
    certificateName: 'api-${env}-ilapanalytics-${company}-no'  // SSL certificate name for Api
    useCustomDomain: true  // If you do not want custom domain for Api then make it false
  }
  ilapAnalyticsBackgroundJob: {
    name: 'app-ilapanalytics-backgroundjobs-${env}'
    customDomain: 'jobs.${env}.ilapanalytics.${company}.no'  // Ilap Analytics BackgroundJobs app domain name
    certificateName: 'jobs-${env}-ilapanalytics-${company}-no' // SSL certificate name for BackgroundJobs app
    useCustomDomain: true  // If you do not want custom domain for BackgroundJobApp then make it false
  }
}

param timephasingServiceConfiguration = {
    BaseUrl: 'https://timephasing.promineo.com'
    AccessToken: 'Your_Access_Token'
    MaxNumberOfActivitiesPerRequest: 2000
    IncludePerCalendar: false // To fetch calendar hours from time phasing. You can make it true if calendar hours related changes in timePhasing dev merged into main
}


param databaseParams = {
  name: 'sqldb-ilapanalytics-${env}-norwayeast'
  backupStorageRedundancy: 'Zone'
  minCapacity: '2' 
  isZoneRedundant: true
  sku: {                 // Feel free to adjust based on your need.
    name: 'HS_S_Gen5'
    tier: 'Hyperscale'
    family: 'Gen5'
    capacity: 8
  }
}

var defaultAppServicePlanSku = { // Feel free to adjust based on your need.
  name: 'S1'
  tier: 'Standard'
  size: 'S1'
  family: 'S'
}

param apiAppServicePlanName = 'plan-ilapanalytics-api-${env}'
param bgAppServicePlanName = 'plan-ilapanalytics-bgjob-${env}'
param webAppServicePlanName = 'plan-ilapanalytics-ui-${env}'

param appServicePlanParams = [
  {
    name: apiAppServicePlanName
    sku: defaultAppServicePlanSku 
  }
  {
    name: bgAppServicePlanName
    sku: defaultAppServicePlanSku 
  }  
  {
    name: webAppServicePlanName
    sku: defaultAppServicePlanSku 
  }  
]

param sqlServerParams = {
  name: 'sql-ilapanalytics-${env}-norwayeast'
  administratorLogin: 'your_sql_server_admin_name' // Example: ilapsa; This credential will be used by analytics applications to access background job
  administratorLoginPassword: 'your_password' // Please choose a strong password
  administrators: {
    administratorType: 'ActiveDirectory'
    principalType: 'Group'
    login: 'atle@promineo.no'   // User principal name from step-3
    sid: '3e20f45a-ed46-4094-87ed-35533c55efdb'   // Object ID from step-3
    tenantId: 'e8ddb777-121f-4abc-a113-6b91d4b5defc' // Tenant Id from step-1
    azureADOnlyAuthentication: false
  }
}

param keyVaultParams = {
  name: 'promineodevilapnoekv'  // Key Vault name from step-2
  resourceGroupName: 'rg-ide-dev-norwayeast'  // Resource group name from step-2
}

param storageAccountParams = {
  name: 'dlailapanalytics${env}'
  kind: 'StorageV2'
  sku: {               // Feel free to adjust based on your need.
    name: 'Standard_LRS'
    tier: 'Standard'
  }
}

param flowApiBaseUrl = 'https://dev.ilapdataexchange.promineo.no/api/api' // Flow API URL from step-4
param flowApiAccessToken = 'eyJhbGciOiJIUzI..........' // Access token from step-4
param synchronizeFieldsJobSchedule = '*/10 * * * *' // Means: Every 10 minutes. It specifies how often background job will fetch ILAP terms from Flow.
param moveIlapFileToBlobStorage = 'false'  // Ilap files are deleted from Database after background jobs are completed. So, if you want to store Ilap files to above storage account then make it 'true'.
param graphQlExecutionTimeout = '15' // In munites
param enableFieldSyncronization = 'true' // To syncronize ilap terms (aka. metadataFields) with IDE
param enableFieldImport = 'true' // To import ilap terms (aka. metadataFields) from IDE

Replace the placeholders (YOUR_CLIENT_ID, etc.) with the actual values gathered in previous steps.


6. Key Additional Parameters

  • Database Parameters:

    • Include administratorLogin and administratorLoginPassword for the SQL server.

    • Example:

      param databaseParams = {
        name: 'sqldb-ilapanalytics-${env}'
        administratorLogin: 'YOUR_SQL_ADMIN'
        administratorLoginPassword: 'YOUR_PASSWORD'
      }
  • Timephasing Service Configuration:

    • Add the BaseUrl and AccessToken for timephasing services.

    • Example:

      param timephasingServiceConfiguration = {
        BaseUrl: 'https://timephasing.promineo.com'
        AccessToken: 'YOUR_ACCESS_TOKEN'  // From Step 4
      }

Checklist for Bicep Parameters

  • clientId, tenantId, and audience values are accurate.

  • Custom domain details (if applicable) are included.

  • SQL Server administrator details are configured.

  • Flow API URL and access token are properly set.

  • Parameter values match your target environment.



Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article