Menyambungkan Azure Functions ke Azure Cosmos DB menggunakan Visual Studio Code

Azure Functions memungkinkan Anda tersambung ke layanan dan sumber daya lainnya agar berfungsi tanpa harus menulis kode integrasi Anda sendiri. Pengikatanini, 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 Cosmos DB ke fungsi yang Anda buat di artikel mulai cepat sebelumnya. Pengikatan output yang Anda tambahkan ke fungsi ini menulis data dari permintaan HTTP ke dokumen JSON yang disimpan dalam kontainer Azure Cosmos DB.

Sebelum memulai, Anda harus menyelesaikan mulai cepat: Membuat fungsi C# di Azure menggunakan Visual Studio Code. Jika Anda sudah membersihkan sumber daya di akhir artikel tersebut, lakukan lagi langkah-langkahnya untuk membuat ulang aplikasi fungsi dan sumber daya terkait di Azure.

Sebelum memulai, Anda harus menyelesaikan mulai cepat: Membuat fungsi JavaScript di Azure menggunakan Visual Studio Code. Jika Anda sudah membersihkan sumber daya di akhir artikel tersebut, lakukan lagi langkah-langkahnya untuk membuat ulang aplikasi fungsi dan sumber daya terkait di Azure.

Catatan

Artikel ini saat ini hanya mendukung Node.js v3 untuk Functions.

Sebelum memulai, Anda harus menyelesaikan mulai cepat: Membuat fungsi Python di Azure menggunakan Visual Studio Code. Jika Anda sudah membersihkan sumber daya di akhir artikel tersebut, lakukan lagi langkah-langkahnya untuk membuat ulang aplikasi fungsi dan sumber daya terkait di Azure.

Mengkonfigurasikan lingkungan Anda

Sebelum memulai, pastikan untuk menginstal ekstensi Database Azure untuk Visual Studio Code.

Membuat akun Azure Cosmos DB

Sekarang, Anda membuat akun Azure Cosmos DB sebagai jenis akun tanpa server. Mode berbasis konsumsi ini menjadikan Azure Cosmos DB pilihan yang tepat untuk beban kerja tanpa server.

  1. Di Visual Studio Code, pilih Tampilkan>Palet Perintah... lalu di pencarian palet perintah untuk Azure Databases: Create Server...

  2. Berikan informasi berikut pada permintaan:

    Prompt Pilihan
    Pilih Server Azure Database Pilih Core (NoSQL) untuk membuat database dokumen yang bisa Anda kueri dengan menggunakan sintaks SQL atau Salinan Kueri (Pratinjau) yang mengonversi perintah bahasa alami menjadi kueri. Pelajari selengkapnya tentang Azure Cosmos DB.
    Nama akun Masukkan nama unik untuk mengidentifikasi akun Azure Cosmos DB Anda. Nama akun hanya dapat menggunakan huruf kecil, angka, dan tanda hubung (-), dan panjangnya harus antara 3 dan 31 karakter.
    Pilih model kapasitas Pilih Tanpa server untuk membuat akun dalam mode tanpa server.
    Pilih grup sumber daya untuk sumber daya baru Pilih grup sumber daya tempat Anda membuat aplikasi fungsi di artikel sebelumnya.
    Pilih lokasi untuk sumber daya baru Pilih lokasi geografis untuk menghosting akun Azure Cosmos DB Anda. Gunakan lokasi yang paling dekat dengan Anda atau pengguna Anda untuk mendapatkan akses tercepat ke data.

    Setelah akun baru Anda tersedia, pesan akan ditampilkan di area notifikasi.

Membuat database dan kontainer Azure Cosmos DB

  1. Pilih ikon Azure di bilah Aktivitas, perluas Sumber Daya>Azure Cosmos DB, klik kanan (Ctrl+pilih di macOS) akun Anda, dan pilih Buat database....

  2. Berikan informasi berikut pada permintaan:

    Prompt Pilihan
    Nama database Ketik my-database.
    Masukkan ID untuk koleksi Anda Ketik my-container.
    Masukkan kunci partisi untuk koleksi tersebut Ketik /id sebagai kunci partisi.
  3. Pilih OK untuk membuat kontainer dan database.

Memperbarui pengaturan aplikasi fungsi Anda

Di artikel mulai cepat sebelumnya, Anda membuat aplikasi fungsi di Azure. Dalam artikel ini, Anda memperbarui aplikasi untuk menulis dokumen JSON ke kontainer Azure Cosmos DB yang telah Anda buat. Untuk menyambungkan ke akun Azure Cosmos DB, Anda harus menambahkan string koneksi ke pengaturan aplikasi Anda. Kemudian unduh pengaturan baru ke file local.settings.json sehingga Anda dapat terhubung ke akun Azure Cosmos DB Anda saat berjalan secara lokal.

  1. Di Visual Studio Code, klik kanan (Ctrl+pilih di macOS) pada akun Azure Cosmos DB baru Anda, dan pilih Salin String Koneksi ion.

    Menyalin string koneksi Azure Cosmos DB

  2. Tekan F1 untuk membuka palet perintah, lalu cari dan jalankan perintah Azure Functions: Add New Setting....

  3. Pilih aplikasi fungsi yang Anda buat di artikel sebelumnya. Berikan informasi berikut pada permintaan:

    Prompt Pilihan
    Masukkan nama pengaturan aplikasi baru Ketik CosmosDbConnectionSetting.
    Masukkan nilai untuk "CosmosDb Koneksi ionSetting" Tempelkan string koneksi akun Azure Cosmos DB yang Anda salin. Anda juga dapat mengonfigurasi identitas Microsoft Entra sebagai alternatif.

    Tindakan ini akan membuat pengaturan aplikasi bernama koneksi CosmosDbConnectionSetting pada aplikasi fungsi Anda di Azure. Sekarang, Anda dapat mengunduh pengaturan ini ke file local.settings.json.

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

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

Maka akan terunduh semua pengaturan dari Azure ke proyek lokal Anda, termasuk pengaturan string koneksi baru. Sebagian besar pengaturan yang diunduh tidak digunakan saat berjalan secara lokal.

Mendaftarkan ekstensi pengikatan

Karena Anda menggunakan pengikatan output Azure Cosmos DB, Anda harus menginstal ekstensi pengikatan yang sesuai sebelum Anda menjalankan proyek.

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 Cosmos DB ke proyek Anda.

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.CosmosDB

Proyek Anda telah dikonfigurasi untuk menggunakan bundel ekstensi, yang secara otomatis menginstal 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",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  },
  "concurrency": {
    "dynamicConcurrencyEnabled": true,
    "snapshotPersistenceEnabled": true
  },
  "extensions": {
    "cosmosDB": {
      "connectionMode": "Gateway"
    }
  }
}

Proyek Anda telah dikonfigurasi untuk menggunakan bundel ekstensi, yang secara otomatis menginstal 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": "[3.*, 4.0.0)"
  } 
}

Sekarang, Anda dapat menambahkan pengikatan output Azure Cosmos DB ke proyek Anda.

Menambahkan pengikatan output

Dalam proyek pustaka kelas C#, pengikatan didefinisikan sebagai atribut pengikatan pada metode fungsi.

Buka file proyek HttpExample.cs dan tambahkan kelas berikut:

public class MultiResponse
{
    [CosmosDBOutput("my-database", "my-container",
        Connection = "CosmosDbConnectionSetting", CreateIfNotExists = true)]
    public MyDocument Document { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}
public class MyDocument {
    public string id { get; set; }
    public string message { get; set; }
}

Kelas MyDocument mendefinisikan objek yang akan ditulis ke database. String koneksi untuk akun penyimpanan diatur oleh properti Connection. Dalam hal ini, Anda dapat mengabaikan Connection karena Anda sudah menggunakan akun penyimpanan default.

Kelas MultiResponse memungkinkan Anda menulis ke koleksi yang ditentukan di Azure Cosmos DB dan memunculkan pesan berhasil HTTP. Karena Anda perlu memunculkan objek MultiResponse, Anda juga perlu memperbarui tanda tangan metode.

Atribut tertentu menentukan nama kontainer dan nama database induknya. String koneksi untuk akun Azure Cosmos DB Anda diatur oleh CosmosDbConnectionSetting.

Atribut pengikatan didefinisikan langsung dalam kode fungsi Anda. Konfigurasi output Azure Cosmos DB menjelaskan bidang yang diperlukan untuk pengikatan output Azure Cosmos DB.

Untuk skenario ini MultiResponse , Anda perlu menambahkan pengikatan extraOutputs output ke fungsi .

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  extraOutputs: [sendToCosmosDb],
  handler: async (request, context) => {

Tambahkan properti berikut ke konfigurasi pengikatan:

const sendToCosmosDb = output.cosmosDB({
  databaseName: 'my-database',
  containerName: 'my-container',
  createIfNotExists: false,
  connection: 'CosmosDBConnectionString',
});

Atribut pengikatan didefinisikan langsung dalam file function_app.py . Anda menggunakan cosmos_db_output dekorator untuk menambahkan pengikatan output Azure Cosmos DB:

@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", 
    container_name="my-container", connection="CosmosDbConnectionSetting")

Dalam kode ini, arg_name mengidentifikasi parameter pengikatan yang dirujuk dalam kode Anda, database_name dan container_name merupakan nama database dan koleksi tempat pengikatan menulis, dan connection merupakan nama pengaturan aplikasi yang berisi string koneksi untuk akun Azure Cosmos DB, yang ada dalam CosmosDbConnectionSetting pengaturan dalam file local.settings.json.

Tambahkan kode yang menggunakan pengikatan output

Ganti metode Eksekusi yang ada dengan kode berikut:

[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
    FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("HttpExample");
    logger.LogInformation("C# HTTP trigger function processed a request.");

    var message = "Welcome to Azure Functions!";

    var response = req.CreateResponse(HttpStatusCode.OK);
    response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    response.WriteString(message);

    // Return a response to both HTTP trigger and Azure Cosmos DB output binding.
    return new MultiResponse()
    {
         Document = new MyDocument
        {
            id = System.Guid.NewGuid().ToString(),
            message = message
        },
        HttpResponse = response
    };
}

Tambahkan kode yang menggunakan extraInputs objek pengikatan output pada context untuk mengirim dokumen JSON ke fungsi pengikatan output bernama, sendToCosmosDb. Tambahkan kode ini sebelum pernyataan return.

context.extraOutputs.set(sendToCosmosDb, {
  // create a random ID
  id:
    new Date().toISOString() + Math.random().toString().substring(2, 10),
  name: name,
});

Pada titik ini, fungsi Anda akan terlihat sebagai berikut:

const { app, output } = require('@azure/functions');

const sendToCosmosDb = output.cosmosDB({
  databaseName: 'my-database',
  containerName: 'my-container',
  createIfNotExists: false,
  connection: 'CosmosDBConnectionString',
});

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

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

