Creare e distribuire flussi di lavoro di app per la logica basati su tenant singolo con App per la logica abilitate per Azure Arc (anteprima)

Nota

Questa funzionalità è in anteprima ed è soggetta alle Condizioni supplementari per l'utilizzo per le anteprime di Microsoft Azure.

Con App per la logica abilitato per Azure Arc, è possibile creare e distribuire flussi di lavoro di app per la logica basati su tenant singolo in un'infrastruttura Kubernetes gestita. Le app per la logica vengono eseguite in un percorso personalizzato mappato a un cluster Kubernetes abilitato per Azure Arc in cui è stato installato e abilitato il bundle delle estensioni della piattaforma del servizio app di Azure.

Ad esempio, questo cluster può essere il servizio Azure Kubernetes, Kubernetes bare metal o un'altra configurazione. Il bundle di estensioni consente di eseguire servizi della piattaforma, ad esempio App per la logica di Azure, Servizio app di Azure e Funzioni di Azure nel cluster Kubernetes.

Per altre informazioni, vedere la documentazione seguente:

Prerequisiti

Questa sezione descrive i prerequisiti comuni in tutti gli approcci e gli strumenti che è possibile usare per creare e distribuire i flussi di lavoro dell'app per la logica. I prerequisiti specifici dello strumento vengono visualizzati insieme ai passaggi corrispondenti.

  • Un account Azure con una sottoscrizione attiva. Se non hai una sottoscrizione di Azure, crea un account gratuito.

  • Un ambiente Kubernetes con un cluster Kubernetes abilitato per Azure Arc e un percorso personalizzato in cui è possibile ospitare ed eseguire App per la logica di Azure, servizio app di Azure e Funzioni di Azure.

    Importante

    Assicurarsi di usare la stessa posizione delle risorse per l'ambiente Kubernetes, la posizione personalizzata e l'app per la logica.

    Quando si crea l'estensione bundle del servizio app nel cluster Kubernetes, è possibile modificare il comportamento di ridimensionamento predefinito per l'esecuzione dei flussi di lavoro dell'app per la logica. Quando si crea l'estensione usando il comando dell'interfaccia della riga di comando di Azure, az k8s-extension create, assicurarsi di includere l'impostazione di configurazione keda.enabled=true:

    az k8s-extension create {other-command-options} --configuration-settings "keda.enabled=true"

    Per altre informazioni, vedere la documentazione seguente:

  • Identità di Microsoft Entra

    Se i flussi di lavoro devono usare connessioni ospitate in Azure, ad esempio Office 365 Outlook o Archiviazione di Azure, l'app per la logica deve usare un'identità di Microsoft Entra per l'autenticazione. App per la logica abilitate per Azure Arc può essere eseguito in qualsiasi infrastruttura, ma richiede un'identità con autorizzazioni per l'uso delle connessioni ospitate in Azure. Per configurare questa identità, creare una registrazione dell'app in Microsoft Entra ID usato dall'app per la logica come identità richiesta.

    Nota

    Il supporto delle identità gestite non è attualmente disponibile per App per la logica abilitate per Azure Arc.

    Per creare una registrazione dell'app Microsoft Entra usando l'interfaccia della riga di comando di Azure, seguire questa procedura:

    1. Creare una registrazione dell'app usando il comando az ad sp create.

    2. Per esaminare tutti i dettagli, eseguire il comando az ad sp show.

    3. Dall'output di entrambi i comandi trovare e salvare l'ID client, l'ID oggetto, l'ID tenant e i valori dei segreti client, che è necessario conservare per usarli in un secondo momento.

    Per creare una registrazione dell'app Microsoft Entra usando il portale di Azure, seguire questa procedura:

    1. Creare una nuova registrazione dell'app Microsoft Entra usando il portale di Azure.

    2. Al termine della creazione, trovare la nuova registrazione dell'app nel portale.

    3. Nel menu di registrazione selezionare Panoramica e salvare i valori di ID client, ID tenant e segreto client.

    4. Per trovare l'ID oggetto, accanto al campo Applicazione gestita nella directory locale selezionare il nome per la registrazione dell'app. Dalla visualizzazione delle proprietà copiare l'ID oggetto.

Creare e distribuire app per la logica

In base al fatto che si voglia usare l'interfaccia della riga di comando di Azure o Visual Studio Code, selezionare la scheda corrispondente per esaminare i prerequisiti e i passaggi specifici.

Prima di iniziare, è necessario disporre degli elementi seguenti:

Controllare l'ambiente e la versione dell'interfaccia della riga di comando

  1. Accedere al portale di Azure. Verificare che la sottoscrizione sia attiva eseguendo il comando seguente:

    az login
    
  2. Controllare la versione dell'interfaccia della riga di comando di Azure in una finestra terminale o di comando eseguendo il comando seguente:

    az --version
    

    Per la versione più recente, vedere le ultime note sulla versione.

  3. Se non si dispone della versione più recente, aggiornare l'installazione seguendo la guida all'installazione per il sistema operativo o la piattaforma in uso.

Installare l'estensione App per la logica di Azure (Standard) per l'interfaccia della riga di comando di Azure

Installare l'anteprima dell'estensione App per la logica di Azure a tenant singolo (Standard) per l'interfaccia della riga di comando di Azure eseguendo il comando seguente:

az extension add --yes --source "https://aka.ms/logicapp-latest-py2.py3-none-any.whl"

Crea gruppo di risorse

Se non si dispone già di un gruppo di risorse per l'app per la logica, crearlo con il comando az group create. A meno che non sia già stata impostata una sottoscrizione predefinita per l'account Azure, assicurarsi di usare il parametro --subscription con il nome o l'identificatore della sottoscrizione. In caso contrario, non è necessario usare il parametro --subscription.

Suggerimento

Per impostare una sottoscrizione predefinita, eseguire il comando seguente e sostituire MySubscription con il nome o l'identificatore della sottoscrizione.

az account set --subscription MySubscription

Ad esempio, il comando seguente crea un gruppo di risorse denominato MyResourceGroupName usando la sottoscrizione di Azure denominata MySubscription nel percorso eastus:

az group create --name MyResourceGroupName 
   --subscription MySubscription 
   --location eastus

Se il gruppo di risorse è stato creato correttamente, l'output mostra provisioningState come Succeeded:

<...>
   "name": "testResourceGroup",
   "properties": {
      "provisioningState": "Succeeded"
    },
<...>

Crea un'app per la logica

Per creare un'app per la logica abilitata per Azure Arc, eseguire il comando az logicapp create con i parametri obbligatori seguenti. Le posizioni delle risorse per l'app per la logica, la posizione personalizzata e l'ambiente Kubernetes devono essere tutte uguali.

Parametri Descrizione
--name -n Nome univoco per l'app per la logica
--resource-group -g Nome del gruppo di risorse in cui si vuole creare l'app per la logica. Se non se ne possiede uno, creare un gruppo di risorse.
--storage-account -s L'account di archiviazione da usare con l'app per la logica. Per gli account di archiviazione nello stesso gruppo di risorse, usare un valore stringa. Per gli account di archiviazione in un gruppo di risorse diverso, usare un ID risorsa.
az logicapp create --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --storage-account MyStorageAccount --custom-location MyCustomLocation

Per creare un'app per la logica abilitata per Azure Arc usando un'immagine del Registro Azure Container privata, eseguire il comando az logicapp create con i parametri obbligatori seguenti:

az logicapp create --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --storage-account MyStorageAccount --custom-location MyCustomLocation 
   --deployment-container-image-name myacr.azurecr.io/myimage:tag
   --docker-registry-server-password MyPassword 
   --docker-registry-server-user MyUsername

Visualizzare i dettagli dell'app per la logica

Per mostrare dettagli sull'app per la logica abilitata per Azure Arc, eseguire il comando az logicapp show con i parametri obbligatori seguenti:

az logicapp show --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Distribuire l'app per la logica

Per distribuire l'app per la logica abilitata per Azure Arc usando la distribuzione zip Kudu del servizio app di Azure, eseguire il comando az logicapp deployment source config-zip, con i parametri obbligatori seguenti:

Importante

Assicurarsi che il file ZIP contenga gli artefatti del progetto a livello radice. Questi artefatti includono tutte le cartelle del flusso di lavoro, i file di configurazione, ad esempio host.json, connections.json e qualsiasi altro file correlato. Non aggiungere cartelle aggiuntive né inserire elementi in cartelle che non esistono già nella struttura del progetto. Ad esempio, questo elenco mostra una struttura campione del file MyBuildArtifacts.zip:

MyStatefulWorkflow1-Folder
MyStatefulWorkflow2-Folder
connections.json
host.json
az logicapp deployment source config-zip --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --src MyBuildArtifact.zip

Avviare l'app per la logica

Per avviare l'app per la logica abilitata per Azure Arc, eseguire il comando az logicapp start con i parametri obbligatori seguenti:

az logicapp start --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Arrestare l'app per la logica

Per arrestare l'app per la logica abilitata per Azure Arc, eseguire il comando az logicapp stop con i parametri obbligatori seguenti:

az logicapp stop --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Riavviare l'app per la logica

Per riavviare l'app per la logica abilitata per Azure Arc, eseguire il comando az logicapp restart con i parametri obbligatori seguenti:

az logicapp restart --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Eliminare l'app per la logica

Per eliminare l'app per la logica abilitata per Azure Arc, eseguire il comando az logicapp delete con i parametri obbligatori seguenti:

az logicapp delete --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Configurare l'autenticazione della connessione

Attualmente, i cluster Kubernetes abilitati per Azure Arc non supportano l'uso di un'identità gestita dell'app per la logica per autenticare le connessioni API gestite. Queste connessioni gestite e ospitate in Azure vengono create quando si usano connettori gestiti nei flussi di lavoro.

È invece necessario creare una registrazione dell'app personalizzata in Microsoft Entra ID. È quindi possibile usare questa registrazione dell'app come identità per le app per la logica distribuite e in esecuzione in App per la logica abilitate per Azure Arc. Per altre informazioni, vedere i prerequisiti generali.

Dalla registrazione dell'app sono necessari l'ID client, l'ID oggetto, l'ID tenant e il segreto client. Se si usa Visual Studio Code per la distribuzione, è disponibile un'esperienza predefinita per configurare l'app per la logica con un'identità Microsoft Entra. Per altre informazioni, vedere Creare e distribuire flussi di lavoro dell'app per la logica - Visual Studio Code.

Tuttavia, se si usa Visual Studio Code per lo sviluppo, ma si usano l'interfaccia della riga di comando di Azure o pipeline automatizzate per la distribuzione, seguire questa procedura.

Configurare le impostazioni di connessione e app nel progetto

  1. Nel file connections.json del progetto dell'app per la logica individuare l'oggetto authentication per la connessione gestita. Sostituire il contenuto dell'oggetto con le informazioni di registrazione dell'app generate in precedenza nei prerequisiti generali:

    "authentication": {
       "type": "ActiveDirectoryOAuth",
       "audience": "https://management.core.windows.net/",
       "credentialType": "Secret",
       "clientId": "@appsetting('WORKFLOWAPP_AAD_CLIENTID')",
       "tenant": "@appsetting('WORKFLOWAPP_AAD_TENANTID')",
       "secret": "@appsetting('WORKFLOWAPP_AAD_CLIENTSECRET')"
    } 
    
  2. Nel file local.settings.json del progetto dell'app per la logica aggiungere l'ID client, l'ID oggetto, l'ID tenant e il segreto client. Dopo la distribuzione, queste impostazioni diventano le impostazioni dell'app per la logica.

    {
       "IsEncrypted": false,
       "Values": {
          <...>
          "WORKFLOWAPP_AAD_CLIENTID":"<my-client-ID>",
          "WORKFLOWAPP_AAD_OBJECTID":"<my-object-ID",
          "WORKFLOWAPP_AAD_TENANTID":"<my-tenant-ID>",
          "WORKFLOWAPP_AAD_CLIENTSECRET":"<my-client-secret>"
       }
    }
    

Importante

Per scenari o ambienti di produzione, assicurarsi di proteggere tali segreti e informazioni riservate, ad esempio usando un insieme di credenziali delle chiavi.

Aggiungere criteri di accesso

In App per la logica di Azure a tenant singolo ogni app per la logica ha un'identità concessa dai criteri di accesso per l'uso di connessioni gestite e ospitate in Azure. È possibile configurare questi criteri di accesso usando il portale di Azure o le distribuzioni dell'infrastruttura.

Modello ARM

Nel modello di Azure Resource Manager includere la definizione di risorsa seguente per ogni connessione API gestita e fornire le informazioni seguenti:

Parametro Descrizione
<nome connessione> Nome della connessione API gestita, ad esempio office365
<object-ID> ID oggetto per l'identità di Microsoft Entra, salvato in precedenza dalla registrazione dell'app
<tenant-ID> ID tenant per l'identità di Microsoft Entra, salvato in precedenza dalla registrazione dell'app
{
   "type": "Microsoft.Web/connections/accessPolicies",
   "apiVersion": "2016-06-01",
   "name": "[concat('<connection-name>'),'/','<object-ID>')]",
   "location": "<location>",
   "dependsOn": [
      "[resourceId('Microsoft.Web/connections', parameters('connection_name'))]"
   ],
   "properties": {
      "principal": {
         "type": "ActiveDirectory",
         "identity": {
            "objectId": "<object-ID>",
            "tenantId": "<tenant-ID>"
         }
      }
   }
}

Per altre informazioni, vedere la documentazione di Microsoft.Web/connections/accesspolicies (modello di Resource Manager).

Azure portal

Per questa attività, usare l'ID client salvato in precedenza come ID applicazione.

  1. Nel portale di Azure trovare e aprire l'app per la logica. Nel menu dell'app per la logica, in Flussi di lavoro selezionare Connessioni, che elenca tutte le connessioni nei flussi di lavoro per la risorsa dell'app per la logica.

  2. In Connessioni API selezionare una connessione, office365 in questo esempio.

  3. Nel menu della connessione, in Impostazioni selezionare Criteri di accesso>Aggiungi.

  4. Nel riquadro Aggiungi criteri di accesso trovare e selezionare l'ID client salvato in precedenza nella casella di ricerca.

  5. Al termine, selezionare Aggiungi.

  6. Ripetere questi passaggi per ogni connessione ospitata in Azure nell'app per la logica.

Automatizzare la distribuzione di DevOps

Per compilare e distribuire app per la logica abilitate per Azure Arc, è possibile usare le stesse pipeline e i processi di app per la logica basate su tenant singolo. Per automatizzare le distribuzioni dell'infrastruttura usando le pipeline per DevOps, apportare le modifiche seguenti a livello di infrastruttura sia per le distribuzioni non contenitore che per i contenitori.

Distribuzione standard (non contenitore)

Se si usa la distribuzione zip per la distribuzione di app per la logica, non è necessario configurare un registro Docker per l'hosting di immagini del contenitore. Anche se le app per la logica in Kubernetes vengono eseguite tecnicamente nei contenitori, App per la logica abilitato per Azure Arc gestisce automaticamente questi contenitori. Per questo scenario, completare le attività seguenti quando si configura l'infrastruttura:

Nel modello di Azure Resource Manager includere i valori seguenti:

Articolo Proprietà JSON Descrizione
Ubicazione location Assicurarsi di usare la stessa posizione della risorsa (area di Azure) della posizione personalizzata e dell'ambiente Kubernetes. Le posizioni delle risorse per l'app per la logica, la posizione personalizzata e l'ambiente Kubernetes devono essere tutte uguali.

Nota: questo valore non corrisponde al nome per la posizione personalizzata.

Tipo di app kind Tipo di app che si sta distribuendo in modo che la piattaforma Azure possa identificare l'app. Per App per la logica di Azure, queste informazioni sono simili all'esempio seguente: kubernetes,functionapp,workflowapp,linux
Posizione estesa extendedLocation Questo oggetto richiede il valore "name" del percorso personalizzato per l'ambiente Kubernetes e deve avere il valore "type" impostato su "CustomLocation".
ID risorsa del piano di hosting serverFarmId ID risorsa del piano di servizio app associato, formattato come segue:

"/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}"

Stringa di connessione di archiviazione AzureWebJobsStorage Stringa di connessione per l'account di archiviazione

Importante: è necessario specificare la stringa di connessione per l'account di archiviazione nel modello di Resource Manager. Per scenari o ambienti di produzione, assicurarsi di proteggere tali segreti e informazioni riservate, ad esempio usando un insieme di credenziali delle chiavi.

Modello ARM

L'esempio seguente descrive una definizione di risorsa di App per la logica abilitata per Azure Arc di esempio che è possibile usare nel modello di Resource Manager. Per altre informazioni, vedere la documentazione del formato di modello Microsoft.Web/sites (JSON).

{
   "type": "Microsoft.Web/sites",
   "apiVersion": "2020-12-01",
   "name": "[parameters('name')]",
   "location": "[parameters('location')]",
   "kind": "kubernetes,functionapp,workflowapp,linux",
   "extendedLocation": {
      "name": "[parameters('customLocationId')]",
      "type": "CustomLocation"
    },
   "properties": {
      "clientAffinityEnabled": false,
      "name": "[parameters('name')]",
      "serverFarmId": "<hosting-plan-ID>",
      "siteConfig": {
         "appSettings": [
            {
               "name": "FUNCTIONS_EXTENSION_VERSION",
               "value": "~3"
            },
            {
               "name": "FUNCTIONS_WORKER_RUNTIME",
               "value": "dotnet"
            },
            {
               "name": "AzureWebJobsStorage",
               "value": "<storage-connection-string>"
            },
            {
               "name": "AzureFunctionsJobHost__extensionBundle__id",
               "value": "Microsoft.Azure.Functions.ExtensionBundle.Workflows"
            },
            {
               "name": "AzureFunctionsJobHost__extensionBundle__version",
               "value": "[1.*, 2.0.0)"
            },
            {
               "name": "APP_KIND",
               "value": "workflowapp"
            }
         ],
         "use32BitWorkerProcess": "[parameters('use32BitWorkerProcess')]",
         "linuxFxVersion": "Node|12"
      }
   }
}

Nota

Per impostazione predefinita, l'impostazione dell'app per la logica FUNCTIONS_WORKER_RUNTIME è dotnet. In precedenza, node era il valore predefinito. Tuttavia, dotnet è ora il valore predefinito per tutte le app per la logica con abilitazione di Arc nuove ed esistenti, anche per le app con un valore diverso. Questa modifica non dovrebbe influire sul runtime del flusso di lavoro e tutto dovrebbe funzionare allo stesso modo di prima. Per altre informazioni, vedere l'impostazione dell'app FUNCTIONS_WORKER_RUNTIME.

L'impostazione dell'app per la logica APP_KIND è impostata su workflowapp, ma in alcuni scenari questa impostazione dell'app è mancante, ad esempio a causa del fatto che l'automazione usa i modelli di Azure Resource Manager o altri scenari in cui l'impostazione potrebbe non essere inclusa. Se determinate azioni non funzionano, come l'azione Eseguire codice JavaScript o il flusso di lavoro smette di funzionare, controllare che l'impostazione dell'app APP_KIND esista e sia impostata su workflowapp. Per maggiori informazioni, vedere l'impostazione dell'app APP_KIND.

Distribuzione di contenitori

Se si preferisce usare strumenti contenitore e processi di distribuzione, è possibile inserire in contenitori le app per la logica e distribuirle in App per la logica abilitato per Azure Arc. Per questo scenario, completare le attività generali seguenti quando si configura l'infrastruttura:

  • Configurare un registro Docker per ospitare le immagini del contenitore.

  • Per inserire in un contenitore l'app per la logica, aggiungere il Dockerfile seguente alla cartella radice del progetto dell'app per la logica e seguire la procedura per compilare e pubblicare un'immagine nel registro Docker, ad esempio vedere Esercitazione: Compilare e distribuire immagini del contenitore nel cloud con Attività del Registro Azure Container.

    Nota

    Se si usa SQL come provider di archiviazione, assicurarsi di usare un'immagine di Funzioni di Azure versione 3.3.1 o successiva.

    FROM mcr.microsoft.com/azure-functions/node:3.3.1
    ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    FUNCTIONS_V2_COMPATIBILITY_MODE=true
    COPY . /home/site/wwwroot
    RUN cd /home/site/wwwroot
    
  • Notificare al provider di risorse che si sta creando un'app per la logica in Kubernetes.

  • Nel modello di distribuzione puntare al registro Docker e all'immagine del contenitore in cui si prevede di effettuare la distribuzione. App per la logica di Azure a tenant singolo usa queste informazioni per ottenere l'immagine del contenitore dal registro Docker.

  • Includere un piano di servizio app con la distribuzione. Per altre informazioni, vedere Includere il piano di servizio app con la distribuzione.

Nel modello di Azure Resource Manager includere i valori seguenti:

Articolo Proprietà JSON Descrizione
Ubicazione location Assicurarsi di usare la stessa posizione della risorsa (area di Azure) della posizione personalizzata e dell'ambiente Kubernetes. Le posizioni delle risorse per l'app per la logica, la posizione personalizzata e l'ambiente Kubernetes devono essere tutte uguali.

Nota: questo valore non corrisponde al nome per la posizione personalizzata.

Tipo di app kind Tipo di app che si sta distribuendo in modo che la piattaforma Azure possa identificare l'app. Per App per la logica di Azure, queste informazioni sono simili all'esempio seguente: kubernetes,functionapp,workflowapp,container
Posizione estesa extendedLocation Questo oggetto richiede il valore "name" del percorso personalizzato per l'ambiente Kubernetes e deve avere il valore "type" impostato su "CustomLocation".
Nome contenitore linuxFxVersion Il nome del contenitore, formattato come segue: DOCKER\|<container-name>
ID risorsa del piano di hosting serverFarmId ID risorsa del piano di servizio app associato, formattato come segue:

"/subscriptions/{subscriptionID}/resourceGroups/{groupName}/providers/Microsoft.Web/serverfarms/{appServicePlanName}"

