Ескерім
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этой статье рассматриваются рекомендации по обновлению существующих приложений Функции Azure, использующих расширение Azure Cosmos DB версии 3.x для использования более нового расширения версии 4.x. Переход с версии 3.x на версию 4.x расширения Azure Cosmos DB имеет критические изменения для приложения.
Внимание
31 августа 2024 г. расширение Azure Cosmos DB версии 3.x будет прекращено. Расширение и все приложения, использующие расширение, будут продолжать функционировать, но Azure Cosmos DB перестанет предоставлять дальнейшее обслуживание и поддержку этого расширения. Мы рекомендуем перейти к последней версии 4.x расширения.
В этой статье описывается процесс переноса приложения-функции для запуска в расширении Azure Cosmos DB версии 4.x. Так как инструкции по обновлению проекта зависят от языка, обязательно выберите язык разработки из селектора в верхней части статьи.
Изменения в создании идентификаторов элементов
Идентификатор элемента больше не заполняется в расширении автоматически. Таким образом, идентификатор элемента должен в частности включать созданный идентификатор для случаев, когда вы использовали выходную привязку для создания элементов. Чтобы сохранить то же поведение, что и предыдущая версия, можно назначить случайный GUID в качестве свойства идентификатора.
Обновление версии расширения
Функции .NET используют привязки, установленные в проекте в качестве пакетов NuGet. В зависимости от модели процесса функций пакет NuGet для обновления зависит от модели процесса Функций.
Модель процесса функций | Расширение Azure Cosmos DB | Рекомендуемая версия |
---|---|---|
Модель внутрипроцессного процесса | Microsoft.Azure.WebJobs.Extensions.CosmosDB | >= 4.3.0 |
Изолированная рабочая модель | Microsoft.Azure.Functions.Worker.Extensions.CosmosDB | >= 4.4.1 |
Обновите .csproj
файл проекта, чтобы использовать последнюю версию расширения для модели процесса. В следующем .csproj
файле используется версия 4 расширения Azure Cosmos DB.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.CosmosDB" Version="4.6.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.4" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
Обновление пакета расширений
По умолчанию пакеты расширений используются приложениями-функциями non-.NET для установки расширений привязки. Расширение Azure Cosmos DB версии 4 является частью пакета расширений Microsoft Функции Azure версии 4.
Чтобы обновить приложение, чтобы использовать последний пакет расширений, обновите приложение host.json
.
host.json
Следующий файл использует версию 4 пакета расширений Microsoft Функции Azure.
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Переименование атрибутов привязки
В библиотеках C#, выполняемых как внутри процесса, так и в изолированном процессе, для определения функции используется атрибут CosmosDBTriggerAttribute.
В следующей таблице содержатся только атрибуты, которые были переименованы или удалены из расширения версии 3. Полный список атрибутов, доступных в расширении версии 4, см. в справочнике по атрибутам.
Свойство атрибута версии 3 | Свойство атрибута версии 4 | Описание атрибута версии 4 |
---|---|---|
ConnectionStringSetting | Соединение | Имя параметра или коллекции параметров приложения, указывающих, как подключиться к отслеживаемой учетной записи Azure Cosmos DB. Дополнительные сведения см. в разделе Соединения. |
Имя коллекции | Имя контейнера | Имя отслеживаемого контейнера. |
LeaseConnectionStringSetting | LeaseConnection | (Необязательно) Имя параметра или коллекции параметров приложения, указывающее, как подключиться к учетной записи Azure Cosmos DB, содержащей контейнер аренды. Если значение не задано, используется значение Connection . Этот параметр задается автоматически при создании привязки на портале. Строка подключения для контейнера аренд должна иметь разрешения на запись. |
LeaseCollectionName | LeaseContainerName | (Необязательно.) Имя контейнера, используемого для хранения аренд. Если значение не задано, используется значение leases . |
СоздатьКоллекциюАрендЕслиНеСуществует | CreateLeaseContainerIfNotExists | (Необязательно.) Если задано значение true , контейнер аренд создается автоматически, если он еще не создан. Значение по умолчанию — false . При использовании удостоверений Microsoft Entra, если задано значение true , создание контейнеров не является разрешенной операцией , и функция не сможет запуститься. |
LeasesCollectionThroughput | LeasesContainerThroughput | (Необязательно.) Определяет количество единиц запроса для назначения при создании контейнера аренд. Этот параметр используется, только если для CreateLeaseContainerIfNotExists задано значение true . Этот параметр задается автоматически при создании привязки с помощью портала. |
LeaseCollectionPrefix | LeaseContainerPrefix | (Необязательно.) Если этот параметр задан, значение добавляется в качестве префикса к арендам, созданным в контейнере аренд для этой функции. Использование префикса позволяет двум отдельным Функциям Azure совместно применять один контейнер аренд с помощью разных префиксов. |
UseMultipleWriteLocations | Удалено | Этот атрибут больше не требуется, так как он обнаруживается автоматически. |
UseDefaultJsonSerialization | Удалено | Этот атрибут больше не нужен, так как вы можете полностью настроить сериализацию с помощью встроенной поддержки в пакете SDK для .NET для Azure Cosmos DB версии 3. |
Контрольная точка интервал | Удалено | Этот атрибут был удален в расширении версии 4. |
КонтрольнаяТочкаКоличествоДокументов | Удалено | Этот атрибут был удален в расширении версии 4. |
Переименование атрибутов привязки
Обновите свойства конфигурации привязки function.json
в файле.
В следующей таблице содержатся только атрибуты, которые изменили или были удалены из расширения версии 3.x. Полный список атрибутов, доступных в расширении версии 4, см. в справочнике по атрибутам.
Свойство атрибута версии 3 | Свойство атрибута версии 4 | Описание атрибута версии 4 |
---|---|---|
connectionStringSetting | Подключение | Имя параметра или коллекции параметров приложения, указывающих, как подключиться к отслеживаемой учетной записи Azure Cosmos DB. Дополнительные сведения см. в разделе Соединения. |
collectionName | containerName | Имя отслеживаемого контейнера. |
leaseConnectionStringSetting | leaseConnection | (Необязательно) Имя параметра или коллекции параметров приложения, указывающее, как подключиться к учетной записи Azure Cosmos DB, содержащей контейнер аренды. Если значение не задано, используется значение connection . Этот параметр задается автоматически при создании привязки на портале. Строка подключения для контейнера аренд должна иметь разрешения на запись. |
leaseCollectionName | арендаНазваниеКонтейнера | (Необязательно.) Имя контейнера, используемого для хранения аренд. Если значение не задано, используется значение leases . |
создатьКоллекциюАрендыЕслиНеСуществует | создатьКонтейнерАрендыЕслиНеСуществует | (Необязательно.) Если задано значение true , контейнер аренд создается автоматически, если он еще не создан. Значение по умолчанию — false . При использовании удостоверений Microsoft Entra, если задано значение true , создание контейнеров не является разрешенной операцией , и функция не сможет запуститься. |
leasesCollectionThroughput | leasesContainerThroughput | (Необязательно.) Определяет количество единиц запроса для назначения при создании контейнера аренд. Этот параметр используется, только если для createLeaseContainerIfNotExists задано значение true . Этот параметр задается автоматически при создании привязки с помощью портала. |
leaseCollectionPrefix | leaseContainerPrefix | (Необязательно.) Если этот параметр задан, значение добавляется в качестве префикса к арендам, созданным в контейнере аренд для этой функции. Использование префикса позволяет двум отдельным Функциям Azure совместно применять один контейнер аренд с помощью разных префиксов. |
useMultipleWriteLocations | Удалено | Этот атрибут больше не требуется, так как он обнаруживается автоматически. |
интервалКонтрольнойТочки | Удалено | Этот атрибут был удален в расширении версии 4. |
контрольная точкаКоличествоДокументов | Удалено | Этот атрибут был удален в расширении версии 4. |
Изменение кода функции
Расширение Функции Azure версии 4 построено на основе пакета SDK для .NET для Azure Cosmos DB версии 3, который удалил поддержку классаDocument
. Вместо получения списка Document
объектов с каждым вызовом функции, который затем необходимо десериализировать в собственный тип объекта, теперь можно получить список объектов собственного типа.
Этот пример относится к простому типу ToDoItem
.
namespace CosmosDBSamples
{
// Customize the model with your own desired properties
public class ToDoItem
{
public string id { get; set; }
public string Description { get; set; }
}
}
При определении функции необходимо вносить изменения в имена атрибутов непосредственно в коде.
using System.Collections.Generic;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace CosmosDBSamples
{
public static class CosmosTrigger
{
[FunctionName("CosmosTrigger")]
public static void Run([CosmosDBTrigger(
databaseName: "databaseName",
containerName: "containerName",
Connection = "CosmosDBConnectionSetting",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)]IReadOnlyList<ToDoItem> input, ILogger log)
{
if (input != null && input.Count > 0)
{
log.LogInformation("Documents modified " + input.Count);
log.LogInformation("First document Id " + input[0].id);
}
}
}
}
Примечание.
Если сценарий зависит от динамической Document
природы типа для идентификации различных схем и типов событий, можно использовать базовый абстрактный тип с общими свойствами для типов или динамических типов, таких как JObject
(при использовании Microsoft.Azure.WebJobs.Extensions.CosmosDB
) и JsonNode
(при использовании Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
), которые позволяют получить доступ к свойствам, как Document
это было.
Кроме того, если вы используете выходную привязку, просмотрите изменения в создании идентификатора элемента, чтобы проверить, требуются ли дополнительные изменения кода.
Изменение кода функции
После обновления host.json
правильной версии пакета расширений и изменения function.json
правильных имен атрибутов нет дополнительных изменений кода, необходимых для случаев, когда вы используете входные привязки или триггер. Если вы используете выходную привязку, просмотрите изменения в создании идентификатора элемента, чтобы проверить, требуются ли дополнительные изменения кода.