次の方法で共有


クイック スタート: Azure Functions を使用して Azure SQL Database の変更に対応する

このクイック スタートでは、Visual Studio Code を使用して、Azure SQL Database テーブルの変更に応答するアプリを構築します。 コードをローカルでテストした後、Azure Functions の Flex Consumption プランで実行されている新しいサーバーレス関数アプリにコードをデプロイします。

プロジェクト ソースでは、Visual Studio Code で Azure Developer CLI (azd) 拡張機能を使用して、プロジェクト コードのローカルでの初期化と検証、および Azure へのコードのデプロイを簡略化します。 このデプロイは、セキュリティで保護されたスケーラブルな Azure Functions デプロイの最新のベスト プラクティスに従います。

Important

Azure SQL データベースの変更への対応はすべての言語でサポートされていますが、このクイック スタート シナリオには現在、C#、Python、TypeScript の例しかありません。 このクイック スタートを完了するには、この記事の上部にあるサポートされている言語のいずれかを選択します。

[前提条件]

  • Node.js 18.x 以降。 node --version コマンドを使用して、現在のバージョンを確認してください。

プロジェクトを初期化する

コマンド パレットから azd init コマンドを使用して、テンプレートからローカルの Azure Functions コード プロジェクトを作成できます。

  1. Visual Studio Code で、プロジェクトを作成するフォルダーまたはワークスペースを開きます。

  2. F1 キーを押してコマンド パレットを開き、コマンド Azure Developer CLI (azd): Initialize App (init)を検索して実行し、[テンプレートの選択] を選択します。

  3. メッセージが表示されたら、 Azure Functions with SQL Triggers and Bindingsを検索して選択します。

  4. メッセージが表示されたら、 sqldbchangesなどの一意の環境名を入力します。

このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。 azd では、環境はアプリの一意のデプロイ コンテキストを維持するために使用され、複数を定義できます。 また、Azure で作成するリソース グループの名前の一部でもあります。

このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。 azd では、環境はアプリの一意のデプロイ コンテキストを維持するために使用され、複数を定義できます。 また、Azure で作成するリソース グループの名前の一部でもあります。

このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。 azd では、環境はアプリの一意のデプロイ コンテキストを維持するために使用され、複数を定義できます。 また、Azure で作成するリソース グループの名前の一部でもあります。

アプリをローカルで実行する前に、Azure でリソースを作成する必要があります。

Azure リソースを作成する

このプロジェクトは、 azd provision コマンドを使用して、Flex Consumption プランで関数アプリを作成し、現在のベスト プラクティスに従うその他の必要な Azure リソースを作成するように構成されています。

  1. Visual Studio Code で F1 キーを押してコマンド パレットを開き、コマンド Azure Developer CLI (azd): Sign In with Azure Developer CLIを検索して実行し、Azure アカウントを使用してサインインします。

  2. F1 キーを押してコマンド パレットを開き、コマンド Azure Developer CLI (azd): Provision Azure resources (provision)を検索して実行し、必要な Azure リソースを作成します。

  3. ターミナル ウィンドウでメッセージが表示されたら、次の必須のデプロイ パラメーターを指定します。

    Prompt Description
    使用する Azure サブスクリプションを選択する リソースを作成するサブスクリプションを選択します。
    location deployment パラメーター 新しい Azure リソースを含むリソース グループを作成する Azure リージョン。 現在、Flex 従量課金プランをサポートしているリージョンのみが表示されます。
    vnetEnabled デプロイ パラメーター テンプレートは仮想ネットワーク内でのリソースの作成をサポートしていますが、デプロイとテストを簡略化するために、 Falseを選択します。

azd provision コマンドは、最新のベスト プラクティスに従って、これらのプロンプトに対する応答と Bicep 構成ファイルを使用して、これらの必要な Azure リソースを作成および構成します。

  • Flex 従量課金プランと関数アプリ
  • Azure SQL Database (既定の名前: ToDo)
  • Azure Storage (必須) と Application Insights (推奨)
  • アカウントのアクセス ポリシーとロール
  • マネージド ID を使用したサービス間接続 (格納されている接続文字列の代わり)