      if (!name) {
        return { status: 404, body: 'Missing required data' };
      }

      // Output to Database
      context.extraOutputs.set(sendToCosmosDb, {
        // create a random ID
        id:
          new Date().toISOString() + Math.random().toString().substring(2, 10),
        name: name,
      });

      const responseMessage = name
        ? 'Hello, ' +
          name +
          '. This HTTP triggered function executed successfully.'
        : 'This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.';

      // Return to HTTP client
      return { body: responseMessage };
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

Sekarang kode ini memunculkan objek MultiResponse yang berisi dokumen dan respons HTTP.

Perbarui HttpExample\function_app.py agar sesuai dengan kode berikut. outputDocument Tambahkan parameter ke definisi fungsi dan outputDocument.set() di if name: bawah pernyataan:

import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", container_name="my-container", connection="CosmosDbConnectionSetting")
def test_function(req: func.HttpRequest, msg: func.Out[func.QueueMessage],
    outputDocument: func.Out[func.Document]) -> func.HttpResponse:
     logging.info('Python HTTP trigger function processed a request.')
     logging.info('Python Cosmos DB trigger function processed a request.')
     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:
        outputDocument.set(func.Document.from_dict({"id": 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
                )

Dokumen {"id": "name"} dibuat dalam kumpulan database yang ditentukan dalam pengikatan.

Jalankan 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. Jika Anda belum menginstal Core Tools secara lokal, Anda akan diminta untuk menginstalnya saat pertama kali menjalankan proyek Anda.

  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.

    Cuplikan layar output fungsi lokal Visual Studio Code.

    Jika Anda belum menginstal Core Tools, pilih Instal untuk menginstal Core Tools saat diminta untuk melakukannya.
    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. Pada bagian Fungsi, luaskan Proyek Lokal>Fungsi. Klik kanan (Windows) atau Ctrl - klik (macOS) fungsi HttpExample dan pilih Jalankan Fungsi Sekarang....

    Cuplikan layar eksekusi fungsi dari Visual Studio Code sekarang.

  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. Dengan menjalankan Core Tools, buka area Azure: Functions. Pada bagian Fungsi, luaskan Proyek Lokal>Fungsi. Klik kanan (klik Ctrl di Mac) fungsi HttpExample dan pilih Jalankan Fungsi Sekarang....

    Jalankan fungsi sekarang dari Visual Studio Code

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

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

Memverifikasi bahwa dokumen JSON telah dibuat

  1. Di portal Microsoft Azure, kembali ke akun Azure Cosmos DB Anda dan pilih Data Explorer.

  2. Luaskan database dan kontainer Anda, dan pilih Item untuk mencantumkan dokumen yang dibuat di kontainer Anda.

  3. Verifikasi bahwa dokumen JSON baru telah dibuat oleh pengikatan output.

    Memverifikasi bahwa dokumen baru telah dibuat di kontainer Azure Cosmos DB

Menyebarkan ulang dan memverifikasi 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 periksa dokumen yang dibuat di kontainer Azure Cosmos DB Anda untuk memverifikasi bahwa pengikatan output kembali menghasilkan dokumen JSON baru.

Membersihkan sumber daya

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

Anda perlu 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.

    Cuplikan layar pemilihan grup sumber daya yang akan dihapus dari halaman aplikasi fungsi.

  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. 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 dokumen JSON ke kontainer Azure Cosmos DB. Sekarang Anda bisa mempelajari selengkapnya tentang mengembangkan Azure Functions menggunakan Visual Studio Code: