Menyambungkan Azure Functions ke Azure Storage menggunakan Visual Studio Code

Azure Functions memungkinkan Anda tersambung ke layanan dan sumber daya lainnya agar berfungsi tanpa harus menulis kode integrasi Anda sendiri. Pengikatan ini, yang mewakili input dan output dinyatakan dalam definisi fungsi. Data dari pengikatan diberikan ke fungsi sebagai parameter. Pemicu adalah jenis pengikatan input khusus. Meskipun fungsi hanya memiliki satu pemicu, fungsi dapat memiliki beberapa pengikatan input dan output. Untuk mempelajari lebih lanjut, lihat pemicu dan pengikatan Azure Functions.

Artikel ini memberikan informasi tentang cara menggunakan Visual Studio Code untuk menyambungkan Azure Storage ke fungsi yang Anda buat di artikel mulai cepat sebelumnya. Pengikatan output yang Anda tambahkan ke fungsi ini menulis data dari permintaan ke pesan dalam antrean penyimpanan Antrean Azure.

Sebagian besar pengikatan memerlukan string koneksi tersimpan yang digunakan Azure Functions untuk mengakses layanan yang terikat. Agar lebih mudah, gunakan akun Azure Storage yang Anda buat dengan aplikasi fungsi Anda. Koneksi ke akun ini sudah disimpan dalam pengaturan aplikasi bernama AzureWebJobsStorage.

Konfigurasikan lingkungan lokal Anda

Sebelum memulai, Anda harus memiliki persyaratan berikut:

Artikel ini mengasumsikan bahwa Anda sudah masuk ke langganan Azure Anda dari Visual Studio Code. Anda dapat masuk dengan menjalankan Azure: Sign In dari palet perintah.

Unduh pengaturan aplikasi fungsi

Di artikel mulai cepat sebelumnya, Anda membuat aplikasi fungsi di Azure bersama dengan akun Azure Storage yang diperlukan. String koneksi untuk akun ini disimpan dengan aman di pengaturan aplikasi di Azure. Dalam artikel ini, Anda menulis pesan ke antrean Azure Storage di akun yang sama. Untuk terhubung ke akun Azure Storage saat menjalankan fungsi secara lokal, Anda harus mengunduh pengaturan aplikasi ke file local.settings.json.

  1. Tekan F1 untuk membuka palet perintah, lalu cari dan jalankan perintah Azure Functions: Download Remote Settings.....

  2. Pilih aplikasi fungsi yang Anda buat di artikel sebelumnya. Pilih Ya untuk semua untuk mengganti pengaturan lokal yang ada.

    Penting

    Karena berisi rahasia, file local.settings.json tidak pernah dipublikasikan dan dikecualikan dari kontrol sumber.

  3. Salin nilai AzureWebJobsStorage, yang merupakan kunci untuk nilai string koneksi akun penyimpanan. Anda menggunakan sambungan ini untuk memverifikasi bahwa pengikatan output berfungsi seperti yang diharapkan.

Mendaftarkan ekstensi pengikatan

Karena Anda menggunakan pengikatan output penyimpanan Antrean, Anda harus menginstal ekstensi pengikatan Azure Storage sebelum menjalankan proyek.

Proyek Anda telah dikonfigurasi untuk menggunakan bundel ekstensi, yang secara otomatis memasang set paket ekstensi yang telah ditentukan sebelumnya.

Penggunaan bundel ekstensi diaktifkan di file host.json pada akar proyek, yang muncul sebagai berikut:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  } 
}

Sekarang, Anda dapat menambahkan pengikatan output penyimpanan ke proyek Anda.

Kecuali untuk pemicu HTTP dan timer, pengikatan diimplementasikan sebagai paket ekstensi. Jalankan perintah dotnet add package berikut di jendela Terminal untuk menambahkan paket ekstensi Azure Storage ke proyek Anda.

dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage 

Sekarang, Anda dapat menambahkan pengikatan output penyimpanan ke proyek Anda.

Menambahkan pengikatan output