プロビジョニング後のフックでは、ローカルで実行するために必要な local.settings.json ファイルも生成されます。 このファイルには、Azure のデータベースに接続するために必要な設定が含まれています。

コードの確認 (省略可能)

このサンプルでは、次の 2 つの関数を定義します。

関数名 コード ファイル トリガーの種類 Description
httptrigger-sql-output sql_output_http_trigger.cs HTTP トリガー 適切に書式設定された JSON ペイロードを受け入れ、SQL 出力バインドを使用して、 ToDo テーブルに行としてオブジェクトを挿入します。
ToDoTrigger sql_trigger.cs SQL トリガー ToDo テーブルで行レベルの変更をリッスンし、変更された行を表すオブジェクトを返します。

ToDoItem型は、ToDoItem.csで定義されます。

関数名 コード ファイル トリガーの種類 Description
http_trigger_sql_output function_app.py HTTP トリガー 適切に書式設定された JSON ペイロードを受け入れ、SQL 出力バインドを使用して、 ToDo テーブルに行としてオブジェクトを挿入します。
httptrigger-sql-output sql_trigger_todo SQL トリガー ToDo テーブルで行レベルの変更をリッスンし、変更された行を表すオブジェクトを返します。

ToDoItem型は、todo_item.pyで定義されます。

関数名 コード ファイル トリガーの種類 Description
httpTriggerSqlOutput sql_output_http_trigger.ts HTTP トリガー 適切に書式設定された JSON ペイロードを受け入れ、SQL 出力バインドを使用して、 ToDo テーブルに行としてオブジェクトを挿入します。
sqlTriggerToDo sql_trigger.ts SQL トリガー ToDo テーブルで行レベルの変更をリッスンし、変更された行を表すオブジェクトを返します。

ToDoItem型は、ToDoItem.tsで定義されます。

どちらの関数も、Microsoft Entra ID 認証を使用して Azure SQL Database インスタンスへの ID ベースの接続を定義するアプリ レベルの AZURE_SQL_CONNECTION_STRING_KEY_* 環境変数を使用します。 これらの環境変数は、 azd provision 操作中に Azure (関数アプリの設定) とローカル (local.settings.json) の両方で自動的に作成されます。

SQL データベースに接続する

Visual Studio Code の SQL Server (mssql) 拡張機能を使用して、新しいデータベースに接続できます。 この拡張機能は、SQL トリガー関数を実行するために、 ToDo テーブルで更新を行うのに役立ちます。

  1. F1 キーを押し、コマンド パレットでコマンド MS SQL: Add Connectionを検索して実行します。

  2. [ 接続] ダイアログで、[ 入力の種類 ] を [ Azure の参照 ] に変更し、残りのオプションを設定します。

    Option 選択 Description
    サーバー あなたのSQL Server インスタンス 既定では、Azure アカウントからアクセスできるすべてのサーバーが表示されます。 サブスクリプションリソース グループ、および場所を使用して、サーバーの一覧をフィルター処理します。
    データベース ToDo プロビジョニング プロセス中に作成されたデータベース。
    認証の種類 Microsoft Entra ID まだサインインしていない場合 は、[サインイン ] を選択して Azure アカウントにサインインします。
    テナント ID 特定のアカウントのテナント。 アカウントに複数のテナントがある場合は、サブスクリプションに適したテナントを選択します。
  3. [ 接続 ] を選択してデータベースに接続します。 接続ではローカル ユーザー アカウントが使用されます。このアカウントには、ホスティング サーバーの管理者アクセス許可が付与され、データベース内の dbo にマップされます。

  4. SQL Server ビューで、接続を見つけて展開し、その後、SQL Server エクスプローラーで新しいサーバーを見つけて展開します。 [ テーブル] を展開し、 ToDo テーブルが存在することを確認します。 存在しない場合は、 azd provision をもう一度実行し、エラーを確認する必要があります。

関数をローカルで実行する

Visual Studio Code は Azure Functions Core ツール と統合され、Azure で新しい関数アプリに発行する前に、ローカル開発コンピューターでこのプロジェクトを実行できます。

  1. F1 キーを押し、コマンド パレットでコマンド Azurite: Startを検索して実行します。

  2. 関数をローカルで開始するには、F5 キーまたは、左側のアクティビティ バーの [実行とデバッグ] アイコンを押します。

    ターミナル パネルに、Core Tools からの出力が表示されます。 アプリは ターミナル パネルで起動し、ローカルで実行されている関数の名前を確認できます。