Stringa di connessione di archiviazione AzureWebJobsStorage Stringa di connessione per l'account di archiviazione

Importante: quando si implementa in un contenitore Docker, è necessario specificare la stringa di connessione per l'account di archiviazione nel modello di Resource Manager. Per scenari o ambienti di produzione, assicurarsi di proteggere tali segreti e informazioni riservate, ad esempio usando un insieme di credenziali delle chiavi.

Per fare riferimento all'immagine del registro Docker e del contenitore, includere questi valori nel modello:

Articolo Proprietà JSON Descrizione
URL del server del registro Docker DOCKER_REGISTRY_SERVER_URL URL del server del registro Docker
Server del registro Docker DOCKER_REGISTRY_SERVER_USERNAME Nome utente per accedere al server del registro Docker
Password del server del registro Docker DOCKER_REGISTRY_SERVER_PASSWORD Password per accedere al server del registro Docker

Modello ARM

L'esempio seguente descrive una definizione di risorsa di App per la logica abilitata per Azure Arc di esempio che è possibile usare nel modello di Resource Manager. Per altre informazioni, vedere la documentazione del formato di modello Microsoft.Web/sites (modello di Resource Manager).

{
   "type": "Microsoft.Web/sites",
   "apiVersion": "2020-12-01",
   "name": "[parameters('name')]",
   "location": "[parameters('location')]",
   "kind": " kubernetes,functionapp,workflowapp,container",
   "extendedLocation": {
      "name": "[parameters('customLocationId')]",
      "type": "CustomLocation"
    },
   "properties": {
      "name": "[parameters('name')]",
      "clientAffinityEnabled": false,
      "serverFarmId": "<hosting-plan-ID>",
      "siteConfig": {
         "appSettings": [
            {
               "name": "FUNCTIONS_EXTENSION_VERSION",
               "value": "~3"
            },
            {
               "name": "FUNCTIONS_WORKER_RUNTIME",
               "value": "dotnet"
            },
            {
               "name": "AzureWebJobsStorage",
               "value": "<storage-connection-string>"
            },
            {
               "name": "AzureFunctionsJobHost__extensionBundle__id",
               "value": "Microsoft.Azure.Functions.ExtensionBundle.Workflows"
            },
            {
               "name": "AzureFunctionsJobHost__extensionBundle__version",
               "value": "[1.*, 2.0.0)"
            },
            {
               "name": "APP_KIND",
               "value": "workflowapp"
            }, 
            {
               "name": "DOCKER_REGISTRY_SERVER_URL",
               "value": "<docker-registry-server-URL>"
            },
            { 
               "name": "DOCKER_REGISTRY_SERVER_USERNAME",
               "value": "<docker-registry-server-username>"
            },
            {
               "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
               "value": "<docker-registry-server-password>"
            }
         ],
         "use32BitWorkerProcess": "[parameters('use32BitWorkerProcess')]",
         "linuxFxVersion": "DOCKER|<container-name>"
      }
   }
}

Nota

In precedenza, il valore predefinito dell'impostazione FUNCTIONS_WORKER_RUNTIME era node. A questo punto, dotnet è il valore predefinito per tutte le app per la logica Standard nuove ed esistenti, anche per le app con un valore diverso. Questa modifica non dovrebbe influire sul runtime del flusso di lavoro e tutto dovrebbe funzionare allo stesso modo di prima. Per altre informazioni, vedere l'impostazione dell'app FUNCTIONS_WORKER_RUNTIME.

Includere il piano di servizio app con la distribuzione

Sia che si abbia una distribuzione standard o un contenitore, è necessario includere un piano di servizio app con la distribuzione. Anche se questo piano diventa meno rilevante con un ambiente Kubernetes, le distribuzioni standard e contenitore richiedono comunque un piano di servizio app.

Anche se altre opzioni di creazione gestiscono in genere il provisioning della risorsa di Azure per questo piano, se le distribuzioni usano modelli "infrastruttura come codice", è necessario creare in modo esplicito la risorsa di Azure per il piano. La risorsa del piano di hosting non cambia, ma solo le informazioni sku.

Nel modello di Azure Resource Manager includere i valori seguenti:

Articolo Proprietà JSON Descrizione
Ubicazione location Assicurarsi di usare la stessa posizione della risorsa (area di Azure) della posizione personalizzata e dell'ambiente Kubernetes. Le posizioni delle risorse per l'app per la logica, la posizione personalizzata e l'ambiente Kubernetes devono essere tutte uguali.

Nota: questo valore non corrisponde al nome per la posizione personalizzata.

Tipologia kind Tipo di piano di servizio app da distribuire, che deve essere kubernetes,linux
Posizione estesa extendedLocation Questo oggetto richiede il valore "name" del percorso personalizzato per l'ambiente Kubernetes e deve avere il valore "type" impostato su "CustomLocation".
Nome piano di hosting name Nome del piano di servizio app
Livello di piano sku: tier Livello del piano di servizio app, K1
Nome piano sku: name Nome del piano di servizio app, Kubernetes

Modello ARM

L'esempio seguente descrive una definizione di risorsa del piano di servizio app di esempio che è possibile usare con la distribuzione dell'app. Per altre informazioni, vedere la documentazione del formato di modello Microsoft.Web/serverfarms (modello di Resource Manager).

{
   "type": "Microsoft.Web/serverfarms",
   "apiVersion": "2020-12-01",
   "location": "<location>",
   "name": "<hosting-plan-name>",
   "kind": "kubernetes,linux",
   "extendedLocation": {
      "name": "[parameters('customLocationId')]",
      "type": "CustomLocation"
   },
   "sku": {
      "tier": "Kubernetes",
      "name": "K1", 
      "capacity": 1
   },
   "properties": {
      "kubeEnvironmentProfile": {
         "id": "[parameters('kubeEnvironmentId')]"
      }
   }
}

Modificare il comportamento di ridimensionamento predefinito

App per la logica abilitato per Azure Arc gestisce automaticamente il ridimensionamento per le app per la logica in base al numero di processi nella coda di archiviazione back-end. Tuttavia, è possibile modificare il comportamento di ridimensionamento predefinito.

In un'app per la logica la definizione del flusso di lavoro specifica la sequenza di azioni da eseguire. Ogni volta che viene attivata un'esecuzione del flusso di lavoro, il runtime di App per la logica di Azure crea un processo per ogni tipo di azione nella definizione del flusso di lavoro. Il runtime organizza quindi questi processi in un Sequencer di processi. Questo sequencer orchestra l'esecuzione dei processi per la definizione del flusso di lavoro, ma il motore di orchestrazione dei processi di App per la logica di Azure sottostante esegue ogni processo.

Per i flussi di lavoro con stato, il motore di orchestrazione dei processi usa i messaggi della coda di archiviazione per pianificare i processi nei sequencer di processo. Dietro le quinte, i dispatcher di processi (o istanze del ruolo di lavoro dispatcher) monitorano queste code di processi. Il motore di orchestrazione usa un numero minimo e massimo predefinito di istanze di lavoro per monitorare le code dei processi. Per i flussi di lavoro senza stato, il motore di orchestrazione mantiene completamente in memoria gli stati di azione.

Per modificare il comportamento di ridimensionamento predefinito, specificare diversi numeri minimi e massimi di istanze di lavoro che monitorano le code dei processi.

Prerequisiti per la modifica del ridimensionamento

Nel cluster Kubernetes abilitato per Azure Arc l'estensione del bundle del servizio app creata in precedenza deve avere la proprietà keda.enabled impostata su true. Per altre informazioni, vedere i prerequisiti generali.

Modificare la soglia di ridimensionamento

In App per la logica abilitato per Azure Arc la lunghezza della coda di processi attiva un evento di scalabilità e imposta una soglia per la frequenza con cui si verifica la scalabilità per l'app per la logica. È possibile modificare la lunghezza della coda, con il valore predefinito impostato su 20 processi. Per ridimensionare meno frequentemente, aumentare la lunghezza della coda. Per ridimensionare più frequentemente, ridurre la lunghezza della coda. Questo processo potrebbe richiedere alcuni tentativi ed errori.

Per modificare la lunghezza della coda, nel file host.json di livello radice del progetto dell'app per la logica impostare la proprietà Runtime.ScaleMonitor.KEDA.TargetQueueLength, ad esempio:

"extensions": {
   "workflow": {
      "settings": {
         "Runtime.ScaleMonitor.KEDA.TargetQueueLength": "10"
      }
   }
}

Modificare la velocità effettiva massima

In una risorsa dell'app per la logica esistente è possibile modificare il numero massimo di istanze del ruolo di lavoro, con il valore predefinito impostato su 2. Questo valore controlla il limite massimo per il numero di istanze del ruolo di lavoro che possono monitorare le code dei processi.

Per modificare questo valore massimo, usare l'interfaccia della riga di comando di Azure (solo app per la logica) e il portale di Azure.

Interfaccia della riga di comando di Azure

Per creare una nuova app per la logica, eseguire il comando az logicapp create, con i parametri seguenti:

az logicapp create --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --storage-account MyStorageAccount --custom-location MyCustomLocation 
   [--plan MyHostingPlan] [--min-worker-count 1] [--max-worker-count 4]

Per configurare il numero massimo di istanze, usare il parametro --settings:

az logicapp config appsettings set --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription
   --settings "K8SE_APP_MAX_INSTANCE_COUNT=10"

Azure portal

Nelle impostazioni dell'app per la logica basata su tenant singolo aggiungere o modificare il valore dell'impostazione K8SE_APP_MAX_INSTANCE_COUNT seguendo questa procedura:

  1. Nel portale di Azure trovare e aprire l'app per la logica basata su tenant singolo.

  2. Nel menu dell'app per la logica, in Impostazioni, selezionare Configurazione.

  3. Nel riquadro Configurazione, in Impostazioni applicazione aggiungere una nuova impostazione dell'applicazione o modificare il valore esistente, se già aggiunto.

    1. Selezionare Nuova impostazione applicazione e aggiungere l'impostazione K8SE_APP_MAX_INSTANCE_COUNT con il valore massimo desiderato.

    2. Modificare il valore esistente per l'impostazione K8SE_APP_MAX_INSTANCE_COUNT.

  4. Al termine, salvare le modifiche.

Modificare la velocità effettiva minima

In una risorsa dell'app per la logica esistente è possibile modificare il numero minimo di istanze del ruolo di lavoro, con il valore predefinito impostato su 1. Questo valore controlla il limite minimo per il numero di istanze del ruolo di lavoro che possono monitorare le code dei processi. Per la disponibilità elevata o le prestazioni, aumentare questo valore.

Per modificare questo valore minimo, usare l'interfaccia della riga di comando di Azure o il portale di Azure.

Interfaccia della riga di comando di Azure

Per una risorsa dell'app per la logica esistente, eseguire il comando az logicapp scale con i parametri seguenti:

az logicapp scale --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --instance-count 5 

Per creare una nuova app per la logica, eseguire il comando az logicapp create, con i parametri seguenti:

az logicapp create --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --storage-account MyStorageAccount --custom-location MyCustomLocation 
   [--plan MyHostingPlan] [--min-worker-count 2] [--max-worker-count 4]

Azure portal

Nelle impostazioni dell'app per la logica basata su tenant singolo modificare il valore della proprietà Scale Out seguendo questa procedura:

  1. Nel portale di Azure trovare e aprire l'app per la logica basata su tenant singolo.

  2. Nel menu dell'app per la logica, in Impostazioni, selezionare Scale Out.

  3. Nel riquadro Scale Out trascinare il dispositivo di scorrimento delle istanze minime sul valore desiderato.

  4. Al termine, salvare le modifiche.

Risoluzione dei problemi

Per ottenere altre informazioni sulle app per la logica distribuite, provare le opzioni seguenti:

Accedere alle impostazioni e alla configurazione dell'app

Per accedere alle impostazioni dell'app, eseguire il comando az logicapp config appsettings con i parametri seguenti:

az logicapp config appsettings list --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Per configurare un'impostazione dell'app, eseguire il comando az logicapp config appsettings set con i parametri seguenti. Assicurarsi di usare il parametro --settings con il nome e il valore dell'impostazione.

az logicapp config appsettings set --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription 
   --settings "MySetting=1"

Per eliminare un'impostazione dell'app, eseguire il comando az logicapp config appsettings delete con i parametri seguenti. Assicurarsi di usare il parametro --setting-names con il nome dell'impostazione da eliminare.

az logicapp config appsettings delete --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription
   --setting-names MySetting

Visualizzare le proprietà dell'app per la logica

Per visualizzare le informazioni e le proprietà dell'app, eseguire il comando az logicapp show con i parametri seguenti:

az logicapp show --name MyLogicAppName 
   --resource-group MyResourceGroupName --subscription MySubscription

Monitorare l'attività del flusso di lavoro

Per visualizzare l'attività per un flusso di lavoro nell'app per la logica, seguire questa procedura:

  1. Nel portale di Azure trovare e aprire l'app per la logica distribuita.

  2. Nel menu dell'app per la logica selezionare Flussi di lavoro e quindi selezionare il flusso di lavoro.

  3. Nel menu del flusso di lavoro selezionare Monitoraggio.

Raccogliere i log

Per ottenere i dati registrati sull'app per la logica, abilitare Application Insights nell'app per la logica, se non è già abilitato.

Passaggi successivi