Azure Cosmos DB によってトリガーされる関数を作成する

Azure Cosmos DB でデータが追加または変更されたときにトリガーされる関数を Azure portal で作成する方法について説明します。 Azure Cosmos DB の詳細については、Azure Cosmos DB: Azure Functions を使用したサーバーレス データベース コンピューティングに関するページを参照してください。

Note

ポータル内編集は、JavaScript、PowerShell、および C# スクリプト関数でのみサポートされます。 Python のポータル内編集は、従量課金プランで実行されている場合にのみサポートされます。 可能であれば、関数をローカルで開発する必要があります

Azure portal での関数コードの編集に関する制限事項の詳細については、Azure portal での開発の制限事項に関するページを参照してください

前提条件

このチュートリアルを完了するには、以下が必要です。

  • Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

注意

Azure Cosmos DB のバインドは、Azure Cosmos DB for NoSQL で使用する場合にのみサポートされます。 Azure Cosmos DB for Table のサポートは、拡張機能 5.x 以降のテーブル ストレージのバインドを使用して提供されます。 他のすべての Azure Cosmos DB API については、Azure Cosmos DB for MongoDBAzure Cosmos DB for CassandraAzure Cosmos DB for Apache Gremlin などの API 用の静的クライアントを使用して、関数からデータベースにアクセスする必要があります。

Azure へのサインイン

Azure アカウントで Azure Portal にサインインします。

Azure Cosmos DB アカウントを作成する

トリガーを作成する前に、SQL API を使用する Azure Cosmos DB アカウントが必要です。

  1. Azure portal のメニューまたは [ホーム] ページで、 [リソースの作成] を選択します。

  2. Azure Cosmos DB を検索します。 [作成]>[Azure Cosmos DB] を選択します。

  3. [Azure Cosmos DB アカウントの作成] ページで、 Azure Cosmos DB for NoSQL セクション内の [作成] オプションを選択します。

    Azure Cosmos DB には、いくつかの API が用意されています:

    • NoSQL (ドキュメント データ用)
    • PostgreSQL
    • MongoDB (ドキュメント データ用)
    • Apache Cassandra
    • テーブル
    • Apache Gremlin (グラフ データ用)

    NoSQL 用 API の詳細については、「Azure Cosmos DB へようこそ」を参照してください。

  4. [Azure Cosmos DB アカウントの作成] ページで、新しい Azure Cosmos DB アカウントの基本的な設定を入力します。

    設定 説明
    サブスクリプション サブスクリプション名 この Azure Cosmos DB アカウントに使用する Azure サブスクリプションを選択します。
    リソース グループ リソース グループ名 リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの一意の名前を入力します。
    アカウント名 一意の名前 自分の Azure Cosmos DB アカウントを識別するための名前を入力します。 指定した名前に documents.azure.com が付加されて URI が作成されるので、一意の名前を使用してください。 名前に含めることができるのは、英小文字、数字、ハイフン (-) のみです。 3 から 44 文字にする必要があります。
    場所 ユーザーに最も近いリージョン Azure Cosmos DB アカウントをホストする地理的な場所を選択します。 データに最も高速にアクセスできるよう、お客様のユーザーに最も近い場所を使用します。
    容量モード プロビジョニング スループットまたはサーバーレス プロビジョニング スループット モードでアカウントを作成するには、 [Provisioned throughput](プロビジョニング スループット) を選択します。 サーバーレス モードでアカウントを作成するには、 [サーバーレス] を選択します。
    Apply Azure Cosmos DB free tier discount (Azure Cosmos DB Free レベル割引を適用する) [適用] または [適用しない] Azure Cosmos DB Free レベルのアカウントでは、最初の 1000 RU/s と 25 GB のストレージを無料でご利用いただけます。 Free レベルの詳細を確認してください。
    合計アカウント スループットを制限する 選択済みかどうか このアカウントでプロビジョニングできるスループットの総量を制限する。 この制限により、プロビジョニングされたスループットに関連する予期しない料金が回避されます。 この制限は、アカウントの作成後に更新または削除できます。

    Azure サブスクリプションにつき所有できる Free サービス レベルの Azure Cosmos DB アカウントは 1 つまでです。また、アカウントの作成時にオプトインする必要があります。 Free レベル割引を適用するオプションが表示されない場合は、サブスクリプション内の別のアカウントが Free レベルで既に有効になっています。

    Screenshot shows the Create Azure Cosmos DB Account page.

    Note

    [Capacity mode](容量モード) として [サーバーレス] を選択した場合、以下のオプションは利用できません。

    • Apply Free Tier Discount (Free レベルの割引の適用)
    • 合計アカウント スループットを制限する
  5. [グローバル分散] タブで、次の詳細を構成します。 このクイックスタートでは、既定値のままにしておいてかまいません。

    設定 説明
    geo 冗長性 無効化 リージョンをペア リージョンとペアリングすることによる、アカウントでのグローバル配信を有効または無効にします。 アカウントには、後でさらにリージョンを追加できます。
    マルチリージョン書き込み 無効化 マルチリージョン書き込み機能を使用すると、世界中のデータベースとコンテナーで、プロビジョニングされたスループットを利用できます。
    可用性ゾーン 無効にする Availability Zones は、アプリケーションの可用性と回復性をさらに向上させるのに役立ちます。

    Note

    前の [基本] ページで [容量モード] として [サーバーレス] を選択した場合、次のオプションは使用できません:

    • geo 冗長
    • マルチリージョン ライター
  6. 必要に応じて、次のタブでさらに詳細を構成できます:

    • ネットワーク仮想ネットワークからのアクセスを構成します。
    • Backup Policy定期的または継続的のいずれかのバックアップ ポリシーを構成します。
    • 暗号化。 サービス マネージド キーまたはカスタマー マネージド キーのいずれかを使用します。
    • タグ。 タグは名前と値のペアで、同じタグを複数のリソースやリソース グループに適用することでリソースを分類したり、統合した請求を表示したりできるようにします。
  7. [Review + create](レビュー + 作成) を選択します。

  8. アカウントの設定を確認し、 [作成] を選択します。 アカウントの作成には数分かかります。 ポータル ページに "デプロイが完了しました" と表示されるまで待ちます。

    Screenshot shows that your deployment is complete.

  9. [リソースに移動] を選択し、Azure Cosmos DB アカウント ページに移動します。

    Screenshot shows the Azure Cosmos DB account page.

Azure で関数アプリを作成する

  1. Azure portal のメニューまたは [ホーム] ページから [リソースの作成] を選択します。

  2. [新規] ページで、 [計算]>、 [関数アプリ] の順に選択します。

  3. [基本] ページで、下の表に指定されている関数アプリの設定を使用します。

    設定 提案された値 説明
    サブスクリプション 該当するサブスクリプション 新しい関数アプリを作成するサブスクリプション。
    リソース グループ myResourceGroup 関数アプリを作成する新しいリソース グループの名前。 既存のリソース グループに新しい関数アプリを作成する際の既知の制限があるため、新しいリソース グループを作成する必要があります。
    関数アプリ名 グローバルに一意の名前 新しい関数アプリを識別する名前。 有効な文字は、a-z (大文字と小文字の区別をしない)、0-9、および -です。
    コードまたはコンテナー イメージをデプロイしますか? コード コード ファイルまたは Docker コンテナーの発行オプション。
    ランタイム スタック 優先言語 お気に入りの関数プログラミング言語をサポートするランタイムを選択します。 ポータル内編集は、JavaScript、PowerShell、Python、TypeScript、C# スクリプトでのみ利用できます。 C# クラス ライブラリ、Java の関数はローカルで開発する必要があります。
    バージョン バージョン番号 インストールされているランタイムのバージョンを選択します。
    リージョン 優先リージョン 自分の近く、または関数がアクセスできる他のサービスの近くのリージョンを選択します。
    オペレーティング システム Windows オペレーティング システムは、ランタイム スタックの選択に基づいてあらかじめ選択されますが、必要に応じて設定を変更できます。 ポータルでの編集は Windows でのみサポートされます。 コンテナーの発行は Linux でのみサポートされています。
    ホスティング オプションとプラン 従量課金プラン (サーバーレス) 関数アプリにどのようにリソースが割り当てられるかを定義するホスティング プラン。 既定の [従量課金プラン] では、リソースは関数の必要に応じて動的に追加されます。 このサーバーレスのホスティングでは、関数が実行された時間にのみ課金されます。 Premium プランでは、動的スケーリングも提供されます。 App Service プランで実行する場合は、関数アプリのスケーリングを管理する必要があります。
  4. [ストレージ] タブで新しいストレージ アカウントを作成し、[監視] タブで新しい Application Insight インスタンスを作成する既定のオプションを受け入れます。既存のストレージ アカウントまたは Application Insights インスタンスを使用することもできます。

  5. [確認と作成] を選択して選択したアプリ設定をレビューし、[作成] を選択して関数アプリをプロビジョニングおよびデプロイします。

  6. ポータルの右上隅の [通知] アイコンを選択し、"デプロイメントに成功しました" というメッセージが表示されるまで待ちます。

  7. [リソースに移動] を選択して、新しい関数アプリを確認します。 また、 [ダッシュボードにピン留めする] を選択することもできます。 ピン留めすると、ダッシュボードからこの関数アプリ リソースに戻るのが容易になります。

    Screenshot of deployment notification.

次に、新しい Function App で関数を作成します。

Azure Cosmos DB のトリガーの作成

  1. 関数アプリで [概要] を選択し、[関数] で [+ 作成] を選択します。

  2. [テンプレートの選択] で下にスクロールし、Azure Cosmos DB トリガー テンプレートを選択します。

  3. [テンプレートの詳細] で、次の表に示すように設定を使用して新しいトリガーを構成し、[作成] を選択します。

    設定 提案された値 説明
    新しい関数 既定名値を受け入れる 関数の名前です。
    Azure Cosmos DB アカウント接続 既定の新しい名前を受け入れる [新規] 、前に作成したデータベース アカウント[OK] の順に選択します。 この操作により、アカウント接続のアプリケーション設定が作成されます。 この設定は、データベースへの接続へのバインディングによって使用されます。
    データベース名 タスク 監視対象のコレクションが含まれているデータベースの名前。
    [コレクション名] アイテム 監視対象のコレクションの名前。
    リースのコレクション名 リース リースを格納するコレクションの名前。
    リースのコレクションが存在しない場合、作成します はい リースのコレクションの存在をチェックし、自動的に作成します。

    Azure は、指定された値に基づいて Azure Cosmos DB によってトリガーされる関数を作成します。

  4. テンプレートベースの関数コードを表示するには、 [Code + Test](コード + テスト) を選択します。

    Azure Cosmos DB function template in C#

    この関数テンプレートは、ドキュメント数と最初のドキュメント ID をログに書き込みます。

次に、Azure Cosmos DB アカウントに接続し、Tasks データベースに Items コンテナーを作成します。

Items コンテナーの作成

  1. ブラウザーの新しいタブで、Azure Portal の 2 つ目のインスタンスを開きます。

  2. ポータルの左側のアイコン バーを展開し、検索フィールドに「cosmos」と入力して、 [Azure Cosmos DB] を選択します。

    Search for the Azure Cosmos DB service

  3. Azure Cosmos DB アカウントを選択してから、 [データ エクスプローラー] を選択します。

  4. [SQL API]Tasks データベースを選択し、 [新しいコンテナー] を選択します。

    Create a container

  5. [コンテナーの追加] で、次の画像の下の表に示したように設定します。

    Define the Tasks container

    設定 提案された値 説明
    データベース ID タスク 新しいデータベースの名前。 これは、関数バインドで定義された名前と一致する必要があります。
    コンテナー ID アイテム 新しいコンテナーの名前。 これは、関数バインドで定義された名前と一致する必要があります。
    [パーティション キー] /category 各パーティションに均等にデータを分散するパーティション キー。 効率の良いコンテナーを作成するためには、正しいパーティション キーを選択することが大切です。
    スループット 400 RU 既定値を使用します。 待ち時間を短縮する場合、後でスループットをスケールアップできます。
  6. [OK] をクリックして、Items コンテナーを作成します。 コンテナーが作成されるまで多少時間がかかる場合があります。

関数バインドで指定されたコンテナーが作成されたら、この新しいコンテナーに項目を追加することで関数をテストできます。

関数をテストする

  1. データ エクスプローラーで新しい Items コンテナーを展開し、 [Items](項目) を選択して、 [New Item](新しい項目) を選択します。

    Create an item in Items container

  2. 新しい項目の内容を次の内容に置き換えて、 [保存] を選択します。

    {
        "id": "task1",
        "category": "general",
        "description": "some task"
    }
    
  3. ポータルでご利用の関数が表示されている、ブラウザーの 1 つ目のタブに切り替えます。 関数ログを展開し、新しいドキュメントがその関数をトリガーしたことを確認します。 task1 のドキュメント ID の値がログに書き込まれていることを確認してください。

    View message in the logs.

  4. (省略可能) ドキュメントに戻り、変更を加え、 [更新] をクリックします。 次に、関数ログに戻り、この更新によっても関数がトリガーされたことを確認します。

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

このコレクションの他のクイックスタートは、このクイックスタートに基づいています。 クイック スタート、チュートリアル、またはこのクイック スタートで作成したサービスのいずれかでの作業を引き続き行う場合は、リソースをクリーンアップしないでください。

Azure の "リソース" とは、関数アプリ、関数、ストレージ アカウントなどのことを指します。 これらは "リソース グループ" に分類されており、グループを削除することでグループ内のすべてのものを削除できます。

これで、これらのクイックスタートを完了するためのリソースが作成されました。 アカウントの状態サービスの価格によっては、これらのリソースに対して課金される可能性があります。 リソースの必要がなくなった場合にそれらを削除する方法を、次に示します。

  1. Azure Portal で、 [リソース グループ] ページに移動します。

    関数アプリ ページからこのページに移動するには、[概要] タブを選択し、[リソース グループ] の下にあるリンクを選択します。

    Screenshot that shows select the resource group to delete from the function app page.

    ダッシュボードからこのページに移動するには、 [リソース グループ] を選択してから、この記事用に使用したリソース グループを選択します。

  2. [リソース グループ] ページで、含まれているリソースの一覧を確認し、削除するものであることを確認します。

  3. [リソース グループの削除] を選択し、指示に従います。

    削除には数分間かかることがあります。 実行されると、通知が数秒間表示されます。 ページの上部にあるベルのアイコンを選択して、通知を表示することもできます。

次のステップ

Azure Cosmos DB でドキュメントが追加または変更されたときに実行される関数を作成しました。 Azure Cosmos DBのトリガーの詳細については、「Azure Functions の Azure Cosmos DB バインド」をご覧ください。

最初の関数を作成した後は、メッセージを Storage キューに書き込む出力バインディングをこの関数に追加しましょう。