アプリを実行すると、両方の関数トリガーを検証およびデバッグできます。

SQL 出力バインドに書き込む HTTP トリガー関数を確認するには:

  1. この JSON オブジェクトをコピーします。これは、 test.http プロジェクト ファイルでも確認できます。

    {
      "id": "11111111-1111-1111-1111-111111111111",
      "order": 1,
      "title": "Test Todo Item",
      "url": "https://example.com",
      "completed": false
    }
    

    このデータは、HTTP エンドポイントを呼び出すときに SQL データベースに挿入する行を表します。 出力バインドは、データ オブジェクトをデータベース内の INSERT 操作に変換します。

  2. アプリが実行されている状態で、 Azure ビューの [ワークスペース ] で [ ローカル プロジェクト>Functions] を展開します。

  3. HTTP 関数を右クリック (または macOS では Ctrl キーを押しながらクリック) し、[ 関数の実行] を選択し、コピーした JSON データを貼り付けて、 Enter キーを押します。

    この関数は HTTP 要求を処理し、接続された SQL データベースに項目を書き込み、作成されたオブジェクトを返します。

  4. SQL Server エクスプローラーに戻り、 ToDo テーブルを右クリックし (macOS では Ctrl キーを押しながらクリック)、[ 上位 1000 の選択] を選択します。 クエリを実行すると、挿入または更新された行が返されます。

  5. 手順 3. を繰り返し、同じ ID の同じデータ オブジェクトを再送信します。 今回、出力バインドはUPDATEではなくINSERT操作を実行し、データベース内の既存の行を変更します。

完了したら、ターミナルに 「Ctrl+C 」と入力して Core Tools プロセスを停止します。

Azure にデプロイ

Visual Studio Code から azd deploy コマンドを実行して、Azure で既にプロビジョニングされているリソースにプロジェクト コードをデプロイできます。

  1. F1 キーを押してコマンド パレットを開き、コマンド Azure Developer CLI (azd): Deploy to Azure (deploy)を検索して実行します。

    azd deploy コマンドは、コードをパッケージし、デプロイ コンテナーにデプロイします。 その後、アプリが起動し、デプロイされたパッケージで実行されます。

  2. コマンドが正常に完了すると、アプリは Azure で実行されます。 Endpoint値 (Azure で実行されている関数アプリの URL) を書き留めます。

Azure 上の関数を呼び出す

  1. Visual Studio Code で F1 キーを押し、コマンド パレットでコマンド Azure: Open in portalを検索して実行し、 Function appを選択して、新しいアプリを選択します。 必要に応じて、Azure アカウントでサインインします。

  2. 左側のウィンドウで [ ログ ストリーム ] を選択すると、アプリの Application Insights ログに接続されます。

  3. Visual Studio Code に戻り、Azure で両方の関数を実行します。

  1. F1 キーを押してコマンド パレットを開き、コマンド Azure Functions: Execute Function Now...を検索して実行します。

  2. 一覧からリモート関数アプリを検索して選択し、HTTP トリガー関数を選択します。

  3. 前と同様に、JSON オブジェクト データを Enter ペイロード本文 に貼り付けて、 Enter キーを押します。

    {
      "id": "11111111-1111-1111-1111-111111111111",
      "order": 1,
      "title": "Test Todo Item",
      "url": "https://example.com",
      "completed": false
    }
    

    INSERTではなくUPDATEを実行するには、idを新しい GUID 値に置き換えます。

  4. ポータルに戻り、ログ ウィンドウで実行出力を表示します。

リソースをクリーンアップする

関数アプリと関連リソースの操作が完了したら、次のコマンドを使用して関数アプリとその関連リソースを Azure から削除し、それ以上のコストが発生しないようにすることができます。

azd down --no-prompt

--no-prompt オプションは、確認なしでリソース グループを削除するように azd に指示します。

このコマンドは、ローカル コード プロジェクトには影響しません。