Bagikan melalui


Koneksi Azure Functions ke Azure SQL Database 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 memperlihatkan kepada Anda cara menggunakan Visual Studio Code untuk menyambungkan Azure SQL Database ke fungsi yang Anda buat di artikel mulai cepat sebelumnya. Pengikatan output yang Anda tambahkan ke fungsi ini menulis data dari permintaan HTTP ke tabel di Azure SQL Database.

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.

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.

Detail selengkapnya tentang pengaturan untuk pengikatan dan pemicu Azure SQL untuk Azure Functions tersedia dalam dokumentasi Azure Functions.

Membuat Azure SQL Database Anda

  1. Ikuti mulai cepat pembuatan Azure SQL Database untuk membuat Azure SQL Database tanpa server. Database dapat kosong atau dibuat dari himpunan data sampel AdventureWorksLT.

  2. Berikan informasi berikut pada permintaan:

    Prompt Pilihan
    Grup sumber daya Pilih grup sumber daya tempat Anda membuat aplikasi fungsi di artikel sebelumnya.
    Nama database Memasuki mySampleDatabase.
    Nama Server Masukkan nama yang unik untuk server Anda. Kami tidak dapat memberikan nama server yang tepat untuk digunakan karena nama server harus unik secara global untuk semua server di Azure, tidak hanya unik dalam langganan.
    Metode autentikasi Pilih autentikasi SQL Server.
    Proses masuk admin server Memasuki azureuser.
    Password Masukkan kata sandi yang memenuhi persyaratan kompleksitas.
    Izinkan layanan dan sumber daya Azure mengakses server ini Pilih Ya.
  3. Setelah pembuatan selesai, navigasikan ke bilah database di portal Azure, dan, di bawah Pengaturan, pilih string Koneksi ion. Salin string koneksi ADO.NET untuk autentikasi SQL. Tempelkan string koneksi ke dalam dokumen sementara untuk digunakan nanti.

    Cuplikan layar menyalin string koneksi Azure SQL Database di portal Azure.

  4. Buat tabel untuk menyimpan data dari permintaan HTTP. Di portal Azure, navigasikan ke bilah database dan pilih Editor kueri. Masukkan kueri berikut untuk membuat tabel bernama dbo.ToDo:

    CREATE TABLE dbo.ToDo (
        [Id] UNIQUEIDENTIFIER PRIMARY KEY,
        [order] INT NULL,
        [title] NVARCHAR(200) NOT NULL,
        [url] NVARCHAR(200) NOT NULL,
        [completed] BIT NOT NULL
    );
    
  5. Verifikasi bahwa Azure Function Anda akan dapat mengakses Azure SQL Database dengan memeriksa pengaturan firewall server. Navigasi ke bilah server di portal Azure, dan di bawah Keamanan, pilih Jaringan. Pengecualian untuk Izinkan layanan dan sumber daya Azure untuk mengakses server ini harus diperiksa.

    Cuplikan layar memeriksa pengaturan firewall Azure SQL Database di portal Azure.

Memperbarui pengaturan aplikasi fungsi Anda

Di artikel mulai cepat sebelumnya, Anda membuat aplikasi fungsi di Azure. Dalam artikel ini, Anda memperbarui aplikasi untuk menulis data ke Azure SQL Database yang baru saja Anda buat. Untuk menyambungkan ke Azure SQL Database, Anda harus menambahkan string koneksi ke pengaturan aplikasi Anda. Anda kemudian mengunduh pengaturan baru ke file local.settings.json sehingga Anda dapat menyambungkan ke Azure SQL Database saat berjalan secara lokal.

  1. Edit string koneksi dalam dokumen sementara yang Anda buat sebelumnya. Ganti nilai Password dengan kata sandi yang Anda gunakan saat membuat Azure SQL Database. Salin string koneksi yang diperbarui.

  2. Tekan Ctrl/Cmd+shift+P 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 SqlConnectionString.
    Masukkan nilai untuk "Sql Koneksi ionString" Tempelkan string koneksi Azure SQL Database yang baru saja Anda salin.

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

  4. Tekan Ctrl/Cmd+shift+P 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 SQL, Anda harus menginstal ekstensi pengikatan yang sesuai sebelum menjalankan proyek.

Dengan pengecualian pemicu HTTP dan timer, pengikatan diimplementasikan sebagai paket ekstensi. Jalankan perintah tambahkan paket dotnet berikut di jendela Terminal untuk menambahkan paket ekstensi Azure SQL ke proyek Anda.

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

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

:::

