Я пытаюсь подготовить рабочий процесс и соединение 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.
Развертывание рабочего процесса в приложении 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 соединение от Бицепса.
Чтобы включить это соединение 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.