Condividi tramite


AzureFunction@1 - Richiamare l'attività Funzione di Azure v1

Usare questa attività in un processo senza agente di una pipeline di versione per richiamare una funzione attivata tramite HTTP in un'app per le funzioni e analizzare la risposta. L'app per le funzioni deve essere creata e ospitata in Funzioni di Azure.

Sintassi

# Invoke Azure Function v1
# Invoke an Azure Function.
- task: AzureFunction@1
  inputs:
    function: # string. Required. Azure function URL. 
    key: # string. Required. Function key. 
    method: 'POST' # 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'PATCH'. Required. Method. Default: POST.
    #headers: # string. Headers. 
    #queryParameters: # string. Query parameters. 
    #body: # string. Optional. Use when method != GET && method != HEAD. Body. 
  # Advanced
    waitForCompletion: 'false' # 'true' | 'false'. Required. Completion event. Default: false.
    #successCriteria: # string. Optional. Use when waitForCompletion = false. Success criteria.

Ingressi dati

function - URL della funzione di Azure
string. Obbligatorio.

URL della funzione di Azure da richiamare. Esempio: https://azurefunctionapp.azurewebsites.net/api/HttpTriggerJS1.


key - tasto funzione
string. Obbligatorio.

Funzione o chiave host usata per accedere e richiamare la funzione. Per proteggere la chiave, usare una variabile della pipeline privata per archiviare la chiave della funzione. Esempio: $(myFunctionKey). myFunctionKey è una variabile privata a livello di ambiente con un valore come chiave privata.


metodo method -
string. Obbligatorio. Valori consentiti: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, PATCH. Valore predefinito: POST

Metodo HTTP con cui verrà richiamata la funzione.


headers - intestazioni
string. Valore predefinito: {\n"Content-Type":"application/json", \n"PlanUrl": "$(system.CollectionUri)", \n"ProjectId": "$(system.TeamProjectId)", \n"HubName": "$(system.HostType)", \n"PlanId": "$(system.PlanId)", \n"JobId": "$(system.JobId)", \n"TimelineId": "$(system.TimelineId)", \n"TaskInstanceId": "$(system.TaskInstanceId)", \n"AuthToken": "$(system.AccessToken)"\n}

Intestazione in formato JSON da collegare alla richiesta inviata alla funzione.


queryParameters - parametri di query
string.

Query stringa da aggiungere all'URL della funzione. Non deve iniziare con ? o &.


body - corpo
string. Opzionale. Usare quando method != GET && method != HEAD.

Corpo della richiesta in formato JSON.


waitForCompletion - evento Completion
string. Obbligatorio. Valori consentiti: true (callback), false (ApiResponse). Valore predefinito: false

Come l'attività segnala il completamento.

  • false : di risposta API: la funzione restituisce i criteri di esito positivo e riuscito restituisce true.
  • true - Callback - la funzione esegue un callback per aggiornare il record della sequenza temporale.

successCriteria - criteri di esito positivo
string. Opzionale. Usare quando waitForCompletion = false.

Criteri per un'attività riuscita. Per impostazione predefinita, l'attività restituisce 200 OK stato quando ha esito positivo.

Esempio: per la risposta {"status" : "successful"}, l'espressione può essere eq(root['status'], 'successful'). Altre informazioni su specifica delle condizioni.


Opzioni di controllo attività

Tutte le attività hanno opzioni di controllo oltre ai relativi input di attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.

Variabili di output

Nessuno.

Osservazioni:

Usare questa attività in un processo senza agente di una pipeline di versione per richiamare una funzione attivata tramite HTTP in un'app per le funzioni creata e ospitata in Funzioni di Azure e analizzare la risposta.

Dove deve essere completato un segnale di attività quando callback viene scelto come evento di completamento?

Per segnalare il completamento, la funzione deve inviare i dati di completamento POST all'endpoint REST delle pipeline seguente.

{planUri}/{projectId}/_apis/distributedtask/hubs/{hubName}/plans/{planId}/events?api-version=2.0-preview.1

**Request Body**
{ "name": "TaskCompleted", "taskId": "taskInstanceId", "jobId": "jobId", "result": "succeeded" }

Per informazioni specifiche, vedere questa semplice applicazione cmdline. Inoltre, è disponibile una libreria helper C# per abilitare la registrazione in tempo reale e gestire lo stato delle attività per le attività senza agente. Ulteriori informazioni

Perché l'attività ha esito negativo entro 1 minuto quando il timeout è più lungo?

Se la funzione viene eseguita per più di 1 minuto, usare l'evento di callback completamento. L'opzione Di completamento della risposta API è supportata per le richieste completate entro 60 secondi.

Esempi

Esempio di una funzione di Azure che usa la modalità di completamento del callback

#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    var url = req.Headers["PlanUrl"];
    var projectId = req.Headers["ProjectId"];
    var hubName = req.Headers["HubName"];
    var planId = req.Headers["PlanId"];
    var jobId = req.Headers["JobId"];
    var timelineId = req.Headers["TimelineId"];
    var taskInstanceId = req.Headers["TaskinstanceId"];
    var authToken = req.Headers["AuthToken"];

    var callbackUrl = $"{url}/{projectId}/_apis/distributedtask/hubs/{hubName}/plans/{planId}/events?api-version=2.0-preview.1";
  
    var successBody = JsonConvert.SerializeObject(new {
        name = "TaskCompleted",
        taskId = taskInstanceId.ToString(),
        jobId = jobId.ToString(),
        result = "succeeded"
    });

    // the following call does not block
    Task.Run(() =>
    {
        Thread.Sleep(70000); // simulate long running work
        PostEvent(callbackUrl, successBody, authToken, log);
    });
   
    return new OkObjectResult("Long-running job successfully scheduled!");
}
    
public static void PostEvent(String callbackUrl, String body, String authToken, ILogger log)
{
    try
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken);
        var requestContent = new StringContent(body, Encoding.UTF8, "application/json");
        var response = client.PostAsync(new Uri(callbackUrl), requestContent).Result;
        var responseContent = response.Content.ReadAsStringAsync().Result;
        log.LogInformation(response.StatusCode.ToString());
        log.LogInformation(responseContent);
    }
    catch (Exception ex)
    {
        log.LogError(ex.Message);
    }
}

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Viene eseguito in Server, ServerGate
richieste Nessuno
funzionalità di Questa attività non soddisfa alcuna richiesta di attività successive nel processo.
restrizioni dei comandi Qualunque
variabili impostabili Qualunque
Versione dell'agente Tutte le versioni dell'agente supportate.
Categoria attività Utilità

Vedere anche