Menyambungkan fungsi Java Anda ke Azure Storage

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 memperlihatkan kepada Anda cara mengintegrasikan fungsi yang Anda buat di artikel mulai cepat sebelumnya dengan antrean Azure Storage. Pengikatan output yang Anda tambahkan ke fungsi ini menulis data dari permintaan HTTP ke pesan dalam antrean.

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

Prasyarat

Sebelum Anda memulai artikel ini, selesaikan langkah-langkah di bagian 1 dari mulai cepat Java.

Unduh pengaturan aplikasi fungsi

Anda telah membuat aplikasi fungsi di Azure, bersama dengan akun Penyimpanan 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.

Dari akar proyek, jalankan perintah Azure Functions Core Tools berikut ini untuk mengunduh pengaturan ke local.settings.js, mengganti <APP_NAME> dengan nama aplikasi fungsi Anda dari artikel sebelumnya:

func azure functionapp fetch-app-settings <APP_NAME>

Anda mungkin perlu masuk ke akun Azure Anda.

Penting

Perintah ini menimpa pengaturan yang ada dengan nilai dari aplikasi fungsi Anda di Azure.

Karena berisi rahasia, local.settings.jsfile tidak pernah dipublikasikan, dan itu harus dikecualikan dari kontrol sumber.

Anda memerlukan AzureWebJobsStorage nilai, yaitu string koneksi akun Penyimpanan. Anda menggunakan sambungan ini untuk memverifikasi bahwa pengikatan output berfungsi seperti yang diharapkan.

Aktifkan bundel ekstensi

Cara termudah untuk menginstal ekstensi pengikatan adalah dengan mengaktifkan bundel ekstensi. Saat Anda mengaktifkan bundel, sekumpulan paket ekstensi yang telah ditentukan telah diinstal secara otomatis.

Untuk mengaktifkan bundel ekstensi, buka file host.json dan perbarui kontennya agar sesuai dengan kode berikut:

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

Anda sekarang dapat menambahkan pengikatan output Azure Storage ke proyek Anda.

Tambahkan pengikatan data output

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 tipe OutputBinding<T>, yang mewakili kumpulan string. String ini ditulis sebagai pesan ke output yang mengikat saat fungsi selesai. Dalam hal ini, output adalah antrean penyimpanan `bernama outqueue. String koneksi untuk akun Storage diatur sesuai metode connection. Anda melewati pengaturan aplikasi yang berisi string koneksi akun Penyimpanan, daripada meneruskan string koneksi itu sendiri.

Definisi metode run sekarang harus terlihat seperti contoh berikut:

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

Menambahkan kode yang menggunakan pengikatan output

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 harus terlihat seperti contoh berikut:

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

Anda sekarang siap untuk mencoba output baru yang mengikat secara lokal.

Jalankan fungsi secara lokal

Seperti sebelumnya, gunakan perintah berikut untuk menyusun proyek dan memulai runtime bahasa umum Functions secara lokal:

mvn clean package 
mvn azure-functions:run

Catatan

Karena Anda mengaktifkan bundel ekstensi di host.json, ekstensi pengikatan Azure Storage diunduh dan dipasang untuk Anda selama pengaktifan, bersama dengan ekstensi pengikatan Microsoft lainnya.

Seperti sebelumnya, pemicu fungsi dari baris perintah menggunakan cURL pada jendela terminal baru:

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java --data AzureFunctions

Kali ini, pengikatan output juga membuat antrean bernama outqueue di akun Azure Storage Anda dan menambahkan pesan dengan untai (karakter) yang sama ini.

Selanjutnya, Anda menggunakan Azure CLI untuk menampilkan antrean baru dan memverifikasi bahwa pesan ditambahkan. Anda juga dapat melihat antrean dengan menggunakan Microsoft Azure Storage Explorer atau di portal Microsoft Azure.

Mengatur koneksi akun Penyimpanan

Buka file local.settings.json dan salin nilai AzureWebJobsStorage, yang merupakan string koneksi akun Penyimpanan. Atur variabel lingkungan AZURE_STORAGE_CONNECTION_STRING ke string koneksi dengan menggunakan perintah Bash ini:

AZURE_STORAGE_CONNECTION_STRING="<STORAGE_CONNECTION_STRING>"

Saat Anda mengatur string koneksi di variabel lingkungan AZURE_STORAGE_CONNECTION_STRING, Anda dapat mengakses akun Penyimpanan tanpa harus memberikan autentikasi setiap kali.

Kueri antrean Penyimpanan

Anda dapat menggunakan perintah az storage queue list untuk melihat antrean Penyimpanan di akun Anda, seperti dalam contoh berikut:

az storage queue list --output tsv

Output dari perintah ini mencakup antrean bernama outqueue, yaitu antrean yang dibuat ketika fungsi berjalan.

Selanjutnya, gunakan perintah az storage message peek untuk melihat pesan dalam antrean ini, seperti dalam contoh ini:

echo `echo $(az storage message peek --queue-name outqueue -o tsv --query '[].{Message:content}') | base64 --decode`

String yang dikembalikan harus sama dengan pesan yang Anda kirim untuk menguji fungsi.

Catatan

Contoh sebelumnya mendekode string yang dikembalikan dari base64. Ini karena pengikatan penyimpanan Antrean menulis dan membaca dari Azure Storage sebagai base64 string.

Menyebarkan ulang proyek

Untuk memperbarui aplikasi yang telah diterbitkan, jalankan lagi perintah berikut:

mvn azure-functions:deploy

Sekali lagi, Anda dapat menggunakan cURL untuk menguji fungsi yang disebarkan. Seperti sebelumnya, berikan nilai AzureFunctions dalam isi permintaan POS ke URL, seperti dalam contoh ini:

curl -w "\n" https://fabrikam-functions-20190929094703749.azurewebsites.net/api/HttpTrigger-Java?code=zYRohsTwBlZ68YF.... --data AzureFunctions

Anda dapat memeriksa pesan antrean Azure Storage lagi untuk memverifikasi bahwa pengikatan output menghasilkan pesan baru dalam antrean, seperti yang diharapkan.

Membersihkan sumber daya

Panduan mulai cepat yang lain dalam koleksi ini dibangun berdasarkan mulai cepat ini. Jika Anda berencana untuk melanjutkan dengan panduan mulai cepat berikutnya atau dengan tutorial, jangan membersihkan sumber daya yang dibuat dalam panduan mulai cepat ini. Jika Anda tidak berencana untuk melanjutkan, gunakan perintah berikut untuk menghapus semua sumber daya yang dibuat di panduan mulai cepat ini:

az group delete --name myResourceGroup

Pilih y saat diminta.

Langkah berikutnya

Anda telah memperbarui fungsi pemicu HTTP untuk menulis data ke antrean Storage. Untuk mempelajari selengkapnya tentang mengembangkan Azure Functions with Java, lihat panduan pengembang Azure Functions Java dan pemicu dan pengikatan Azure Functions. Contoh proyek Azure Functions lengkap di Java, lihat sampel Java Functions.

Selanjutnya, Anda harus mengaktifkan Application Insights yang memantau aplikasi fungsi Anda: