Bagikan melalui


Gunakan Dev Proxy dengan Fungsi Azure JavaScript

Sekilas
Tujuan: Menggunakan Dev Proxy dengan JS Azure Functions
Waktu: 10 menit
Plugin: Berbagai
Prasyarat:Menyiapkan Dev Proxy, Azure Functions Core Tools

Jika Anda membuat Azure Functions menggunakan JavaScript dan ingin menggunakan Dev Proxy, ikuti panduan umum untuk menggunakan Dev Proxy dengan aplikasi Node.js.

Penting

Untuk mencegah Azure Functions gagal saat memulai, mulai Proksi Dev tanpa mendaftarkannya sebagai proksi sistem baik dengan menggunakan opsi --as-system-proxy false atau dengan mengonfigurasi asSystemProxy ke false dalam file devproxyrc.json. Jika Anda mendaftarkan Proksi Dev sebagai proksi sistem, Azure Functions gagal saat memulai dengan pesan kesalahan yang mirip dengan:

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.")'

Agar dapat dengan mudah beralih antara menggunakan Dev Proxy dalam pengembangan dan tidak menggunakannya dalam produksi, Anda dapat mengonfigurasi proksi paling baik di aplikasi Azure Functions Anda menggunakan variabel lingkungan. local.settings.json Ubah file untuk menyertakan HTTPS_PROXY variabel lingkungan. Selain itu, nonaktifkan validasi sertifikat untuk memungkinkan aplikasi Azure Functions mempercayai sertifikat yang ditandatangani sendiri yang digunakan oleh Dev Proxy.

File: local.settings.json

{
  "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"
  }
}

Di aplikasi Azure Functions Anda, gunakan process.env objek untuk membaca variabel lingkungan dan mengonfigurasi proksi untuk permintaan HTTP Anda.

File: src/functions/MyFnHttpTrigger.ts

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
});

Lihat juga