Подключение Функции Azure База данных SQL Azure с помощью Visual Studio Code
Функции Azure позволяют выполнять подключение служб Azure и других ресурсов к функциям без необходимости написания кода для интеграции. Эти привязки, которые представляют как входные, так и выходные данные, объявляются в определении функции. Данные привязок предоставляются функции в качестве параметров. Триггер является специальным типом входных привязок. Хотя функция обладает только одним триггером, она может состоять из нескольких входных и выходных привязок. Дополнительные сведения см. в статье Основные понятия триггеров и привязок в Функциях Azure.
В этой статье показано, как использовать Visual Studio Code для подключения База данных SQL Azure к функции, созданной в предыдущей краткой статье. Выходная привязка, добавляемая в эту функцию, записывает данные из HTTP-запроса в таблицу в База данных SQL Azure.
Перед началом работы необходимо выполнить действия, описанные в статье Краткое руководство. Создание функции C# в Azure с помощью Visual Studio Code. Если вы уже удалили ресурсы по окончании работы по этой статье, выполните шаги еще раз, чтобы повторно создать приложение-функцию и связанные ресурсы в Azure.
Перед началом работы необходимо выполнить действия, описанные в статье Краткое руководство. Создание функции JavaScript в Azure с помощью Visual Studio Code. Если вы уже удалили ресурсы по окончании работы по этой статье, выполните шаги еще раз, чтобы повторно создать приложение-функцию и связанные ресурсы в Azure.
Перед началом работы необходимо выполнить краткое руководство. Создание функции Python в Azure с помощью Visual Studio Code. Если вы уже удалили ресурсы по окончании работы по этой статье, выполните шаги еще раз, чтобы повторно создать приложение-функцию и связанные ресурсы в Azure.
Дополнительные сведения о параметрах привязки SQL Azure и триггерах для Функции Azure доступны в документации Функции Azure.
Создание Базы данных SQL Azure
Выполните База данных SQL Azure краткое руководство по созданию бессерверных База данных SQL Azure. База данных может быть пуста или создана из примера набора данных AdventureWorksLT.
Введите следующие сведения по соответствующим запросам:
Prompt Выбор Группа ресурсов Выберите группу ресурсов, в которой вы создали приложение-функцию, как описано в предыдущей статье. Имя базы данных Введите mySampleDatabase
.Имя сервера Укажите уникальное имя сервера. Мы не можем указать точное имя сервера, так как имена всех серверов в Azure должны быть глобально уникальными, а не только в рамках подписки. метод проверки подлинности Выберите Проверка подлинности SQL Server. Имя для входа администратора сервера Введите azureuser
.Пароль Введите пароль, соответствующий требованиям сложности. Разрешить службам и ресурсам Azure доступ к этому серверу Выберите Да. После завершения создания перейдите в колонку базы данных в портал Azure и в разделе Параметры выберите строки Подключение ion. Скопируйте ADO.NET строка подключения для проверки подлинности SQL. Вставьте строка подключения во временный документ для последующего использования.
Создайте таблицу для хранения данных из HTTP-запроса. В портал 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 сможет получить доступ к База данных SQL Azure, проверка параметры брандмауэра сервера. Перейдите к колонке сервера в портал Azure и в разделе "Безопасность" выберите "Сеть". Исключение для разрешения доступа к этому серверу служб и ресурсов Azure должно быть проверка.
Обновление параметров приложения-функции
В предыдущем кратком руководстве показано, как создать в Azure приложение-функцию. В этой статье вы обновите приложение для записи данных в только что созданный База данных SQL Azure. Чтобы подключиться к База данных SQL Azure, необходимо добавить его строка подключения в параметры приложения. Затем вы скачайте новый параметр в файл local.settings.json, чтобы подключиться к База данных SQL Azure при локальном запуске.
Измените строка подключения во временном документе, созданном ранее. Замените значение пароля, используемого
Password
при создании База данных SQL Azure. Скопируйте обновленные строка подключения.Нажмите клавиши CTRL/CMD+SHIFT+P , чтобы открыть палитру команд, а затем выполните поиск и выполните команду
Azure Functions: Add New Setting...
.Выберите созданное в рамках предыдущей статьи приложение-функцию. Введите следующие сведения по соответствующим запросам:
Prompt Выбор Введите имя нового параметра приложения Введите SqlConnectionString
.Введите значение "Sql Подключение ionString" Вставьте строка подключения только что скопированного База данных SQL Azure. При этом в приложении-функции в Azure создается параметр приложения с именем
SqlConnectionString
для подключения. Теперь этот параметр можно скачать в файл local.settings.json.Нажмите клавиши CTRL/CMD+SHIFT+P еще раз, чтобы открыть палитру команд, а затем выполните поиск и выполните команду
Azure Functions: Download Remote Settings...
.Выберите созданное в рамках предыдущей статьи приложение-функцию. Выберите Да, для всех, чтобы перезаписать имеющиеся локальные параметры.
При этом скачиваются все параметры из Azure в ваш локальный проект, включая новый параметр строки подключения. Большинство скачанных параметров не используются при локальном запуске.
Регистрация расширений привязки
Так как вы используете выходную привязку SQL Azure, необходимо установить соответствующее расширение привязок перед запуском проекта.
За исключением триггеров HTTP и таймера, привязки реализованы в виде пакетов расширений. Выполните следующую команду dotnet add package в окне терминала, чтобы добавить пакет расширения SQL Azure в проект.
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
}
}
:::
Теперь в проект можно добавить выходную привязку SQL Azure.
Добавление выходной привязки
В службе "Функции" для каждого типа привязок требуется 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, обязательный для службы Функции Azure.
Откройте файл проекта HttpExample.cs и добавьте следующий класс типа выходных данных, который определяет объединенные объекты, которые будут выводиться из нашей функции для ответа HTTP и выходных данных SQL:
public static class OutputType
{
[SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
public ToDoItem ToDoItem { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
Добавьте инструкцию using в Microsoft.Azure.Functions.Worker.Extensions.Sql
библиотеку в начало файла:
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
Атрибуты привязки определяются непосредственно в коде. В выходной конфигурации SQL Azure описываются поля, необходимые для выходной привязки SQL Azure.
Для этого 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
декоратор для добавления выходной привязки SQL Azure:
@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString"
data_type=DataType.STRING)
В этом коде arg_name
определяет параметр привязки, на который ссылается код, указывает, что выходная привязка является выходной привязкой SQL, type
CommandText
является таблицей, в которую записывается привязка, и ConnectionStringSetting
является именем параметра приложения, содержащего строка подключения SQL Azure. Строка подключения находится в параметре Sql Подключение ionString в файле local.settings.json.
Добавление кода, который использует выходную привязку
Замените существующий метод Run следующим кодом:
[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
};
}
Добавьте код, использующий объект context
выходной extraInputs
привязки для отправки документа 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 Tools, чтобы перед публикацией в Azure можно было запустить этот проект на локальном компьютере разработки. Если у вас еще нет основных средств, вам будет предложено установить его при первом запуске проекта.
Чтобы вызвать функцию, нажмите клавишу F5, чтобы запустить проект приложения-функции. На панели Терминал отобразятся выходные данные из Core Tools. Ваше приложение запускается в панели Терминал. Отобразится URL-адрес конечной точки активируемой HTTP-запросом функции, которая выполняется локально.
Если у вас еще нет основных инструментов, выберите "Установить ", чтобы установить основные инструменты при появлении запроса на это.
При возникновении проблем с запуском в Windows убедитесь, что в качестве терминала по умолчанию для Visual Studio Code не используется оболочка WSL.С запущенными Core Tools перейдите в область Azure: Функции. В разделе Функции разверните Локальный проект>Функции. Щелкните правой кнопкой мыши (в Windows) или используйте Ctrl-щелчок (в macOS) на функции
HttpExample
и выберите Выполнить функцию....В поле Введите текст запроса нажмите клавишу ВВОД, чтобы отправить запрос в функцию.
При выполнении функции локально и возврате ответа в Visual Studio Code отобразится уведомление. Сведения о выполнении функции отображаются на панели Терминал.
Нажмите клавиши CTRL+C, чтобы остановить Core Tools и отключить отладчик.
Локальное выполнение функции
Как и при работе с предыдущей статьей, нажмите клавишу F5, чтобы запустить проект приложения функции и Core Tools.
С запущенными Core Tools перейдите в область "Azure: Функции". В разделе Функции разверните Локальный проект>Функции. Щелкните правой кнопкой мыши (Ctrl-щелчок на компьютерах Mac) функцию
HttpExample
и выберите Выполнить функцию....В поле Введите текст запроса отображается текст сообщения запроса
{ "name": "Azure" }
. Нажмите клавишу ВВОД, чтобы отправить это сообщение запроса в свою функцию.После возврата ответа нажмите клавиши CTRL+C, чтобы остановить работу Core Tools.
Убедитесь, что данные были записаны в базу данных
В портал Azure вернитесь к База данных SQL Azure и выберите редактор запросов.
Подключение в базу данных и разверните Узел таблиц в обозревателе объектов слева. Щелкните таблицу правой
dbo.ToDo
кнопкой мыши и выберите "Выбрать верхние 1000 строк".Убедитесь, что новая информация была записана в базу данных выходной привязкой.
Повторное развертывание и проверка обновленного приложения
В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд. В палитре команд найдите и щелкните
Azure Functions: Deploy to function app...
.Выберите созданное в рамках первой статьи приложение-функцию. Так как вы повторно развертываете свой проект в том же приложении, щелкните Развернуть, чтобы закрыть предупреждение о перезаписи файлов.
После завершения развертывания вы можете повторно использовать возможность Выполнить функцию..., чтобы запустить функцию в Azure.
Снова проверка данные, записанные в База данных SQL Azure, чтобы убедиться, что выходная привязка снова создает новый документ JSON.
Очистка ресурсов
Ресурсы в Azure — это приложения-функции, функции, учетные записи хранения и т. д. Они объединяются в группы ресурсов, при удалении которых удаляются и все данные в них.
Вы создали ресурсы для завершения этих кратких руководств. Вам могут быть выставлены счета за эти ресурсы в зависимости от состояния учетной записи и цен на службы. Если вам больше не нужны ресурсы, их можно удалить следующим образом:
В Visual Studio Code нажмите клавишу F1, чтобы открыть палитру команд. В палитре команд найдите и щелкните
Azure: Open in portal
.Выберите приложение-функцию и нажмите клавишу ВВОД. Страница приложения-функции откроется на портале Azure.
На вкладке Обзор выберите именованную ссылку рядом с полем Группа ресурсов.
На странице Группа ресурсов просмотрите список включенных ресурсов и убедитесь, что именно их нужно удалить.
Выберите Удалить группу ресурсов и следуйте инструкциям.
Удаление может занять несколько минут. После этого на несколько секунд появится уведомление. Кроме того, можно выбрать значок колокольчика в верхней части страницы, чтобы просмотреть уведомление.
Следующие шаги
Вы обновили функцию, активированную HTTP, чтобы записать данные в База данных SQL Azure. Теперь вы можете посмотреть дополнительные сведения о разработке Функций с помощью Visual Studio Code.
Azure Functions triggers and bindings (Основные понятия триггеров и привязок в Функциях Azure)
Azure Functions Python Developer Guide (Справочник по Функциям Azure для разработчика Python)