Обеспечение рабочего процесса и подключения API для стандартного приложения логики с помощью шаблонов/скриптов Bicep

Я пытаюсь подготовить рабочий процесс и соединение API для моего приложения Standard Logic.

Это сценарий моего приложения логики для тренировки бицепса.

resource logicAppResource 'Microsoft.Web/sites@2023-01-01' = {
  name: logicAppName
  location: 'South India'
  kind: 'functionapp,workflowapp'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    siteConfig: {
      appSettings: [
        {
          name: 'FUNCTIONS_EXTENSION_VERSION'
          value: '~4'
        }
        {
          name: 'FUNCTIONS_WORKER_RUNTIME'
          value: 'node'
        }
        {
          name: 'WEBSITE_NODE_DEFAULT_VERSION'
          value: '~18'
        }
        {
          name: 'AzureWebJobsStorage'
          value: storageConnectionString
        }
        {
          name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
          value: storageConnectionString
        }
        {
          name: 'WEBSITE_CONTENTSHARE'
          value: toLower(logicAppName)
        }
        {
          name: 'AzureFunctionsJobHost__extensionBundle__id'
          value: 'Microsoft.Azure.Functions.ExtensionBundle.Workflows'
        }
        {
          name: 'AzureFunctionsJobHost__extensionBundle__version'
          value: '[1.*, 2.0.0)'
        }
        {
          name: 'APP_KIND'
          value: 'workflowApp'
        }
      ]
    }
    enabled: true
    hostNameSslStates: [
      {
        name: '${logicAppName}.azurewebsites.net'
        sslState: 'Disabled'
        hostType: 'Standard'
      }
      {
        name: '${logicAppName}.scm.azurewebsites.net'
        sslState: 'Disabled'
        hostType: 'Repository'
      }
    ]
    serverFarmId: logicAppServicePaln.id
    reserved: false
    isXenon: false
    hyperV: false
    vnetRouteAllEnabled: true
    vnetImagePullEnabled: false
    vnetContentShareEnabled: false
    // siteConfig: {
    //   numberOfWorkers: 1
    //   acrUseManagedIdentityCreds: false
    //   alwaysOn: false
    //   http20Enabled: false
    //   functionAppScaleLimit: 0
    //   minimumElasticInstanceCount: 1
    // }
    scmSiteAlsoStopped: false
    clientAffinityEnabled: false
    clientCertEnabled: false
    clientCertMode: 'Required'
    hostNamesDisabled: false
    customDomainVerificationId: '0182BAC7C537A4874AED7705B0D4D788E2909F91FBE82947CB8133FDBDD204EA'
    containerSize: 1536
    dailyMemoryTimeQuota: 0
    httpsOnly: true
    redundancyMode: 'None'
    publicNetworkAccess: 'Enabled'
    storageAccountRequired: false
    virtualNetworkSubnetId: '${vnetResourceLogicApp.id}/subnets/${subnetResource.name}'
    keyVaultReferenceIdentity: 'SystemAssigned'
  }
}

Но когда я пытаюсь добавить рабочий процесс

resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
  name: logicAppName
  location: resourceGroupLocation
  properties: {
    state: 'Enabled'
    definition: {
      '$schema': 'https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#'
      actions: {
        HTTP: {
          inputs: {
            method: 'GET'
            uri: 'https://ifconfig.me'
          }
          runAfter: {}
          runtimeConfiguration: {
            contentTransfer: {
              transferMode: 'Chunked'
            }
          }
          type: 'Http'
        }
      }
      contentVersion: '1.0.0.0'
      outputs: {}
      triggers: {
        When_a_HTTP_request_is_received: {
          kind: 'Http'
          type: 'Request'
        }
      }
    }
  }
}

Он создает новое приложение логики с планом потребления. без создания рабочего процесса внутри стандартного приложения логики.

Затем я попытался вручную реализовать рабочий процесс и получить код, но свойство kind: 'Stateful' не вписывалось в шаблон бицепса.

Также с соединениями API, но соединения API создаются внутри группы ресурсов, но не могут быть добавлены в рабочий процесс.

API-соединение Бицепс

resource sqlServerAPIConnection 'Microsoft.Web/connections@2016-06-01' = {
  name: sqlServerAPIConnectionName
  location: resourceGroupLocation
  properties: {
    api: {
      name: sqlServerAPIConnectionName
      type: 'Microsoft.Web/locations/managedApis'
      displayName: 'SQL SERVER'
      brandColor: '#f2f2f2'
      description: 'Connect to SQL Server'
      iconUri: 'https://connectoricons-prod.azureedge.net/releases/v1.0.1683/1.0.1683.3685/sql/icon.png'
      id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroupLocation}/managedApis/sql'
    }
    parameterValues: {
      database: sqlServerAPIConnectionDbName
      server: sqlServerAPIConnectionServerName
      username: sqlServerAPIConnectionUsername
      password: sqlServerAPIConnectionPassword
      authType: 'sqlAuthentication'
    }

    displayName: 'SQL'
  }
}

И соединения API, и рабочие процессы не будут правильно развернуты в приложении Standered Logic.

Я хочу развернуть API-соединение и рабочий процесс приложения Standard Logic.

Я попробовал приложение логики плана потребления, которое прекрасно работает с этим рабочим процессом и соединениями API.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
136
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Развертывание рабочего процесса в приложении Standard Logic с использованием шаблона Arm — это другая история, гораздо более сложная. Вы не можете просто скопировать и вставить код рабочего процесса consumption в standard. но используя workflow.json, connections.json и т. д. В github или официальных документах очень мало документов с примерами кода. Я только что нашел один пример ссылки в Azure GitHub . Просто учитесь и следуйте образцу.

Ответ принят как подходящий

Я нашел способ связать соединения API для стандартного приложения логики. Я написал среднюю статью.

При создании приложения Logic потребления существует прямой скрипт Bicep для подключений API. Ссылка .

Я продемонстрирую это на примере подключения к SQL API.

var resourceGroupLocation = resourceGroup().location

var sqlServerAPIConnectionDbName = 'dbname'
var sqlServerAPIConnectionServerName = 'test.database.windows.net'
var sqlServerAPIConnectionUsername = 'admin'
var sqlServerAPIConnectionPassword = 'password'

resource sqlServerAPIConnection 'Microsoft.Web/connections@2016-06-01' = {
  name: 'sql'
  location: resourceGroupLocation
  kind: 'V2'
  properties: {
    api: {
      name: 'sql'
      type: 'Microsoft.Web/locations/managedApis'
      displayName: 'SQL SERVER'
      brandColor: '#f2f2f2'
      description: 'Connect to SQL Server'
      iconUri: 'https://connectoricons-prod.azureedge.net/releases/v1.0.1683/1.0.1683.3685/sql/icon.png'
      id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroupLocation}/managedApis/sql'
    }
    parameterValues: {
      database: sqlServerAPIConnectionDbName
      server: sqlServerAPIConnectionServerName
      username: sqlServerAPIConnectionUsername
      password: sqlServerAPIConnectionPassword
      authType: 'sqlAuthentication'
    }
    
    displayName: 'SQL'
  }
}

resource MyLAAccessPolicy 'Microsoft.Web/connections/accessPolicies@2016-06-01' = {
  name: '${sqlServerAPIConnection.name}/${logicApp.name}'
  location: resourceGroup().location
  properties: {
    principal: {
      type: 'ActiveDirectory'
      identity: {
        tenantId: subscription().tenantId
        objectId: logicApp.identity.principalId
      }
    }
  }
}

output sqlConnectionRuntimeUrl string =  sqlServerAPIConnection.properties.connectionRuntimeUrl

Обязательно добавьте это свойство **Kind ** в версию V2, иначе политики доступа не будут назначены.

Если вы уже создали это приложение логики, вы можете добавить имя приложения логики и идентификатор объекта со страницы обзора приложения логики.

Прокрутите вниз до представления JSON и скопируйте основной идентификатор.

Это выведет соединение **connectionRuntimeUrl **SQL API. Я использую Vscode для развертывания файла Biucep.

Что касается стандартного приложения логики, вы можете выполнить тот же сценарий, но не найдете соединений API внутри рабочих процессов. Но есть уже развернутое API соединение от Бицепса.

Already deployed API connection via Bicep

API connection won't display in the Logic app connections

Чтобы включить это соединение API для рабочего процесса, перейдите к учетной записи хранения, созданной ранее при создании приложения Standard Logic.

