Bagikan melalui


Mulai cepat: Membangun API web yang dapat diskalakan menggunakan Azure Functions

Dalam panduan kilat ini, Anda menggunakan alat baris perintah dari Azure Developer untuk membangun API web yang dapat diskalakan dengan endpoint fungsi yang merespons permintaan HTTP. Setelah menguji kode secara lokal, Anda menyebarkannya ke aplikasi fungsi tanpa server baru yang Anda buat berjalan dalam paket Konsumsi Flex di Azure Functions.

Sumber proyek menggunakan Azure Developer CLI (azd) untuk menyederhanakan penyebaran kode Anda ke Azure. Penyebaran ini mengikuti praktik terbaik saat ini untuk penyebaran Azure Functions yang aman dan dapat diskalakan.

Secara bawaan, paket Konsumsi Flex mengikuti model penagihan bayar untuk apa yang Anda gunakan, yang berarti menyelesaikan panduan ini dikenakan biaya kecil berupa beberapa sen USD atau kurang di akun Azure Anda.

Prerequisites

  • Kit Pengembang Java 17
    • Jika Anda menggunakan versi Java lain yang didukung, Anda harus memperbarui file pom.xml proyek.
    • Variabel JAVA_HOME lingkungan harus diatur ke lokasi penginstalan versi Java Development Kit (JDK) yang benar.
  • Apache Maven 3.8.x
  • Alat uji HTTP yang aman untuk mengirim permintaan dengan payload JSON ke titik akhir fungsi Anda. Artikel ini menggunakan curl.

Menginisialisasi proyek

azd init Gunakan perintah untuk membuat proyek kode Azure Functions lokal dari templat.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini azd init di folder kosong:

    azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnet
    

    Perintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder saat ini. Bendera -e menetapkan nama untuk lingkungan saat ini. Di azd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.

  2. Jalankan perintah ini untuk menavigasi ke http folder aplikasi:

    cd http
    
  3. Buat file bernama local.settings.json di http folder yang berisi data JSON ini:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
        }
    }
    

    File ini diperlukan saat berjalan secara lokal.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini azd init di folder kosong:

    azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-java 
    

    Perintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder saat ini. Bendera -e menetapkan nama untuk lingkungan saat ini. Di azd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.

  2. Jalankan perintah ini untuk menavigasi ke http folder aplikasi:

    cd http
    
  3. Buat file bernama local.settings.json di http folder yang berisi data JSON ini:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java"
        }
    }
    

    File ini diperlukan saat berjalan secara lokal.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini azd init di folder kosong:

    azd init --template functions-quickstart-javascript-azd -e httpendpoint-js
    

    Perintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder akar. Bendera -e menetapkan nama untuk lingkungan saat ini. Di azd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.

  2. Buat file bernama local.settings.json di folder akar yang berisi data JSON ini:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    File ini diperlukan saat berjalan secara lokal.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini azd init di folder kosong:

    azd init --template functions-quickstart-powershell-azd -e httpendpoint-ps
    

    Perintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder akar. Bendera -e menetapkan nama untuk lingkungan saat ini. Di azd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Ini juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.

  2. Jalankan perintah ini untuk menavigasi ke src folder aplikasi:

    cd src
    
  3. Buat file bernama local.settings.json di src folder yang berisi data JSON ini:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2"
        }
    }
    

    File ini diperlukan saat berjalan secara lokal.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini azd init di folder kosong:

    azd init --template functions-quickstart-typescript-azd -e httpendpoint-ts
    

    Perintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder akar. Bendera -e menetapkan nama untuk lingkungan saat ini. Di azd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Nama lingkungan juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.

  2. Buat file bernama local.settings.json di folder akar yang berisi data JSON ini:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    File ini diperlukan saat berjalan secara lokal.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini azd init di folder kosong:

    azd init --template functions-quickstart-python-http-azd -e httpendpoint-py
    

    Perintah ini menarik file proyek dari repositori templat dan menginisialisasi proyek di folder akar. Bendera -e menetapkan nama untuk lingkungan saat ini. Di azd, lingkungan mempertahankan konteks penyebaran unik untuk aplikasi Anda, dan Anda dapat menentukan lebih dari satu. Nama lingkungan juga digunakan dalam nama grup sumber daya yang Anda buat di Azure.

  2. Buat file bernama local.settings.json di folder akar yang berisi data JSON ini:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python"
        }
    }
    

    File ini diperlukan saat berjalan secara lokal.

Membuat dan mengaktifkan lingkungan virtual

Di folder akar, jalankan perintah ini untuk membuat dan mengaktifkan lingkungan virtual bernama .venv:

python3 -m venv .venv
source .venv/bin/activate

Jika Python tidak menginstal paket venv pada distribusi Linux Anda, jalankan perintah berikut:

sudo apt-get install python3-venv

Jalankan di lingkungan lokal Anda

  1. Jalankan perintah ini dari folder aplikasi Anda di terminal atau prompt perintah:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    Saat host Functions dimulai di folder proyek lokal Anda, host tersebut menulis titik akhir URL fungsi yang dipicu HTTP Anda ke output terminal.

    Note

    Karena otorisasi kunci akses tidak diberlakukan saat berjalan secara lokal, URL fungsi yang dikembalikan tidak menyertakan nilai kunci akses dan Anda tidak memerlukannya untuk memanggil fungsi Anda.

  2. Di peramban Anda, buka httpget alamat akhir, yang akan terlihat seperti URL ini:

    http://localhost:7071/api/httpget

  3. Dari terminal baru atau jendela prompt perintah, jalankan perintah ini curl untuk mengirim permintaan POST dengan payload JSON ke httppost titik akhir:

    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.json
    
    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"
    

    Perintah ini membaca data payload JSON dari testdata.json file proyek. Anda dapat menemukan contoh kedua permintaan HTTP dalam test.http file proyek.

  4. Setelah selesai, tekan Ctrl+C di jendela terminal untuk menghentikan func.exe proses host.

  1. Jalankan deactivate untuk mematikan lingkungan virtual.

Meninjau kode (opsional)

Anda dapat meninjau kode yang menentukan dua titik akhir fungsi pemicu HTTP:

       [Function("httpget")]
       public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
         HttpRequest req,
         string name)
       {
           var returnValue = string.IsNullOrEmpty(name)
               ? "Hello, World."
               : $"Hello, {name}.";

           _logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");

           return new OkObjectResult(returnValue);
       }
@FunctionName("httpget")
public HttpResponseMessage run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET},
            authLevel = AuthorizationLevel.FUNCTION)
            HttpRequestMessage<Optional<String>> request,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");

    return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || await request.text() || 'world';

        return { body: `Hello, ${name}!` };
    }
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || await request.text() || 'world';

    return { body: `Hello, ${name}!` };
};

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: httpGetFunction
});

File ini function.json mendefinisikan httpget fungsi:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get"
      ],
      "route": "httpget"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

File ini run.ps1 mengimplementasikan kode fungsi:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters
$name = $Request.Query.name

$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
    name = req.params.get("name", "World")

    logging.info(f"Processing GET request. Name: {name}")

    return func.HttpResponse(f"Hello, {name}!")

Anda dapat meninjau proyek templat lengkap di sini.

Anda dapat meninjau proyek templat lengkap di sini.

Anda dapat meninjau proyek templat lengkap di sini.

Anda dapat meninjau proyek templat lengkap di sini.

Anda dapat meninjau proyek templat lengkap di sini.

Anda dapat meninjau proyek templat lengkap di sini.

Setelah Anda memverifikasi fungsi Anda secara lokal, saatnya untuk menerbitkannya ke Azure.

Sebarkan ke Azure

Proyek ini dikonfigurasi untuk menggunakan azd up perintah untuk menyebarkan proyek ini ke aplikasi fungsi baru dalam paket Konsumsi Flex di Azure.

Tip

Proyek ini mencakup sekumpulan file Bicep (dalam infra folder) yang azd menggunakan untuk membuat penyebaran aman ke rencana konsumsi Flex yang mengikuti praktik terbaik.

  1. Jalankan perintah ini untuk membuat azd sumber daya Azure yang diperlukan di Azure dan menyebarkan proyek kode Anda ke aplikasi fungsi baru:

    azd up
    

    Folder akar berisi file definisi yang azure.yaml diperlukan oleh azd.

    Jika Anda belum masuk, Anda diminta untuk mengautentikasi dengan akun Azure Anda.

  2. Saat diminta, berikan parameter penyebaran yang diperlukan ini:

    Parameter Description
    langganan Azure Langganan tempat sumber daya Anda dibuat.
    Lokasi Azure Wilayah Azure untuk membuat grup sumber daya yang berisi sumber daya Azure baru. Hanya wilayah yang saat ini mendukung paket Konsumsi Flex yang ditampilkan.
    vnetEnabled Pilih False. Saat diatur ke True, penyebaran membuat aplikasi fungsi Anda di jaringan virtual yang baru.

    Perintah azd up menggunakan respons Anda terhadap petunjuk ini bersama dengan file konfigurasi Bicep untuk menyelesaikan tugas-tugas penyebaran berikut:

    • Buat dan konfigurasikan sumber daya Azure yang diperlukan ini (setara dengan azd provision):

      • Paket Konsumsi Flex dan aplikasi fungsi
      • Azure Storage (wajib) dan Application Insights (disarankan)
      • Mengakses kebijakan dan peran untuk akun Anda
      • Koneksi layanan ke layanan menggunakan identitas terkelola (bukan string koneksi tersimpan)
      • (Opsi) Jaringan virtual untuk menjalankan aplikasi fungsi dan sumber daya Azure lainnya dengan aman
    • Paketkan dan sebarkan kode Anda ke kontainer penyebaran (setara dengan azd deploy). Aplikasi kemudian dimulai dan berjalan dalam paket yang disebarkan.

    Setelah perintah berhasil diselesaikan, Anda akan melihat tautan ke sumber daya yang Anda buat.

Menggunakan fungsi pada Azure

Anda sekarang dapat memanggil titik akhir fungsi Anda di Azure dengan membuat permintaan HTTP ke URL mereka dengan menggunakan alat pengujian HTTP Anda atau dari browser (untuk permintaan GET). Saat fungsi Anda berjalan di Azure, otorisasi kunci akses diberlakukan, dan Anda harus menyediakan kunci akses fungsi dengan permintaan Anda.

Anda dapat menggunakan Core Tools untuk mendapatkan titik akhir URL fungsi Anda yang berjalan di Azure.

  1. Di terminal lokal atau prompt perintah Anda, jalankan perintah ini untuk mendapatkan nilai titik akhir URL:

    SET APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp list-functions $APP_NAME --show-keys
    
    $APP_NAME = azd env get-value AZURE_FUNCTION_NAME
    func azure functionapp list-functions $APP_NAME --show-keys
    

    Perintah azd env get-value mendapatkan nama aplikasi fungsi Anda dari lingkungan lokal. Saat Anda menggunakan opsi --show-keys dengan func azure functionapp list-functions, URL Pemanggilan: yang diperoleh untuk setiap titik akhir mencakup kunci akses tingkat fungsi.

  2. Seperti sebelumnya, gunakan alat uji HTTP Anda untuk memvalidasi URL ini di aplikasi fungsi Anda yang berjalan di Azure.

Menyebarkan ulang kode Anda

Jalankan azd up perintah sebanyak yang Anda butuhkan untuk menyediakan sumber daya Azure Anda dan menyebarkan pembaruan kode ke aplikasi fungsi Anda.

Note

File kode yang disebarkan selalu ditimpa oleh paket penyebaran terbaru.

Respons awal Anda terhadap azd perintah dan variabel lingkungan apa pun yang dihasilkan oleh azd disimpan secara lokal di lingkungan bernama Anda. azd env get-values Gunakan perintah untuk meninjau semua variabel di lingkungan yang Anda gunakan saat membuat sumber daya Azure.

Membersihkan sumber daya

Setelah selesai bekerja dengan aplikasi fungsi dan sumber daya terkait, gunakan perintah ini untuk menghapus aplikasi fungsi dan sumber daya terkait dari Azure dan hindari menimbulkan biaya lebih lanjut:

azd down --no-prompt

Note

Opsi ini --no-prompt menginstruksikan azd untuk menghapus grup sumber daya Anda tanpa konfirmasi dari Anda.

Perintah ini tidak memengaruhi proyek kode lokal Anda.