Sekarang, Anda dapat menambahkan pengikatan output Azure SQL 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 komputer aplikasi fungsi Anda.

Buka file proyek HttpExample.cs dan tambahkan kelas berikutToDoItem, yang menentukan objek yang ditulis ke database:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}

Dalam proyek pustaka kelas C#, pengikatan didefinisikan sebagai atribut pengikatan pada metode fungsi. File function.json yang diperlukan oleh Functions kemudian dibuat secara otomatis berdasarkan atribut ini.

Buka file proyek HttpExample.cs dan tambahkan kelas jenis output berikut, yang menentukan objek gabungan yang akan menjadi output dari fungsi kami untuk respons HTTP dan output SQL:

public static class OutputType
{
    [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
    public ToDoItem ToDoItem { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

Tambahkan pernyataan penggunaan ke Microsoft.Azure.Functions.Worker.Extensions.Sql pustaka ke bagian atas file:

using Microsoft.Azure.Functions.Worker.Extensions.Sql;

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

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

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

Tambahkan properti berikut ke konfigurasi pengikatan:

const sendToSql = output.sql({
  commandText: 'dbo.ToDo',
  connectionStringSetting: 'SqlConnectionString',
});

Atribut pengikatan didefinisikan langsung dalam file function_app.py . Anda menggunakan generic_output_binding dekorator untuk menambahkan pengikatan output Azure SQL:

@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString"
    data_type=DataType.STRING)

Dalam kode ini, arg_name mengidentifikasi parameter pengikatan yang dirujuk dalam kode Anda, type menunjukkan pengikatan output adalah pengikatan output SQL, CommandText adalah tabel yang ditulis pengikatan, dan ConnectionStringSetting merupakan nama pengaturan aplikasi yang berisi string koneksi Azure SQL. string koneksi ada di pengaturan Sql Koneksi ionString dalam file local.settings.json.

Tambahkan kode yang menggunakan pengikatan output

Ganti metode Eksekusi yang ada dengan kode berikut:

[Function("HttpExample")]
public static OutputType 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 SQL output binding.
    return new OutputType()
    {
         ToDoItem = new ToDoItem
        {
            id = System.Guid.NewGuid().ToString(),
            title = message,
            completed = false,
            url = ""
        },
        HttpResponse = response
    };
}

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

const data = JSON.stringify([
  {
    // create a random ID
    Id: crypto.randomUUID(),
    title: name,
    completed: false,
    url: '',
  },
]);

// Output to Database
context.extraOutputs.set(sendToSql, data);

Untuk menggunakan crypto modul, tambahkan baris berikut ke bagian atas file:

const crypto = require("crypto");

Pada titik ini, fungsi Anda akan terlihat sebagai berikut:

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

const sendToSql = output.sql({
  commandText: 'dbo.ToDo',
  connectionStringSetting: 'SqlConnectionString',
});

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  extraOutputs: [sendToSql],
  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' };
      }

      // Stringified array of objects to be inserted into the database
      const data = JSON.stringify([
        {
          // create a random ID
          Id: crypto.randomUUID(),
          title: name,
          completed: false,
          url: '',
        },
      ]);

      // Output to Database
      context.extraOutputs.set(sendToSql, data);

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

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

import azure.functions as func
import logging
from azure.functions.decorators.core import DataType
import uuid

app = func.FunctionApp()

@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString",data_type=DataType.STRING)
def test_function(req: func.HttpRequest, toDoItems: func.Out[func.SqlRow]) -> func.HttpResponse:
     logging.info('Python HTTP trigger function processed a request.')
     name = req.get_json().get('name')
     if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

     if name:
        toDoItems.set(func.SqlRow({"Id": str(uuid.uuid4()), "title": name, "completed": False, "url": ""}))
        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
                )

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

    Cuplikan layar item menu 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.

Verifikasi bahwa informasi telah ditulis ke database

  1. Pada portal Azure, kembali ke Azure SQL Database Anda dan pilih Editor kueri.

    Cuplikan layar masuk ke editor kueri di portal Azure.

  2. Koneksi ke database Anda dan perluas Simpul tabel di penjelajah objek di sebelah kiri. Klik kanan pada dbo.ToDo tabel dan pilih Pilih 1000 Baris Teratas.

  3. Verifikasi bahwa informasi baru telah ditulis ke database oleh pengikatan output.

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 data yang ditulis ke Azure SQL Database 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 perlu membayar 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 yang dipicu HTTP untuk menulis data ke Azure SQL Database. Sekarang Anda bisa mempelajari selengkapnya tentang mengembangkan Azure Functions menggunakan Visual Studio Code: