Azure Functions における Azure SQL バインドの概要

この一連の記事では、Azure Functions で Azure SQL バインドを操作する方法について説明します。 Azure Functions では、Azure SQL および SQL Server 製品の入力バインディング、出力バインディング、関数トリガーがサポートされています。

アクション タイプ
SQL テーブルで変更が検出されたときに関数をトリガーする SQL トリガー
データベースからデータを読み取る 入力バインド
データベースにデータを保存する 出力バインド

拡張機能のインストール

インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モードによって異なります。

関数は分離された C# ワーカー プロセスで実行されます。 詳しくは、「分離ワーカー プロセスにおける C# Azure Functions の実行のガイド」をご覧ください。

この NuGet パッケージをインストールすることによって、プロジェクトに拡張機能を追加します。

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

Microsoft.Azure.Functions.Worker.Extensions.Sql パッケージのプレビュー バージョンを使用するには、コマンドに --prerelease フラグを追加します。 プレビュー機能は、 Azure Functions SQL 拡張機能のリリース ページで確認できます。

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

注

Azure Functions の Azure SQL バインドのプレビュー リリース間の破壊的変更には、同じデータベースを対象とするすべての Functions で同じバージョンの SQL 拡張機能パッケージが使用されている必要があります。

バンドルのインストール

アプリでこのバインド拡張機能を使用できるようにするには、プロジェクトのルートにある host.json ファイルに次の extensionBundle 参照が含まれていることを確認します。

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}

この例では、versionの[4.0.0, 5.0.0)値は、少なくとも4.0.0が5.0.0未満のバンドル バージョン (4.x のすべての潜在的なバージョンを含む) を使用するように Functions ホストに指示します。 この表記は、v4.x 拡張機能バンドルの利用可能な最新のマイナー バージョンでアプリを効果的に維持します。

可能であれば、最新の拡張機能バンドルメジャー バージョンを使用し、ランタイムが最新のマイナー バージョンを自動的に維持できるようにする必要があります。 最新のバンドルの内容は、 拡張機能バンドルのリリース ページで確認できます。 詳細については、 Azure Functions 拡張機能バンドルに関するページを参照してください。

アプリでプレビュー機能を使用する必要がある場合は、代わりに最新バージョンのプレビュー バンドルを参照する必要があります。 詳細については、「 プレビュー拡張機能バンドルの操作」を参照してください。

プレビュー機能は、 Azure Functions SQL 拡張機能のリリース ページで確認できます。

注

Azure Functions の Azure SQL バインドのプレビュー リリース間の破壊的変更には、同じデータベースを対象とするすべての Functions で同じバージョンの SQL 拡張機能パッケージが使用されている必要があります。

パッケージの更新

次の例のように 、Azure Functions Java SQL Types パッケージ を、プロジェクト内の pom.xml ファイルに更新して関数プロジェクトに追加します。

<dependency>
    <groupId>com.microsoft.azure.functions</groupId>
    <artifactId>azure-functions-java-library-sql</artifactId>
    <version>2.1.0</version>
</dependency>

接続

connectionStringSettingプロパティはアプリケーション設定でキーに設定されており、Functionsランタイムが拡張で使うAzure SQLまたはSQL Serverデータベースに接続するために使われる値を返します。 接続プロパティ設定の値は接続の種類によって異なります:

  • マネージドID接続:connectionStringSettingプロパティは秘密なしで認証するためにAuthentication=Active Directory Managed Identityを用いる接続文字列を返します。 システム割り当てまたはユーザー割り当てマネージド ID のどちらかを使用できます。 詳細については、「管理されたアイデンティティでAzure SQLに関数アプリを接続」および「Define identity connections」をご覧ください。
  • Key Vault参照:connectionStringSettingプロパティ設定は、接続文字列が中央管理されている場所への参照Azure Key Vaultを返します。 詳細については、「Key Vault connectionsの定義」をご覧ください。
  • App Configuration reference:connectionStringSettingプロパティ設定は接続文字列またはKey Vault参照を返すAzure App Configuration参照を返します。 詳細については、接続記事のAzure App Configurationをご覧ください。
  • Connection string:connectionStringSettingプロパティ設定は実際のSQL 接続文字列を返します。 接続文字列に認証情報が含まれている場合もあるため、管理型ID接続を使うか、少なくとも接続文字列をKey Vaultに保存すべきです。 詳細については、「 接続の定義」を参照してください。

バインディング接続について詳しく知りたい方は、「Azure Functionsの接続管理」をご覧ください。

接続文字列はMicrosoftに渡されます。Data.SqlClientであり、SqlClient ConnectionStringドキュメントで定義されたすべてのキーワードをサポートしています。 注意が必要なキーワードは次のとおりです。

  • Authentication: Connect to Azure SQL with Microsoft Entra ID. 管理型アイデンティティのために Active Directory Managed Identity に設定しています。 詳細については、「管理されたIDでAzure SQLに関数アプリを接続する」をご覧ください。
  • Command Timeout: クエリを終了する前に指定された秒数(標準は30秒)待つこと。
  • ConnectRetryCount: Azure SQL Databaseのサーバーレスティア(デフォルト1)に適用される追加の再接続試行を自動的に行います。
  • Pooling: データベースへの接続を再利用してパフォーマンスを向上させる(デフォルト true)。 接続プールのその他の設定には、Connection Lifetime、Max Pool Size、Min Pool Size があります。 詳細はADO.NETのドキュメントをご覧ください。

考慮事項

  • Azure SQL バインドでは、バージョン 4.x 以降の Functions ランタイムがサポートされます。
  • Azure SQL バインドのソース コードは、こちらの GitHub リポジトリにあります。
  • このバインドでは、Azure SQL または SQL Server データベースに接続する必要があります。
  • データ型 NTEXT、TEXT、IMAGE の列を持つテーブルに対する出力バインディングはサポートされておらず、データのアップサートは失敗します。 これらの型は将来のバージョンの SQL Server で削除され、この Azure Functions バインドで使用される OPENJSON 関数とは互換性がありません。
  • ユーザー名とパスワードの代わりに管理 ID を使用します。
  • アプリケーション設定を格納するには、 Azure キー値 を使用することを検討してください。

サンプル

Azure SQL バインド GitHub リポジトリで利用できる C#、Java、JavaScript、PowerShell、Python のサンプルに加えて、Azure のサンプルではさらに多くのものを利用できます。

次の手順