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à |