Перейдите в раздел общего доступа к файлам. Нажмите на общий файловый ресурс и просмотрите.

Перейдите на сайт -> wwwroot. Там вы можете найти файл Connections.json.

Щелкните правой кнопкой мыши по этому файлу и загрузите. Откройте этот файл, используя код Vs.

В противном случае это представление JSON для соединений API находится в разделе «Соединения» рабочего процесса.

Теперь вам нужно отредактировать файл JSON.

  "sql": {
            "api": {
                "id": "/subscriptions/{subscription id}/providers/Microsoft.Web/locations/${resource group location}/managedApis/sql"
            },
            "authentication": {
                "type": "ManagedServiceIdentity"
            },
            "connection": {
                "id": "/subscriptions/{subscription id}/resourceGroups/${resource group name}/providers/Microsoft.Web/connections/sql"
            },
            "connectionRuntimeUrl": "{replace with output runtime url}"
        }
    },

Скопируйте эту строку JSON и замените значения правильными данными. Идентификатор подписки, имя группы ресурсов и расположение группы ресурсов.

И вставьте это в раздел ManagedApiConnections.

Сохраните файл.

Теперь вы можете увидеть успешно подключенное соединение API в разделе «Соединения».

Теперь вы можете напрямую назначить соединение API при добавлении действия в рабочий процесс.

Если вы хотите добавить соединение SMTP API.

resource smtpAPIConnection 'Microsoft.Web/connections@2016-06-01' = {
  name: 'smtp'
  kind: 'V2'
  location: resourceGroupLocation
  properties: {
    api: {
      name: 'smtp'
      type: 'Microsoft.Web/locations/managedApis'
      displayName: 'SMTP'
      brandColor: '#f2f2f2'
      description: 'Send emails using SMTP'
      iconUri: 'https://connectoricons-prod.azureedge.net/releases/v1.0.1677/1.0.1677.3637/smtp/icon.png'
      id: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Web/locations/${resourceGroupLocation}/managedApis/smtp'
    }
    parameterValues: {
      enableSSL: 'true'
      serverAddress: smtpAPIConnectionServerAddress
      userName: smtpAPIConnectionUserName
      port: smtpAPIConnectionPort
      password: smtpAPIConnectionPassword
    }
    displayName: 'SMTP'
  }
}

resource smtpConnectionAccessPolicy 'Microsoft.Web/connections/accessPolicies@2016-06-01' = {
  name: '${smtpAPIConnection.name}/${logicAppName}'
  location: resourceGroup().location
  properties: {
    principal: {
      type: 'ActiveDirectory'
      identity: {
        tenantId: subscription().tenantId
        objectId: logicAppPrincipleId
      }
    }
  }
}

output smtpConnectionRuntimeUrl string = smtpAPIConnection.properties.connectionRuntimeUrl

Переменные:

var smtpAPIConnectionServerAddress = 'smtp-relay.com'
var smtpAPIConnectionUserName = '[email protected]'
var smtpAPIConnectionPort = '556'
var smtpAPIConnectionPassword = 'cb4e6xxx7'

var resourceGroupLocation = resourceGroup().location

var logicAppPrincipleId = 'xxxx5-bfx5-4xxxxxx9b603a'
var logicAppName = 'logicapptest'

Этот сценарий также возвращает ConnectionRuntimeUrl для SMTP.

 "smtp": {
            "api": {
                "id": "/subscriptions/{subscription id}/providers/Microsoft.Web/locations/{resource group location}/managedApis/smtp"
            },
            "authentication": {
                "type": "ManagedServiceIdentity"
            },
            "connection": {
                "id": "/subscriptions/{subscription id}/resourceGroups/{resource group name}/providers/Microsoft.Web/connections/smtp"
            },
            "connectionRuntimeUrl": "{connection runtime url}"
        }

Скопируйте эту строку JSON и замените значения правильными данными. Идентификатор подписки, имя группы ресурсов и расположение группы ресурсов.

И вставьте это в раздел ManagedApiConnections.

Сохраните файл JSON.

Теперь действиям приложения Logic доступны два соединения API.

Теперь вы можете создавать действия рабочего процесса, используя два соединения API.

источник

Другие вопросы по теме