الاتصال Azure Functions إلى قاعدة بيانات Azure SQL باستخدام Visual Studio Code
تتيح Azure Functions توصيل خدمات Azure والموارد الأخرى بوظائف دون الحاجة إلى كتابة رمز التكامل. تُعرَّف هذهالارتباطات، التي تمثل الإدخال والإخراج، ضمن تعريف الدالة. يتم توفير البيانات من الارتباطات للوظيفة في صورة معلمات. المشغل هو نوع خاص من ربط الإدخال. على الرغم من أن الدالة تحتوي على مشغل واحد فقط، إلا أنها يمكن أن تحتوي على روابط إدخال وإخراج متعددة. لمعرفة المزيد، راجع مفاهيم مشغلات وروابط دالات Azure.
توضح هذه المقالة كيفية استخدام Visual Studio Code لتوصيل قاعدة بيانات Azure SQL بالدالة التي أنشأتها في مقالة التشغيل السريع السابقة. يقوم ربط الإخراج الذي تضيفه إلى هذه الدالة بكتابة البيانات من طلب HTTP إلى جدول في قاعدة بيانات Azure SQL.
قبل البدء، يتعين إكمالالتشغيل السريع: إنشاء دالة C# في Azure باستعمال Visual Studio Code. إذا قمت بالفعل بتنظيف الموارد في نهاية هذه المقالة، فانتقل إلى الخطوات مرة أخرى لإعادة إنشاء تطبيق الدالة والموارد ذات الصلة في Azure.
قبل البدء، يتعين إكمالالتشغيل السريع: إنشاء دالة JavaScript في Azure باستعمال Visual Studio Code. إذا قمت بالفعل بتنظيف الموارد في نهاية هذه المقالة، فانتقل إلى الخطوات مرة أخرى لإعادة إنشاء تطبيق الدالة والموارد ذات الصلة في Azure.
قبل البدء، يجب إكمال التشغيل السريع: إنشاء دالة Python في Azure باستخدام Visual Studio Code. إذا قمت بالفعل بتنظيف الموارد في نهاية هذه المقالة، فانتقل إلى الخطوات مرة أخرى لإعادة إنشاء تطبيق الدالة والموارد ذات الصلة في Azure.
تتوفر المزيد من التفاصيل حول إعدادات روابط Azure SQL ومشغل Azure Functions في وثائق Azure Functions.
إنشاء قاعدة بيانات Azure SQL
اتبع Azure SQL Database create quickstart لإنشاء قاعدة بيانات Azure SQL بلا خادم. يمكن أن تكون قاعدة البيانات فارغة أو تم إنشاؤها من نموذج مجموعة البيانات AdventureWorksLT.
قدِّم المعلومات التالية في المطالبات:
المطالبة التحديد مجموعة الموارد اختر resource group التي أنشأت فيها تطبيق الوظائف في المقالة السابقة. اسم قاعدة البيانات أدخل mySampleDatabase
.اسم الخادم أدخل اسما فريدا لخادمك. لا يمكننا توفير اسم خادم محدد لاستخدامه لأن أسماء الخوادم يجب أن تكون فريدة عالمياً لجميع الخوادم في Azure، وليس فقط فريدة من نوعها داخل الاشتراك. أسلوب المصادقة حدد مصادقة SQL Server. تسجيل دخول مسؤول الخادم: أدخل azureuser
.كلمة المرور أدخل كلمة مرور تفي بمتطلبات التعقيد. السماح لخدمات وموارد Azure بالوصول إلى هذا الخادم حدد نعم. بمجرد اكتمال الإنشاء، انتقل إلى شفرة قاعدة البيانات في مدخل Microsoft Azure، وضمن الإعدادات، حدد سلاسل الاتصال. انسخ سلسلة الاتصال ADO.NET لمصادقة SQL. الصق سلسلة الاتصال في مستند مؤقت لاستخدامه لاحقا.
إنشاء جدول لتخزين البيانات من طلب HTTP. في مدخل Microsoft Azure، انتقل إلى شفرة قاعدة البيانات وحدد محرر الاستعلام. أدخل الاستعلام التالي لإنشاء جدول باسم
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 );
تحقق من أن Azure Function الخاصة بك ستكون قادرة على الوصول إلى قاعدة بيانات Azure SQL عن طريق التحقق من إعدادات جدار الحماية للخادم. انتقل إلى شفرة الخادم على مدخل Microsoft Azure، وضمن Security، حدد Networking. يجب التحقق من استثناء السماح لخدمات وموارد Azure بالوصول إلى هذا الخادم .
تحديث إعدادات تطبيق الوظائف
في مقالة Quickstart السابقة، قمت بإنشاء تطبيق وظيفي في Azure. في هذه المقالة، يمكنك تحديث تطبيقك لكتابة البيانات إلى قاعدة بيانات Azure SQL التي أنشأتها للتو. للاتصال بقاعدة بيانات Azure SQL، يجب إضافة سلسلة الاتصال إلى إعدادات التطبيق. ثم قم بتنزيل الإعداد الجديد إلى ملف local.settings.json حتى تتمكن من الاتصال بقاعدة بيانات Azure SQL عند التشغيل محليا.
قم بتحرير سلسلة الاتصال في المستند المؤقت الذي أنشأته سابقا. استبدل قيمة
Password
بكلمة المرور التي استخدمتها عند إنشاء قاعدة بيانات Azure SQL. انسخ سلسلة الاتصال المحدثة.اضغط على Ctrl/Cmd+shift+P لفتح لوحة الأوامر، ثم ابحث عن الأمر
Azure Functions: Add New Setting...
وقم بتشغيله .اختر تطبيق الدالة الذي أنشأته في المقالة السابقة. قدِّم المعلومات التالية في المطالبات:
المطالبة التحديد أدخل اسم إعداد التطبيق الجديد اكتب SqlConnectionString
.أدخل قيمة ل "Sql الاتصال ionString" الصق سلسلة الاتصال قاعدة بيانات Azure SQL التي نسختها للتو. يعمل ذلك على إنشاء إعداد تطبيق يسمى الاتصال
SqlConnectionString
في تطبيق الوظائف في Azure. الآن، تستطيع تنزيل هذا الإعداد إلى ملف local.settings.json.اضغط على Ctrl/Cmd+shift+P مرة أخرى لفتح لوحة الأوامر، ثم ابحث عن الأمر
Azure Functions: Download Remote Settings...
وقم بتشغيله .اختر تطبيق الدالة الذي أنشأته في المقالة السابقة. حدد Yes to all للكتابة فوق الإعدادات المحلية الموجودة.
يؤدي هذا إلى تنزيل كافة الإعدادات من Azure إلى مشروعك المحلي، بما في ذلك إعداد سلسلة الاتصال الجديدة. لا تستخدم معظم الإعدادات التي تم تنزيلها عند التشغيل محليا.
تسجيل ملحقات الربط
نظرا لأنك تستخدم ربط إخراج Azure SQL، يجب أن يكون لديك ملحق الارتباطات المقابل مثبتا قبل تشغيل المشروع.
باستثناء HTTP والمشغلات الموقتة، يتم تنفيذ الارتباطات كحزم ملحقة. قم بتشغيل الأمر dotnet add package التالي في نافذة Terminal لإضافة حزمة ملحق Azure SQL إلى مشروعك.
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Sql
تم تكوين المشروع الخاص بك لاستخدام مجموعة الملحقات، والتي تقوم تلقائيًا بتثبيت مجموعة محددة مسبقًا من حزم الملحقات.
يتم تمكين استخدام مجموعة الملحقات في ملف host.json في جذر المشروع، والذي يظهر على النحو التالي:
{
"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
}
}
:::
الآن، يمكنك إضافة ربط إخراج Azure SQL إلى مشروعك.
إضافة ربط المخرجات
في الوظائف، يتطلب كل نوع من أنواع الربط وdirection
، type
فريدا name
ليتم تعريفه في ملف function.json. تعتمد الطريقة التي تحدد بها هذه السمات على اللغة الخاصة بتطبيق الوظائف.
افتح ملف المشروع HttpExample.cs وأضف الفئة التالية ToDoItem
، والتي تحدد العنصر المكتوب إلى قاعدة البيانات:
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; }
}
}
في مشروع مكتبة فئة C #، يتم تعريف الارتباطات على أنها سمات ربط في أسلوب الوظيفة. ثم يتم إنشاء ملف function.json المطلوب عن طريق Functions تلقائيًا استنادًا إلى هذه السمات.
افتح ملف مشروع HttpExample.cs وأضف فئة نوع الإخراج التالية، والتي تحدد الكائنات المدمجة التي سيتم إخراجها من دالتنا لكل من استجابة HTTP وإخراج SQL:
public static class OutputType
{
[SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
public ToDoItem ToDoItem { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
إضافة عبارة استخدام إلى المكتبة Microsoft.Azure.Functions.Worker.Extensions.Sql
إلى أعلى الملف:
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
يتم تعريف سمات الربط مباشرة في التعليمات البرمجية الخاصة بك. يصف تكوين إخراج Azure SQL الحقول المطلوبة لربط إخراج Azure SQL.
MultiResponse
لهذا السيناريو، تحتاج إلى إضافة extraOutputs
ربط إخراج إلى الدالة .
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToSql],
handler: async (request, context) => {
أضف الخصائص التالية إلى تكوين الربط:
const sendToSql = output.sql({
commandText: 'dbo.ToDo',
connectionStringSetting: 'SqlConnectionString',
});
يتم تعريف سمات الربط مباشرة في ملف function_app.py . يمكنك استخدام generic_output_binding
مصمم الديكور لإضافة ربط إخراج Azure SQL:
@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString"
data_type=DataType.STRING)
في هذه التعليمة البرمجية، arg_name
يحدد معلمة الربط المشار إليها في التعليمات البرمجية الخاصة بك، type
ويشير إلى أن ربط الإخراج هو ربط إخراج SQL، CommandText
وهو الجدول الذي يكتب الربط إليه، وهو ConnectionStringSetting
اسم إعداد تطبيق يحتوي على سلسلة الاتصال Azure SQL. سلسلة الاتصال في إعداد Sql الاتصال ionString في ملف local.settings.json.
إضافة التعليمات البرمجية التي تستخدم ربط المخرجات
استبدل طريقة التشغيل الحالية بالتعليمة البرمجية التالية:
[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
};
}
أضف التعليمات البرمجية extraInputs
التي تستخدم كائن ربط الإخراج على context
لإرسال مستند JSON إلى دالة ربط الإخراج المسماة، sendToSql
. إضافة هذا الرمز قبل عبارة 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);
لاستخدام الوحدة النمطية crypto
، أضف السطر التالي إلى أعلى الملف:
const crypto = require("crypto");
في هذه المرحلة، يجب أن تبدو الدالة كما يلي:
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' };
}
},
});
تحديث HttpExample\function_app.py لمطابقة التعليمات البرمجية التالية. أضف المعلمة toDoItems
إلى تعريف الدالة وضمن toDoItems.set()
العبارة if name:
:
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
)
تشغيل الدالة محليًا
يتكامل Visual Studio Code مع أدوات Azure Functions Core للسماح لك بتشغيل هذا المشروع على كمبيوتر التطوير المحلي قبل النشر إلى Azure. إذا لم يكن لديك Core Tools مثبتة محليا بالفعل، فستتم مطالبتك بتثبيتها في المرة الأولى التي تقوم فيها بتشغيل مشروعك.
للاتصال بالوظيفة اضغط على F5 لبدء مشروع تطبيق الوظائف. تعرض لوحة Terminal عملية الإخراج من Core Tools. يبدأ تطبيقك في لوحة المحطة الطرفية. يمكنك مشاهدة نقطة نهاية URL للوظيفة التي تم تشغيلها بواسطة HTTP وتعمل محليًا.
إذا لم يكن لديك Core Tools مثبتة بالفعل، فحدد Install لتثبيت Core Tools عند مطالبتك بذلك.
إذا كنت تواجه مشكلة في التشغيل على Windows، فتأكد من عدم تعيين المحطة الطرفية الافتراضية ل Visual Studio Code إلى WSL Bash.مع تشغيل Core Tools، انتقل إلى مساحة Azure: Functions. ضمن Functions وسع Local Project>Functions. انقر بزر الماوس الأيمن (Windows) أو Ctrl - انقر فوق الدالة (macOS)
HttpExample
واختر تنفيذ الدالة الآن....في Enter request body اضغط Enter لإرسال رسالة الطلب هذه إلى الوظيفة الخاصة بك.
عند تنفيذ الوظيفة محليًا وإرجاع استجابة، يرفع تنبيه في Visual Studio التعليمات البرمجية. تعرض المعلومات حول تنفيذ الدالة في لوحة Terminal.
اضغط على Ctrl + C لإيقاف Core Tools وقطع اتصال مصحح الأخطاء.
تشغيل الدالة محليًا
كما هو الحال في المقالة السابقة، اضغط F5 لبدء مشروع تطبيق الوظائف وأدوات الذاكرة الرئيسة.
مع تشغيل الأدوات الأساسية، انتقل إلى منطقة Azure: Functions. ضمن Functions وسع Local Project>Functions. انقر بزر الماوس الأيمن (Windows) أو Ctrl مع النقر في Mac على وظيفة
HttpExample
واختر Execute Function Now....في Enter request body سترى قيمة نص رسالة الطلب الخاصة
{ "name": "Azure" }
. اضغط فوق Enter لإرسال رسالة الطلب هذه إلى الوظيفة الخاصة بك.بعد إرجاع الاستجابة، اضغط Ctrl + C لإيقاف Core Tools.
تحقق من كتابة المعلومات إلى قاعدة البيانات
في مدخل Microsoft Azure، ارجع إلى قاعدة بيانات Azure SQL وحدد محرر الاستعلام.
الاتصال إلى قاعدة البيانات الخاصة بك وقم بتوسيع عقدة الجداول في مستكشف الكائنات على اليسار. انقر بزر الماوس الأيمن فوق
dbo.ToDo
الجدول وحدد تحديد أعلى 1000 صف.تحقق من كتابة المعلومات الجديدة إلى قاعدة البيانات بواسطة ربط الإخراج.
إعادة نشر التطبيق المحدث والتحقق منه
لفتح لوحة الأوامر في تعليمة Visual Studio البرمجية، اضغط على F1. في لوحة الأوامر، ابحث عن
Azure Functions: Deploy to function app...
واختره.اختر تطبيق الوظائف الذي إنشاته في المقالة الأولى. نظرًا لأنك تقوم بإعادة توزيع مشروعك إلى نفس التطبيق، حدد Deploy لتجاهل التحذير حول الكتابة فوق الملفات.
بعد اكتمال التوزيع، يمكنك مرة أخرى استخدام ميزةExecute Function Now... لتشغيل الدالة في Azure.
تحقق مرة أخرى من البيانات المكتوبة إلى قاعدة بيانات Azure SQL للتحقق من أن ربط الإخراج ينشئ مرة أخرى مستند JSON جديدا.
تنظيف الموارد
تشير الموارد في Azure إلى التطبيقات الخاصة بالوظيفة والوظائف وحسابات التخزين وما إلى ذلك. يتم تجميعها في مجموعات الموارد،ويمكنك حذف كل شيء في مجموعة بحذف المجموعة.
أنشأت موارد لإنجاز قوالب التشغيل السريع هذه. قد تتم فوترتك مقابل هذه الموارد، استنادًا إلى حالة حسابكوأسعار الخدمة. إذا لم تعد بحاجة إلى الموارد على الإطلاق، فإليك كيفية حذفها:
لفتح لوحة الأوامر في تعليمة Visual Studio البرمجية، اضغط على F1. في لوحة الأوامر، ابحث عن
Azure: Open in portal
واختره.اختر التطبيق الخاص بالوظائف، واضغط زر Enter. تفتح صفحة تطبيق الوظيفة في مدخل Microsoft Azure.
في علامة التبويب نظرة عامة حدد الارتباط المسمى بجوار Resource group.
في صفحة مجموعة الموارد، راجع قائمة الموارد المدرجة وتحقق من أنها هي التي تريد حذفها.
حدد حذف مجموعة الموارد، واتبع الإرشادات.
قد يستغرق الحذف دقيقتين. عند الانتهاء من ذلك، يظهر تنبيه لبضع ثوان. يمكنك أيضا تحديد رمز الجرس في أعلى الصفحة لعرض التنبيه.
الخطوات التالية
لقد قمت بتحديث دالة HTTP المشغلة لكتابة البيانات إلى قاعدة بيانات Azure SQL. الآن يمكنك معرفة المزيد حول تطوير الوظائف باستعمال Visual Studio Code: