次の方法で共有


クイック スタート: Azure Functions を使用して BLOB ストレージ イベントに応答する

このクイック スタートでは、Visual Studio Code を使用して、Blob Storage コンテナー内のイベントに応答するアプリを構築します。 エミュレーターを使用してローカルでコードをテストした後、Azure Functions の Flex 従量課金プランで実行されている新しいサーバーレス関数アプリにコードをデプロイします。

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

この記事は、Azure Functions の Node.js プログラミング モデルのバージョン 4 に対応しています。

この記事は、Azure Functions の Python プログラミング モデルのバージョン 2 に対応しています。

[前提条件]

  • 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 C# Event Grid Blob Trigger using Azure Developer CLIを検索して選択します。

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

    このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。

  1. メッセージが表示されたら、[ テンプレートの選択] を選択し、 Azure Functions Python Event Grid Blob Trigger using Azure Developer CLIを検索して選択します。

  2. ターミナルでメッセージが表示されたら、 blobevents-pythonなどの一意の環境名を入力します。

    このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。

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

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

    このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。

  1. メッセージが表示されたら、[ テンプレートの選択] を選択し、 Azure Functions Java Event Grid Blob Trigger using Azure Developer CLIを検索して選択します。

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

    このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。

  1. メッセージが表示されたら、[ テンプレートの選択] を選択し、 Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLIを検索して選択します。

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

    このコマンドは、 テンプレート リポジトリ からプロジェクト ファイルをプルし、現在のフォルダーまたはワークスペース内のプロジェクトを初期化します。

azdでは、環境はアプリの一意のデプロイ コンテキストを維持し、複数を定義できます。 また、Azure で作成するリソース グループの名前の一部でもあります。

local.settings.json ファイルを追加する

Functions では、ローカルで実行するときにホストを構成するために、local.settings.json ファイルが必要です。

  1. 次のコマンドを実行して、 src アプリ フォルダーに移動します。

    cd src
    
  1. local.settings.json という名前のファイルを、次の JSON データを含む src フォルダーに作成します。

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. local.settings.json という名前のファイルを、次の JSON データを含む src フォルダーに作成します。

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. local.settings.json という名前のファイルを、次の JSON データを含む src フォルダーに作成します。

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. local.settings.json という名前のファイルを、次の JSON データを含む src フォルダーに作成します。

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. local.settings.json という名前のファイルを、次の JSON データを含む src フォルダーに作成します。

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    

仮想環境を作成してアクティブにする

src フォルダーで、次のコマンドを実行して、.venvという名前の仮想環境を作成してアクティブ化します。

python3 -m venv .venv
source .venv/bin/activate

Python で Venv パッケージが Linux ディストリビューションにインストールされない場合は、次のコマンドを実行します。

sudo apt-get install python3-venv

ローカル ストレージ エミュレーターを設定する

Azure リソースを作成して使用する前に、Azurite エミュレーターを使用してコード プロジェクトをローカルで実行します。

  1. まだインストールしていない場合は、 Azurite をインストールします。

  2. F1 キーを押します。 コマンド パレットで、コマンド Azurite: Start を検索して実行し、ローカル ストレージ エミュレーターを起動します。

  3. Azure 領域で、ワークスペース>アタッチされたストレージ アカウント>ローカル エミュレーターを展開し、右クリック (Mac では Ctrl キーを押しながらクリック) BLOB コンテナーを選択し、[Blob コンテナーの作成...] を選択し、ローカル エミュレーターで次の 2 つの BLOB ストレージ コンテナーを作成します。

    • unprocessed-pdf: トリガーがストレージ イベントを監視するコンテナー。
    • processed-pdf: 関数が処理された BLOB を出力として送信するコンテナー。
  4. [BLOB コンテナー] を展開し、未処理の pdf を右クリック (Mac では Ctrl キーを押しながらクリック) し、[ファイルのアップロード...] を選択し、Enter キーを押してルート ディレクトリを受け入れ、data プロジェクト フォルダーから PDF ファイルをアップロードします。

ローカルで実行する場合は、REST を使用して、イベント サブスクリプションからメッセージを受信する関数をシミュレートすることで、関数をトリガーできます。

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

Visual Studio Code は Azure Functions Core ツール と統合され、Azurite エミュレーターを使用してローカル開発コンピューターでこのプロジェクトを実行できます。 PDFProcessorSTORAGE環境変数は、ストレージ アカウント接続を定義します。ストレージ アカウント接続は、ローカルで実行するときに local.settings.json ファイルで"UseDevelopmentStorage=true"に設定されます。

  1. ターミナルまたはコマンド プロンプトの src プロジェクト フォルダーから次のコマンドを実行します。

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    Functions ホストが起動すると、トリガーの名前とトリガーの種類がターミナル出力に書き込まれます。 Functions では、プロジェクトのルート フォルダーに host.json ファイルが含まれています。

  2. Core Tools が ターミナルで引き続き実行されている状態で、プロジェクトの test.http ファイルを開 き、[要求の送信 ] を選択して、BLOB イベント Webhook にテスト BLOB イベントを送信して ProcessBlobUpload 関数をトリガーします。

    この手順では、ローカルで実行するときにイベント サブスクリプションからのイベントの受信をシミュレートします。ログに書き込まれた要求と処理されたファイル情報が表示されます。 REST クライアントを使用していない場合は、別のセキュリティで保護された REST ツールを使用して、test.httpのペイロードを使用してエンドポイントを呼び出す必要があります。

  3. BLOB コンテナーのワークスペース領域で、 processed-pdf を展開し、関数が PDF ファイルを処理し、 processed- プレフィックスを付けてコピーしたことを確認します。

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

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

ProcessBlobUpload.cs プロジェクト ファイルで Event Grid BLOB トリガーを定義するコードを確認できます。 この関数は、次の方法を示します。

  • BlobTriggerSource = BlobTriggerSource.EventGridを使用してほぼリアルタイムの処理を行う
  • ソース BLOB の BlobClient にバインドし、宛先の BlobContainerClient にバインドする
  • ストリームを使用して BLOB コンテンツを処理し、別のコンテナーにコピーする

function_app.py プロジェクト ファイルで Event Grid BLOB トリガーを定義するコードを確認できます。 この関数は、次の方法を示します。

  • @app.blob_triggersource="EventGrid"を使用してほぼリアルタイムの処理を行う
  • InputStream パラメーターを使用して BLOB コンテンツにアクセスする
  • Azure Storage SDK を使用して、処理されたファイルをコピー先コンテナーにコピーする

processBlobUpload.ts プロジェクト ファイルで Event Grid BLOB トリガーを定義するコードを確認できます。 この関数は、次の方法を示します。

  • app.storageBlob()source: 'EventGrid'を使用してほぼリアルタイムの処理を行う
  • Node.js Azure Storage SDK を使用して BLOB コンテンツにアクセスする
  • ファイルを処理してコピー先コンテナーに非同期的にコピーする

ProcessBlobUpload.java プロジェクト ファイルで Event Grid BLOB トリガーを定義するコードを確認できます。 この関数は、次の方法を示します。

  • @BlobTriggersource = "EventGrid"を使用してほぼリアルタイムの処理を行う
  • BlobInputStream パラメーターを使用して BLOB コンテンツにアクセスする
  • Azure Storage SDK for Java を使用して、処理されたファイルをコピー先コンテナーにコピーする

ProcessBlobUpload/run.ps1 プロジェクト ファイルで Event Grid BLOB トリガーを定義するコードと、対応する function.jsonを確認できます。 この関数は、次の方法を示します。

  • ほぼリアルタイムの処理のために、function.json で "source": "EventGrid" を使用して BLOB トリガーを構成する
  • PowerShell Azure Storage コマンドレットを使用して BLOB コンテンツにアクセスする
  • Azure PowerShell モジュールを使用してファイルを処理し、コピー先コンテナーにコピーする

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

Azure リソースを作成してデプロイする

azd up コマンドを使用して、Flex Consumption プランで、イベント サブスクリプションなどの他の必要な Azure リソースと共に関数アプリを作成します。 インフラストラクチャの準備ができたら、 azd は Azure の新しい関数アプリにプロジェクト コードもデプロイします。

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

  2. プロジェクト ルートで F1 キーを押してコマンド パレットを開きます。 コマンド Azure Developer CLI (azd): Provision and Deploy (up) を検索して実行し、必要な Azure リソースを作成し、コードをデプロイします。

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

    Prompt Description
    使用する Azure サブスクリプションを選択する リソースを作成するサブスクリプションを選択します。
    環境名 アプリの一意のデプロイ コンテキストを維持するために使用される環境。
    Azure の場所 新しい Azure リソースを含むリソース グループを作成する Azure リージョン。 現在、Flex 従量課金プランをサポートしているリージョンのみが表示されます。

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

    • Flex 従量課金プランと関数アプリ
    • BLOB コンテナーを使用する Azure Storage アカウント
    • Application Insights (推奨)
    • アカウントのアクセス ポリシーとロール
    • BLOB イベント用の Event Grid サブスクリプション
    • マネージド ID を使用したサービス間接続 (格納されている接続文字列の代わりに)

    コマンドが正常に完了すると、BLOB が unprocessed-pdf コンテナーに追加されたときに関数をトリガーするように構成されたイベント サブスクリプションを使用して、アプリが Azure で実行されます。

  4. 出力の AZURE_STORAGE_ACCOUNT_NAMEAZURE_FUNCTION_APP_NAME を書き留めます。 これらの名前は、Azure のストレージ アカウントと関数アプリに対してそれぞれ一意です。

デプロイされた関数を確認する

  1. Visual Studio Code で F1 キーを押します。 コマンド パレットで、コマンド Azure Storage: Upload Files...を検索して実行します。 ルート ディレクトリを受け入れ、以前と同様に、 data プロジェクト フォルダーから 1 つ以上の PDF ファイルをアップロードします。

  2. メッセージが表示されたら、( AZURE_STORAGE_ACCOUNT_NAME から) 新しいストレージ アカウントの名前を選択します。 [BLOB コンテナー]>[unprocessed-pdf] を選択します。

  3. F1 キーを押します。 コマンド パレットで、コマンド Azure Storage: Open in Explorerを検索して実行します。 同じストレージ アカウント >Blob Containers>processed-pdf を選択し、 新しいウィンドウで開きます

  4. エクスプローラーで、アップロードした PDF ファイルが関数によって処理されたことを確認します。 出力は、processed-pdf プレフィックスを使用してprocessed- コンテナーに書き込まれます。

Event Grid BLOB トリガーは、アップロードから数秒以内にファイルを処理します。 この速度は、従来のポーリング方式のBLOBトリガーと比較して、このアプローチがほぼリアルタイムで機能することを示しています。

コードを再デプロイする

azd up コマンドを必要な回数実行して、Azure リソースをプロビジョニングし、コード更新プログラムを関数アプリにデプロイします。

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

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

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

関数アプリと関連リソースの操作が完了したら、このコマンドを使用して、関数アプリとその関連リソースを Azure から削除します。 このアクションは、追加のコストの発生を回避するのに役立ちます。

azd down --no-prompt

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

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