次の方法で共有


クイック スタート: Azure Functions を使用して Azure Cosmos DB のデータベースの変更に対応する

このクイック スタートでは、Visual Studio Code を使用して、Azure Cosmos DB の No SQL データベースのデータベース変更に応答するアプリを構築します。 コードをローカルでテストした後、Azure Functions の Flex 従量課金プランで実行して作成した新しいサーバーレス関数アプリにデプロイします。

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

Important

Azure Cosmos DB での変更に対応する 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)を検索して実行し、[テンプレートの選択] を選択します。

    azdが現在のフォルダーまたはワークスペースを初期化している間、若干の遅延が発生する可能性があります。

  1. メッセージが表示されたら、[ テンプレートの選択] を選択し、 Azure Functions with Cosmos DB Bindings (.NET)を検索して選択します。

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

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

  1. メッセージが表示されたら、[ テンプレートの選択] を選択し、 Azure Functions TypeScript CosmosDB triggerを検索して選択します。

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

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

  1. メッセージが表示されたら、[ テンプレートの選択] を選択し、 Azure Functions Python with CosmosDB triggers and bindings...を検索して選択します。

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

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

  1. ローカル オペレーティング システムに応じて、次のコマンドを実行して、構成スクリプトに必要なアクセス許可を付与します。

    十分な特権で次のコマンドを実行します。

    chmod +x ./infra/scripts/*.sh
    

アプリをローカルで実行する前に、Azure でリソースを作成する必要があります。 このプロジェクトでは、Azure Cosmos DB のローカル エミュレーションは使用されません。

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 Cosmos DB アカウント
    • Azure Storage (必須) と Application Insights (推奨)
    • ご自分のアカウントのアクセス ポリシーとロール
    • マネージド ID を使用したサービス間接続 (格納されている接続文字列の代わり)

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

    ヒント

    プロビジョニング中に手順が失敗した場合は、問題を解決した後、 azd provision コマンドをもう一度再実行できます。

    コマンドが正常に完了したら、プロジェクト コードをローカルで実行し、Azure の Azure Cosmos DB データベースでトリガーできます。

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

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

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

  2. 関数をローカルで開始するには、F5 キーまたは、左側のアクティビティ バーの [実行とデバッグ] アイコンを押します。 ターミナル パネルに、Core Tools からの出力が表示されます。 アプリは ターミナル パネルで起動し、ローカルで実行されている関数の名前を確認できます。

    Windows での実行に問題がある場合、Visual Studio Code の既定のターミナルが WSL Bash に設定されていないことをご確認ください。

  3. Core Tools が ターミナルで実行されている状態で、 F1 キーを押し、コマンド パレットでコマンド NoSQL: Create Item... を検索して実行し、 document-db データベースと documents コンテナーの両方を選択します。

  4. 新しい Item.json ファイルの内容を次の JSON データに置き換え、[保存] を選択します。

    {
        "id": "doc1", 
        "title": "Sample document", 
        "content": "This is a sample document for testing my Azure Cosmos DB trigger in Azure Functions."
    } 
    

    [保存] を選択すると、ターミナルで関数の実行が表示され、ローカル ドキュメントが更新され、サービスによって追加されたメタデータが含まれます。

  5. 完了したら、ターミナル ウィンドウで Ctrl + C キーを押して、func.exe ホスト プロセスを停止します。

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

この関数は、Azure Cosmos DB NoSQL データベースの変更フィードに基づいてトリガーされます。 これらの環境変数は、トリガーが変更フィードを監視する方法を構成します。

  • COSMOS_CONNECTION__accountEndpoint: Cosmos DB アカウント エンドポイント
  • COSMOS_DATABASE_NAME: 監視するデータベースの名前
  • COSMOS_CONTAINER_NAME: 監視するコンテナーの名前

これらの環境変数は、 azd provision 操作中に Azure (関数アプリの設定) とローカル (local.settings.json) の両方で自動的に作成されます。

CosmosTrigger.cs プロジェクト ファイルで Azure Cosmos DB トリガーを定義するコードを確認できます。

cosmos_trigger.ts プロジェクト ファイルで Azure Cosmos DB トリガーを定義するコードを確認できます。

function_app.py プロジェクト ファイルで Azure Cosmos DB トリガーを定義するコードを確認できます。

関数コードをローカルで確認して確認したら、次にプロジェクトを Azure に発行します。

Azure にデプロイ

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

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

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

    コマンドが正常に完了すると、アプリは Azure で実行されます。

Azure 上の関数を呼び出す

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

    このコマンドを実行すると、Azure portal で新しい関数アプリが開きます。

  2. メイン ページの [ 概要 ] タブで、関数アプリ名を選択し、[ ログ ] タブを選択します。

  3. Visual Studio Code の NoSQL: Create Item コマンドを使用して、前と同様にドキュメントをコンテナーに再度追加します。

  4. 監視対象コンテナー内の更新によって関数がトリガーされることを再度確認します。

コードを再デプロイする

azd deploy コマンドは、コード更新プログラムを関数アプリにデプロイする必要がある回数実行できます。

デプロイされたコード ファイルは常に最新のデプロイ パッケージによって上書きされます。

azd プロンプトに対する最初の応答と、azd によって生成された環境変数は、名前付き環境にローカルに格納されます。 azd env get-values コマンドを使用して、Azure リソースの作成時に使用された環境内のすべての変数を確認します。

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

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

azd down --no-prompt

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

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