Di Azure Functions, setiap jenis pengikatan memerlukan direction, type, dan name yang unik untuk didefinisikan dalam file function.json. Cara Anda menentukan atribut ini tergantung pada bahasa pemrogram aplikasi fungsi Anda.

Atribut pengikatan didefinisikan langsung dalam file function.json. Tergantung pada jenis pengikatan, properti tambahan mungkin diperlukan. Konfigurasi output antrean menjelaskan bidang yang diperlukan untuk pengikatan antrean Azure Storage. Ekstensi ini memudahkan Anda untuk menambahkan pengikatan ke file function.json.

Untuk membuat pengikatan, klik kanan (Ctrl+klik di macOS) file function.json di folder HttpTrigger Anda dan pilih Tambahkan pengikatan... . Ikuti perintah untuk menentukan properti pengikatan berikut untuk pengikatan baru:

Perintah Nilai Deskripsi
Pilih arah pengikatan out Pengikatannya adalah pengikatan output.
Pilih pengikatan dengan arah... Azure Queue Storage Pengikatannya adalah pengikatan antrean Azure Storage.
Nama yang digunakan untuk mengidentifikasi pengikatan ini dalam kode Anda msg Nama yang mengidentifikasi parameter pengikatan yang direferensikan dalam kode Anda.
Antrean tempat yang pesannya akan dikirimi outqueue Nama antrean yang ditulis oleh pengikatan. Saat queueName tidak ada, pengikatan membuatnya pada penggunaan pertama kali.
Pilih pengaturan dari "local.setting.json" AzureWebJobsStorage Nama pengaturan aplikasi yang berisi string koneksi untuk akun Storage. Pengaturan AzureWebJobsStorage berisi string koneksi untuk akun Storage yang Anda buat dengan aplikasi fungsi.

Pengikatan ditambahkan ke array bindings di function.json Anda, yang akan terlihat seperti berikut ini:

{
  "type": "queue",
  "direction": "out",
  "name": "msg",
  "queueName": "outqueue",
  "connection": "AzureWebJobsStorage"
}

Dalam proyek C#, pengikatan didefinisikan sebagai atribut pengikatan pada metode fungsi. Definisi spesifik bergantung pada apakah aplikasi Anda berjalan dalam proses (pustaka kelas C # ) atau dalam proses yang terisolasi.

Buka file proyek HttpExample.cs dan tambahkan parameter berikut ke definisi metode Run:

[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,

Parameter msg adalah jenis ICollector<T>, yang mewakili kumpulan pesan yang ditulis ke pengikatan data output saat fungsi selesai. Dalam hal ini, output adalah antrean penyimpanan `bernama outqueue. StorageAccountAttribute mengatur string koneksi pada akun penyimpanan. Atribut ini menunjukkan pengaturan yang berisi string koneksi pada akun penyimpanan dan dapat diterapkan di tingkat kelas, metode, atau parameter. Dalam hal ini, Anda dapat mengabaikan StorageAccountAttribute karena Anda sudah menggunakan akun penyimpanan default.

Definisi metode Run sekarang akan terlihat seperti kode berikut:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)

Dalam proyek Java, pengikatan didefinisikan sebagai anotasi pengikatan pada metode fungsi. Daftar file function.json kemudian dibuat secara otomatis berdasarkan anotasi ini.

Telusuri ke lokasi kode fungsi Anda di src/main/java, buka file proyek Function.java, dan tambahkan parameter berikut ke definisi metode run:

@QueueOutput(name = "msg", queueName = "outqueue", 
connection = "AzureWebJobsStorage") OutputBinding<String> msg,

Parameter msg adalah jenis OutputBinding<T>, yang mewakili kumpulan string yang ditulis sebagai pesan ke pengikatan output ketika fungsi selesai. Dalam hal ini, output adalah antrean penyimpanan `bernama outqueue. String koneksi untuk akun Storage diatur sesuai metode connection. Daripada string koneksi itu sendiri, Anda melewati pengaturan aplikasi yang berisi string koneksi akun Storage.

Definisi metode run sekarang akan terlihat seperti contoh berikut:

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {

Tambahkan kode yang menggunakan pengikatan output

Setelah pengikatan ditentukan, Anda dapat menggunakan name dari pengikatan untuk mengaksesnya sebagai atribut dalam tanda tangan fungsi. Dengan menggunakan pengikatan output, Anda tidak perlu menggunakan kode SDK Azure Storage untuk mengautentikasi, mendapatkan referensi antrean, atau menulis data. Runtime Functions dan pengikatan output antrean akan melakukan tugas-tugas tersebut untuk Anda.

Tambahkan kode yang menggunakan objek pengikatan output msg pada context.bindings untuk membuat pesan antrean. Tambahkan kode ini sebelum pernyataan context.res.

// Add a message to the Storage queue,
// which is the name passed to the function.
context.bindings.msg = (req.query.name || req.body.name);

Pada titik ini, fungsi Anda akan ditampilkan sebagai berikut:

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    if (req.query.name || (req.body && req.body.name)) {
        // Add a message to the Storage queue,
        // which is the name passed to the function.
        context.bindings.msg = (req.query.name || req.body.name);
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};

Tambahkan kode yang menggunakan objek pengikatan output msg pada context.bindings untuk membuat pesan antrean. Tambahkan kode ini sebelum pernyataan context.res.

context.bindings.msg = name;

Pada titik ini, fungsi Anda akan ditampilkan sebagai berikut:

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.name));

    if (name) {
        // Add a message to the storage queue, 
        // which is the name passed to the function.
        context.bindings.msg = name; 
        // Send a "hello" response.
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};

export default httpTrigger;

Tambahkan kode yang menggunakan Push-OutputBinding cmdlet untuk menulis teks ke antrean menggunakan pengikatan output msg. Tambahkan kode ini sebelum Anda mengatur status OK dalam pernyataan if.

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

Pada titik ini, fungsi Anda akan ditampilkan sebagai berikut:

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 or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

if ($name) {
    # Write the $name value to the queue, 
    # which is the name passed to the function.
    $outputMsg = $name
    Push-OutputBinding -name msg -Value $outputMsg

    $status = [HttpStatusCode]::OK
    $body = "Hello $name"
}
else {
    $status = [HttpStatusCode]::BadRequest
    $body = "Please pass a name on the query string or in the request body."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = $status
    Body = $body
})

Perbarui HttpExample\__init__.py agar sesuai dengan kode berikut, harap tambahkan parameter msg ke definisi fungsi dan msg.set(name) di bawah pernyataan if name::

import logging

import azure.functions as func


def main(req: func.HttpRequest, msg: func.Out[func.QueueMessage]) -> str:

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        msg.set(name)
        return func.HttpResponse(f"Hello {name}!")
    else:
        return func.HttpResponse(
            "Please pass a name on the query string or in the request body",
            status_code=400
        )

Parameter msg adalah instans dari azure.functions.Out class. Metode set menuliskan pesan string pada antrean. Dalam hal ini, pesannya merupakan nama yang diteruskan pada fungsi dalam string kueri URL.

Tambahkan kode yang menggunakan objek pengikatan output msg untuk membuat pesan antrean. Tambahkan kode ini sebelum metode kembali.

if (!string.IsNullOrEmpty(name))
{
    // Add a message to the output collection.
    msg.Add(name);
}

Pada titik ini, fungsi Anda akan ditampilkan sebagai berikut:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    if (!string.IsNullOrEmpty(name))
    {
        // Add a message to the output collection.
        msg.Add(name);
    }
    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Sekarang, Anda dapat menggunakan parameter msg baru untuk menulis ke pengikatan output dari kode fungsi Anda. Tambahkan garis kode berikut sebelum respons keberhasilan untuk menambahkan nilai name ke pengikatan output msg.

msg.setValue(name);

Saat menggunakan pengikatan output, Anda tidak perlu menggunakan kode SDK Azure Storage untuk mengautentikasi, mendapatkan referensi antrean, atau menulis data. Runtime Functions dan pengikatan output antrean akan melakukan tugas-tugas tersebut untuk Anda.

Metode run Anda sekarang akan terlihat seperti contoh berikut:

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

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

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
        .body("Please pass a name on the query string or in the request body").build();
    } else {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

Perbarui tes

Karena arketipe juga membuat kumpulan pengujian, Anda perlu memperbarui pengujian ini untuk menangani parameter msg baru di tanda tangan metode run.

Telusuri lokasi kode pengujian Anda di bawah src/test/java, buka file proyek Function.java, dan ganti baris kode di bawah //Invoke dengan kode berikut.

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

Menjalankan fungsi secara lokal

Visual Studio Code terintegrasi dengan alat Azure Functions Core untuk memungkinkan Anda menjalankan proyek ini di komputer pengembangan lokal sebelum Anda menerbitkan ke Azure.

  1. Untuk memanggil fungsi, tekan F5 untuk memulai proyek aplikasi fungsi. Panel Terminal menampilkan output dari Core Tools. Aplikasi Anda dimulai di panel Terminal. Anda dapat melihat titik akhir URL dari fungsi yang dipicu HTTP berjalan secara lokal.

    Screenshot of the Local function Visual Studio Code output.

    Jika Anda mengalami masalah saat menjalankan fungsi di Windows, pastikan bahwa terminal default untuk Visual Studio Code tidak diatur ke WSL Bash.

  2. Saat Core Tools sedang berjalan, buka area Azure: Functions. Di bawah Functions, perluas Proyek Lokal>Functions. Klik kanan (Windows) atau Ctrl -klik (macOS) fungsi HttpExample dan pilih Jalankan Fungsi Sekarang... .

    Screenshot of execute function now from Visual Studio Code.

  3. Di Masukkan isi permintaan, tekan Enter untuk mengirim pesan permintaan ke fungsi Anda.

  4. Saat fungsi dijalankan secara lokal dan mengembalikan respons, pemberitahuan akan dimunculkan dalam Visual Studio Code. Informasi tentang eksekusi fungsi ditampilkan di panel Terminal.

  5. Tekan Ctrl + C untuk menghentikan Azure Functions Core Tools dan putuskan sambungan debugger.

Jalankan fungsi secara lokal

  1. Seperti pada artikel sebelumnya, tekan F5 untuk memulai proyek aplikasi fungsi dan Core Tools.

  2. Saat Core Tools sedang berjalan, buka area Azure: Functions. Di bawah Functions, perluas Proyek Lokal>Functions. Klik kanan (klik Ctrl di Mac) fungsi HttpExample dan pilih Jalankan Fungsi Sekarang....

    Screenshot of executing function from Visual Studio Code.

  3. Di Masukkan isi permintaan Anda akan melihat nilai isi pesan permintaan { "name": "Azure" }. Tekan Enter untuk mengirim pesan permintaan ini ke fungsi Anda.

  4. Setelah respons dikembalikan, tekan Ctrl + C untuk menghentikan Core Tools.

Karena Anda menggunakan string koneksi penyimpanan, fungsi Anda terhubung ke akun penyimpanan Azure saat berjalan secara lokal. Antrean baru bernama outqueue dibuat di akun penyimpanan Anda oleh runtime bahasa umum Azure Functions saat pengikatan output pertama kali digunakan. Anda akan menggunakan Azure Storage Explorer untuk memverifikasi bahwa antrean dibuat bersama dengan pesan baru.

Sambungkan Storage Explorer ke akun Anda

Lewati bagian ini jika Anda telah menginstal Azure Storage Explorer dan menyambungkannya ke akun Azure Anda.

  1. Jalankan alat Azure Storage Explorer, pilih ikon sambungkan di sebelah kiri, dan pilih Tambahkan akun.

    Screenshot of how to add an Azure account to Microsoft Azure Storage Explorer.

  2. Dalam dialog Sambungkan, pilih Tambahkan akun Azure, pilih lingkungan Azure Anda, dan pilih Masuk....

    Screenshot of the sign-in to your Azure account window.

Setelah berhasil masuk ke akun, Anda akan melihat semua langganan Azure yang terkait dengan akun Anda.

Periksa antrean output

  1. Di Visual Studio Code, tekan kunci F1 untuk membuka palet perintah, lalu cari dan jalankan perintah Azure Storage: Open in Storage Explorer dan pilih nama akun Azure Storage Anda. Akun penyimpanan Anda terbuka di Azure Storage Explorer.

  2. Perluas node Antrean, lalu pilih antrean yang dinamai outqueue.

    Antrean berisi pesan bahwa pengikatan output antrean dibuat saat Anda menjalankan fungsi yang dipicu HTTP. Jika Anda memanggil fungsi dengan nilai default name dari Azure, pesan antreannya adalah Nama yang diteruskan ke fungsi: Azure.

    Screenshot of the queue message shown in Azure Storage Explorer.

  3. Jalankan fungsi lagi, kirim permintaan lain, dan Anda akan melihat pesan baru muncul dalam antrean.

Sekarang, saatnya untuk menerbitkan ulang aplikasi fungsi yang diperbarui ke Azure.

Luncurkan kembali dan verifikasi aplikasi yang diperbarui

  1. Di Visual Studio Code, tekan F1 untuk membuka palet perintah. Di palet perintah, cari dan pilih Azure Functions: Deploy to function app....

  2. Pilih aplikasi fungsi yang Anda buat di artikel pertama. Karena Anda melakukan penyebaran kembali proyek Anda ke aplikasi yang sama, pilih Sebarkan untuk menghilangkan peringatan tentang mengganti file.

  3. Setelah penyebaran selesai, Anda dapat kembali menggunakan fitur Jalankan Fungsi Sekarang... untuk memicu fungsi di Azure.

  4. Sekali lagi lihat pesan dalam antrean penyimpanan untuk memverifikasi bahwa pengikatan output kembali menghasilkan pesan baru dalam antrean.

Membersihkan sumber daya

Di Azure, sumber daya merujuk ke aplikasi fungsi, fungsi, akun penyimpanan, dan sebagainya. Mereka dikelompokkan ke dalam grup sumber daya, dan Anda dapat menghapus semuanya dalam grup dengan menghapus grup.

Anda telah membuat sumber daya untuk menyelesaikan mulai cepat ini. Anda akan ditagihkan untuk sumber daya ini, tergantung pada status akun dan harga layanan Anda. Jika Anda tidak memerlukan sumber daya lagi, berikut cara menghapusnya:

  1. Di Visual Studio Code, tekan F1 untuk membuka palet perintah. Di palet perintah, cari dan pilih Azure: Open in portal.

  2. Pilih aplikasi fungsi Anda dan tekan Enter. Halaman aplikasi fungsi terbuka di portal Azure.

  3. Di tab Ringkasan, pilih tautan bernama di samping Grup sumber daya.

    Screenshot of select the resource group to delete from the function app page.

  4. Di halaman Grup sumber daya, tinjau daftar sumber daya yang disertakan, dan pastikan sumber daya tersebut adalah sumber daya yang ingin Anda hapus.

  5. Di halaman Grup sumber daya, tinjau daftar sumber daya yang disertakan, dan verifikasi bahwa sumber daya tersebut adalah sumber daya yang ingin Anda hapus.

  6. Pilih Hapus grup sumber daya, dan ikuti instruksinya.

    Penghapusan mungkin perlu waktu beberapa menit. Setelah selesai, pemberitahuan akan muncul selama beberapa detik. Anda juga dapat memilih ikon bel di bagian atas halaman untuk melihat pemberitahuan.

Langkah berikutnya

Anda telah memperbarui fungsi pemicu HTTP Anda untuk menulis data ke antrean Azure Storage. Sekarang Anda bisa mempelajari selengkapnya tentang mengembangkan Azure Functions menggunakan Visual Studio Code: