Partager via


Utiliser Dev Proxy avec les fonctions Azure JavaScript

Si vous générez Azure Functions à l’aide de JavaScript et que vous souhaitez utiliser le proxy de développement, suivez les instructions générales relatives à l’utilisation du proxy de développement avec des applications Node.js.

Important

Pour empêcher Azure Functions d’échouer au démarrage, démarrez le proxy de développement sans l’inscrire en tant que proxy système à l’aide de l’option --as-system-proxy false ou en configurant asSystemProxy sur false le devproxyrc.json fichier. Si vous inscrivez le proxy de développement en tant que proxy système, Azure Functions échoue au démarrage avec un message d’erreur similaire à :

Grpc.Core.RpcException: 'Status(StatusCode="Internal", Detail="Error starting gRPC call. HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while unable to establish HTTP/2 connection.", DebugException="System.Net.Http.HttpRequestException: Requesting HTTP version 2.0 with version policy RequestVersionOrHigher while unable to establish HTTP/2 connection.")'

Pour pouvoir facilement basculer entre l’utilisation du proxy de développement dans le développement et ne pas l’utiliser en production, vous pouvez configurer le proxy dans votre application Azure Functions à l’aide de variables d’environnement. Modifiez le local.settings.json fichier pour inclure la variable d’environnement HTTPS_PROXY . En outre, désactivez la validation de certificat pour permettre à l’application Azure Functions d’approuver le certificat auto-signé utilisé par le proxy de développement.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "HTTPS_PROXY": "http://127.0.0.1:8000",
    "NODE_TLS_REJECT_UNAUTHORIZED": "0"
  }
}

Dans votre application Azure Functions, utilisez l’objet process.env pour lire les variables d’environnement et configurer le proxy pour vos requêtes HTTP.

import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';

export async function MyFnHttpTrigger(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const options = process.env.HTTPS_PROXY ? { agent: new HttpsProxyAgent(process.env.HTTPS_PROXY) } : {};
    const resp = await fetch('https://jsonplaceholder.typicode.com/posts', options);
    const data = await resp.json();
    return {
      status: 200,
      jsonBody: data
    };
};

app.http('MyFnHttpTrigger', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: MyFnHttpTrigger
});