チュートリアル: イベント サブスクリプションを使用して BLOB コンテナーで Azure Functions をトリガーする
以前のバージョンの Azure Functions Blob Storage トリガーは、変更についてストレージ コンテナーをポーリングします。 さらに新しいバージョン (5.x 以降) の Blob Storage 拡張機能は、代わりにコンテナーで Event Grid イベント サブスクリプションを使用します。 このイベント サブスクリプションでは、サブスクライブしているコンテナーで変更が発生するとすぐに関数がトリガーされるので、待ち時間が短縮されます。
この記事では、BLOB がコンテナーに追加されたときに発生するイベントに基づいて実行される関数を作成する方法について説明します。 Visual Studio Code を使ってローカル環境で開発を行い、プロジェクトを Azure にデプロイする前にコードを検証します。
- 新しいプロジェクトで Blob Storage によってトリガーされるイベント ベースの関数を作成します。
- ローカル環境の Visual Studio Code 内で Azurite エミュレーターを使って検証します。
- Azure の新しいストレージ アカウントに Blob Storage コンテナーを作成します。
- Flex 従量課金プランで関数アプリを作成します。
- 新しい BLOB コンテナーへのイベント サブスクリプションを作成します。
- Azure に関数コードをデプロイして検証します。
この記事は、Azure Functions の Node.js プログラミング モデルのバージョン 4 に対応しています。
この記事は、Azure Functions の Python プログラミング モデルのバージョン 2 に対応しています。
この記事で作成する C# アプリは分離ワーカー モードで実行され、.NET 8.0 をサポートします。
ヒント
このチュートリアルでは、Flex 従量課金プランで実行されるアプリを作成する方法について説明します。 Flex 従量課金プランでは、BLOB ストレージ トリガーのイベント ベースのバージョンのみがサポートされます。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
サポートされているプラットフォームのいずれかにインストールされた Visual Studio Code。
Visual Studio Code 用の C# 拡張機能。
Visual Studio Code 用 Azure Functions 拡張機能。
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Node.js 14.x 以降。
node --version
コマンドを使用して、現在のバージョンを確認してください。サポートされているプラットフォームのいずれかにインストールされた Visual Studio Code。
Visual Studio Code 用 Azure Functions 拡張機能。 この拡張機能では、初めてローカルで関数を実行するときに、Azure Functions Core Tools がインストールされます。
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
サポートされているプラットフォームのいずれかにインストールされた Visual Studio Code。
Visual Studio Code 用 Azure Functions 拡張機能。
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Azure Functions でサポートされているバージョンの Python。 詳細については、「Python のインストール方法」を参照してください。
サポートされているプラットフォームのいずれかにインストールされた Visual Studio Code。
Visual Studio Code 用の Python 拡張機能。
Visual Studio Code 用 Azure Functions 拡張機能。
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Java 開発キット、バージョン 8、11、17、または 21 (Linux)。
Apache Maven バージョン 3.0 以降。
サポートされているプラットフォームのいずれかにインストールされた Visual Studio Code。
Visual Studio Code 用 Azure Functions 拡張機能。
- Visual Studio Code 用の Azure Storage 拡張機能。
Note
Visual Studio Code 用の Azure Storage 拡張機能は、現在プレビュー段階です。
BLOB によってトリガーされる関数を作成する
Visual Studio Code を使って Blob Storage トリガー関数を作成するときは、新しいプロジェクトも作成します。 通常のポーリングされるコンテナーを使うのではなく、ソースとしてイベント サブスクリプションを使うように関数を編集する必要があります。
Visual Studio Code で F1 キーを押してコマンド パレットを開き、「
Azure Functions: Create Function...
」と入力して、[新しいプロジェクトの作成] を選びます。プロジェクト ワークスペースで、ディレクトリの場所を選択します。 新しいフォルダーを作成するか、またはプロジェクト ワークスペースの空のフォルダーを選択するようにしてください。
既にワークスペースの一部になっているプロジェクト フォルダーは選択しないでください。
- プロンプトで、次の情報を指定します。
Prompt アクション 言語を選択する [ C#
] を選択します。Select a .NET runtime (.NET ランタイムを選択してください) [ .NET 8.0 Isolated LTS
] を選択します。Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [ Azure Blob Storage trigger (using Event Grid)
] を選択します。Provide a function name (関数名を指定してください) 「 EventGridBlobTrigger
」と入力します。Provide a namespace (名前空間を指定してください) 「 My.Functions
」と入力します。Select setting from "local.settings.json" ("local.settings.json" から設定を選択する) [ Create new local app setting
] を選択します。サブスクリプションを選択してください 必要に応じて、サブスクリプションを選択します。 ストレージ アカウントを選んでください ローカル ストレージには Azurite エミュレーターを使います。 トリガーが監視するストレージ アカウント内のパス 既定値 samples-workitems
を受け入れます。Select how you would like to open your project (プロジェクトを開く方法を選択してください) [ Open in current window
] を選択します。Prompt アクション 言語を選択する [ Python
] を選択します。Python プログラミング モデルを選択する Model V2
を選択仮想環境を作成する Python インタープリターを選択する 好みの Python インタープリターを選択します。 オプションが表示されない場合は、Python バイナリへの完全なパスを入力します。 Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [ Blob trigger
] を選択します。 (イベント ベースのテンプレートはまだ使用できません)。Provide a function name (関数名を指定してください) 「 EventGridBlobTrigger
」と入力します。トリガーが監視するストレージ アカウント内のパス 既定値 samples-workitems
を受け入れます。Select setting from "local.settings.json" ("local.settings.json" から設定を選択する) [ Create new local app setting
] を選択します。サブスクリプションを選択してください 必要に応じて、サブスクリプションを選択します。 ストレージ アカウントを選んでください ローカル ストレージには Azurite エミュレーターを使います。 Select how you would like to open your project (プロジェクトを開く方法を選択してください) [ Open in current window
] を選択します。Prompt アクション 言語を選択する [ Java
] を選択します。Select a version of Java (Java のバージョンを選択してください) Java 11
またはJava 8
(Azure で関数が実行される、ローカルで確認した Java のバージョン) を選択します。Provide a group ID (グループ ID を指定してください) [ com.function
] を選択します。Provide an artifact ID (成果物 ID を指定してください) EventGridBlobTrigger
(または既定値) を選択します。Provide a version (バージョンを指定してください) [ 1.0-SNAPSHOT
] を選択します。Provide a package name (パッケージ名を指定してください) [ com.function
] を選択します。Provide an app name (アプリ名を指定してください) EventGridBlobTrigger
で始まる生成された名前を受け入れます。Select the build tool for Java project (Java プロジェクトのビルド ツールを選択してください) [ Maven
] を選択します。Select how you would like to open your project (プロジェクトを開く方法を選択してください) [ Open in current window
] を選択します。HTTP によってトリガーされる関数 (
HttpExample
) が自動的に作成されます。 この関数は使用せず、代わりに新しい関数を作成する必要があります。プロンプト アクション Select a language for your function project (関数プロジェクトの言語を選択してください) [ TypeScript
] を選択します。TypeScript プログラミング モデルを選択する [ Model V4
] を選択します。Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [ Azure Blob Storage trigger (using Event Grid)
] を選択します。Provide a function name (関数名を指定してください) 「 EventGridBlobTrigger
」と入力します。Select setting from "local.settings.json" ("local.settings.json" から設定を選択する) [ Create new local app setting
] を選択します。サブスクリプションを選択してください 必要に応じて、サブスクリプションを選択します。 ストレージ アカウントを選んでください ローカル ストレージには Azurite エミュレーターを使います。 トリガーが監視するストレージ アカウント内のパス 既定値 samples-workitems
を受け入れます。Select how you would like to open your project (プロジェクトを開く方法を選択してください) [ Open in current window
] を選択します。Prompt アクション Select a language for your function project (関数プロジェクトの言語を選択してください) [ JavaScript
] を選択します。JavaScript プログラミング モデルを選択する [ Model V4
] を選択します。Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [ Azure Blob Storage trigger (using Event Grid)
] を選択します。Provide a function name (関数名を指定してください) 「 eventGridBlobTrigger
」と入力します。Select setting from "local.settings.json" ("local.settings.json" から設定を選択する) [ Create new local app setting
] を選択します。サブスクリプションを選択してください 必要に応じて、サブスクリプションを選択します。 ストレージ アカウントを選んでください ローカル ストレージには Azurite エミュレーターを使います。 トリガーが監視するストレージ アカウント内のパス 既定値 samples-workitems
を受け入れます。Select how you would like to open your project (プロジェクトを開く方法を選択してください) [ Open in current window
] を選択します。Prompt アクション Select a language for your function project (関数プロジェクトの言語を選択してください) [ PowerShell
] を選択します。Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [ Azure Blob Storage trigger (using Event Grid)
] を選択します。Provide a function name (関数名を指定してください) 「 EventGridBlobTrigger
」と入力します。Select setting from "local.settings.json" ("local.settings.json" から設定を選択する) [ Create new local app setting
] を選択します。サブスクリプションを選択してください 必要に応じて、サブスクリプションを選択します。 ストレージ アカウントを選んでください ローカル ストレージには Azurite エミュレーターを使います。 トリガーが監視するストレージ アカウント内のパス 既定値 samples-workitems
を受け入れます。Select how you would like to open your project (プロジェクトを開く方法を選択してください) [ Open in current window
] を選択します。
コマンド パレットで「
Azure Functions: Create Function...
」と入力し、EventGridBlobTrigger
を選択します。 このテンプレートが表示されない場合は、最初に [Change template filter]\(テンプレート フィルターの変更\)>[すべて] を選択します。プロンプトで、次の情報を指定します。
Prompt アクション Provide a package name (パッケージ名を指定してください) [ com.function
] を選択します。Provide a function name (関数名を指定してください) 「 EventGridBlobTrigger
」と入力します。Select setting from "local.settings.json" ("local.settings.json" から設定を選択する) [ Create new local app setting
] を選択します。サブスクリプションを選択してください サブスクリプションを選択します。 ストレージ アカウントを選んでください ローカル ストレージには Azurite エミュレーターを使います。 トリガーが監視するストレージ アカウント内のパス 既定値 samples-workitems
を受け入れます。
これで、Blob Storage コンテナー内のイベントでトリガーできる関数が作成されました。
トリガー ソースを更新する
最初に、トリガー ソースを既定の BLOB トリガー ソース (コンテナー ポーリング) からイベント サブスクリプション ソースに切り替える必要があります。
function_app.py プロジェクト ファイルを開くと、
blob_trigger
デコレーターが適用されたEventGridBlobTrigger
関数の定義が表示されます。source = "EventGrid"
を追加してデコレーターを更新します。 これで関数は次のようになっているはずです。@app.blob_trigger(arg_name="myblob", source="EventGrid", path="samples-workitems", connection="<STORAGE_ACCOUNT>") def EventGridBlobTrigger(myblob: func.InputStream): logging.info(f"Python blob trigger function processed blob" f"Name: {myblob.name}" f"Blob Size: {myblob.length} bytes")
この定義で、
source = "EventGrid"
は、samples-workitems
BLOB コンテナーへのイベント サブスクリプションが、トリガーを開始するイベントのソースとして使用されることを示します。
(省略可能) コードを確認する
生成された EventGridBlobTrigger.cs
ファイルを開くと、次のような EventGridBlobTrigger
関数の定義が表示されます。
[Function(nameof(EventGridBlobTriggerCSharp))]
public async Task Run([BlobTrigger("PathValue/{name}", Source = BlobTriggerSource.EventGrid, Connection = "ConnectionValue")] Stream stream, string name)
{
using var blobStreamReader = new StreamReader(stream);
var content = await blobStreamReader.ReadToEndAsync();
_logger.LogInformation($"C# Blob Trigger (using Event Grid) processed blob\n Name: {name} \n Data: {content}");
}
この定義で、Source = BlobTriggerSource.EventGrid
は、(例 PathValue
の) BLOB コンテナーへのイベント サブスクリプションが、トリガーを開始するイベントのソースとして使用されることを示します。
生成された EventGridBlobTrigger.java
ファイルを開くと、次のような EventGridBlobTrigger
関数の定義が表示されます。
@FunctionName("EventGridBlobTrigger")
@StorageAccount("<STORAGE_ACCOUNT>")
public void run(
@BlobTrigger(name = "content", source = "EventGrid", path = "samples-workitems/{name}", dataType = "binary") byte[] content,
@BindingName("name") String name,
final ExecutionContext context
) {
context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n Size: " + content.length + " Bytes");
}
この定義で、source = EventGrid
は、samples-workitems
BLOB コンテナーへのイベント サブスクリプションが、トリガーを開始するイベントのソースとして使用されることを示します。
EventGridBlobTrigger
フォルダーで、function.json
ファイルを開き、type
が blobTrigger
で source
が EventGrid
の次のようなバインド定義を見つけます。
{
"bindings": [
{
"name": "InputBlob",
"type": "blobTrigger",
"direction": "in",
"path": "samples-workitems/{name}",
"source": "EventGrid",
"connection":""
}
]
}
path
は、samples-workitems
BLOB コンテナーがトリガーを開始するイベントのソースとして使用されることを示します。
生成された EventGridBlobTrigger.js
ファイルを開くと、次のような関数の定義が表示されます。
const { app } = require('@azure/functions');
app.storageBlob('storageBlobTrigger1', {
path: 'samples-workitems/{name}',
connection: 'MyStorageAccountAppSetting',
source: 'EventGrid',
handler: (blob, context) => {
context.log(
`Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
);
},
});
この定義で、EventGrid
の source
は、samples-workitems
BLOB コンテナーへのイベント サブスクリプションが、トリガーを開始するイベントのソースとして使用されることを示します。
生成された EventGridBlobTrigger.ts
ファイルを開くと、次のような関数の定義が表示されます。
import { app, InvocationContext } from '@azure/functions';
export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
context.log(
`Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
);
}
app.storageBlob('storageBlobTrigger1', {
path: 'samples-workitems/{name}',
connection: 'MyStorageAccountAppSetting',
source: 'EventGrid',
handler: storageBlobTrigger1,
});
この定義で、EventGrid
の source
は、samples-workitems
BLOB コンテナーへのイベント サブスクリプションが、トリガーを開始するイベントのソースとして使用されることを示します。
Storage 拡張機能をアップグレードする
Event Grid ベースの Blob Storage トリガーを使うには、Azure Functions Storage 拡張機能のバージョン 5.x 以降が必要です。
必要な拡張機能のバージョンでプロジェクトをアップグレードするには、ターミナル ウィンドウでこの dotnet add package
コマンドを実行します。
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
host.json プロジェクト ファイルを開き、
extensionBundle
要素を確認します。extensionBundle.version
が3.3.0
以降でない場合は、extensionBundle
要素を次のバージョンに置き換えます。"extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.0.0, 5.0.0)" }
ローカル ストレージ エミュレーションを準備する
ローカル環境で実行するときは、Visual Studio Code は Azurite を使って Azure Storage サービスをエミュレートします。 ローカル環境での開発とテストの間は、Azurite を使って Azure Blob Storage サービスをエミュレートします。
まだ行っていない場合は、Visual Studio Code 用の Azurite v3 拡張機能をインストールします。
local.settings.json ファイルで
AzureWebJobsStorage
に対して"UseDevelopmentStorage=true"
が設定されていることを確認します。これは、ローカル環境で実行するときは、実際のストレージ アカウント接続ではなく Azurite を使うよう Core Tools に指示します。F1 キーを押してコマンド パレットを開き、「
Azurite: Start Blob Service
」と入力して Enter キーを押すと、Azurite Blob Storage サービス エミュレーターが起動します。アクティビティ バーで Azure アイコンを選び、[ワークスペース]>[接続されているストレージ アカウント]>[ローカル エミュレーター] を展開します。[BLOB コンテナー] を右クリックして [BLOB コンテナーの作成] を選び、名前「
samples-workitems
」を入力して Enter キーを押します。[BLOB コンテナー]>samples-workitems を展開して、[ファイルのアップロード] を選びます。
ローカル環境でエミュレートされたコンテナーにアップロードするファイルを選びます。 このファイルは、関数コードを検証してデバッグするため、後で関数によって処理されます。 テキスト ファイルは、BLOB トリガー テンプレート コードで最適に動作する場合があります。
関数をローカルで実行する
エミュレートされたストレージ内のファイルを使うと、関数を実行して、Event Grid サブスクリプションによって発生するイベントをシミュレートできます。 トリガーに渡されるイベント情報は、ローカル コンテナーに追加するファイルによって異なります。
ブレークポイントを設定し、F5 キーを押してローカル デバッグ用にプロジェクトを開始します。 ターミナル ウィンドウで Azure Functions Core Tools が実行されている必要があります。
Azure 領域に戻り、[ワークスペース]>[ローカル プロジェクト]>[関数] を展開します。関数を右クリックして、[今すぐ関数を実行] を選びます。
要求本文のダイアログで、「
samples-workitems/<TEST_FILE_NAME>
」と入力します。<TEST_FILE_NAME>
は、ローカル ストレージ エミュレーターにアップロードしたファイルの名前に置き換えます。Enter キーを押して関数を実行します。 指定した値は、ローカル エミュレーター内の BLOB へのパスです。 この文字列は、要求ペイロードでトリガーに渡されます。これは、イベント サブスクリプションが関数を呼び出して BLOB がコンテナーに追加されていることを報告するときのペイロードをシミュレートします。
この関数の実行の出力を確認します。 出力では、ログされたファイルの名前とその内容が示されている必要があります。 ブレークポイントを設定した場合は、実行を続行することが必要な場合があります。
関数コードをローカルで正常に検証したので、次は Azure の新しい関数アプリにプロジェクトを発行します。
Azure ストレージ アカウントを準備する
Azure Storage へのイベント サブスクリプションには、汎用 v2 ストレージ アカウントが必要です。 Visual Studio Code 用の Azure Storage 拡張機能を使って、このストレージ アカウントを作成できます。
Visual Studio Code で F1 キーをもう一度押してコマンド パレットを開き、「
Azure Storage: Create Storage Account...
」と入力します。 メッセージが表示されたら、次の情報を指定します。プロンプト アクション 新しいストレージ アカウントの名前を入力してください グローバルに一意な名前を付けます。 ストレージ アカウント名は、3 - 24 文字の長さで、小文字と数字のみが含まれている必要があります。 簡単に識別できるよう、リソース グループと関数アプリに同じ名前を使います。 Select a location for new resources (新しいリソースの場所を選択してください) パフォーマンスを向上させるために、最寄りのリージョンを選択してください。 この拡張機能により、指定された名前を持つ汎用 v2 ストレージ アカウントが作成されます。 このストレージ アカウントを含むリソース グループにも同じ名前が使用されます。 Event Grid ベースの Blob Storage トリガーには、汎用 v2 ストレージ アカウントが必要です。
F1 キーをもう一度押し、コマンド パレットで「
Azure Storage: Create Blob Container...
」と入力します。 メッセージが表示されたら、次の情報を指定します。プロンプト アクション リソースの選択 作成した汎用 v2 ストレージ アカウントを選びます。 新しい BLOB コンテナーの名前を入力してください 「 samples-workitems
」と入力します。これは、コード プロジェクトで参照されるコンテナー名です。
関数アプリを実行するにはストレージ アカウントも必要です。 わかりやすくするため、このチュートリアルでは、BLOB トリガーと関数アプリに同じストレージ アカウントを使います。 ただし、運用環境では、関数アプリで別のストレージ アカウントを使用することが必要になる場合があります。 詳細については、「Azure Functions のストレージに関する考慮事項」を参照してください。
Function App の作成
次の手順のようにして、Flex 従量課金プランで関数アプリを作成します。 アプリが Flex 従量課金プランでホストされている場合は、Blob Storage トリガーでイベント サブスクリプションを使う必要があります。
コマンド パレットに「Azure Functions: Create function app in Azure...(Advanced)」と入力します。
プロンプトに従って、次の情報を入力します。
Prompt [選択] 関数アプリにグローバルで一意の名前を入力します。 新しい関数アプリを識別するグローバルに一意の名前を入力し、Enter キーを選択します。 関数アプリ名の有効な文字は、 a-z
、0-9
、-
です。Select a hosting plan. (ホスティング プランを選択してください。) [Flex Consumption]\(Flex 従量課金\) を選択します。 ランタイム スタックを選択します。 ローカル環境で実行していた言語スタックとバージョンを選びます。 新しいリソース用のリソース グループの選択。 ストレージ アカウントを作成した既存のリソース グループを選びます。 新しいリソースの場所の選択。 最寄りの、または関数がアクセスする他のサービスの近くにあるサポートされているリージョン内の場所を選択します。 サポートされていないリージョンは表示されません。 詳細については、「現在サポートされているリージョンを表示する」を参照してください。 ストレージ アカウントを選択します。 作成したストレージ アカウントの名前を選びます。 Select an Application Insights resource for your app. (アプリの Application Insights のリソースを選択してください。) [Application Insights リソースの新規作成] を選択し、そのプロンプトで、関数の実行時データを格納するために使用されるインスタンスの名前を指定します。 関数アプリが作成されると、通知が表示されます。 この通知の [出力の表示] を選ぶと、作成した Azure リソースなど、作成の結果が表示されます。
関数コードをデプロイする
重要
既存の関数アプリにデプロイすると、Azure にあるそのアプリの内容が常に上書きされます。
コマンド パレットで、入力して [Azure Functions: 関数アプリにデプロイする] を選択します。
作成したばかりの関数アプリを選びます。 前のデプロイの上書きを求められたら、[デプロイ] を選択して、関数コードを新しい関数アプリ リソースにデプロイします。
デプロイの完了後、[出力の表示] を選択すると、作成済みの Azure リソースなど、作成とデプロイの結果が表示されます。 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。
アプリケーション設定の更新
local.settings.json
ファイルからは必要なアプリケーション設定が自動的に発行されないため、関数が Azure で正しく実行されるように、それらを関数アプリにアップロードする必要があります。
コマンド パレットに「
Azure Functions: Download Remote Settings...
」と入力し、[リソースの選択] プロンプトで関数アプリの名前を選びます。AzureWebJobsStorage
の設定が既に存在するというメッセージが表示されたら、[はい] を選んで、ローカル エミュレーターの設定を、Azure の実際のストレージ アカウント接続文字列で上書きします。local.settings.json
ファイルで、ローカル エミュレーターの設定を、AzureWebJobsStorage
に使われるのと同じ接続文字列に置き換えます。Flex 従量課金プランではサポートされていない
FUNCTIONS_WORKER_RUNTIME
エントリを削除します。コマンド パレットに「
Azure Functions: Upload Local Settings...
」と入力し、[リソースの選択] プロンプトで関数アプリの名前を選びます。
これで、Functions ホストとトリガーの両方が同じストレージ アカウントを共有するようになります。
エンドポイント URL を作成する
イベント サブスクリプションを作成するには、Blob Storage イベントを報告する特定のエンドポイントの URL を Event Grid に指定する必要があります。 この BLOB 拡張機能 URL は、次の部分で構成されます。
部分 | 例 |
---|---|
関数アプリの基本 URL | https://<FUNCTION_APP_NAME>.azurewebsites.net |
BLOB 固有のパス | /runtime/webhooks/blobs |
関数のクエリ文字列 | ?functionName=Host.Functions.<FUNCTION_NAME> |
BLOB 拡張機能のアクセス キー | &code=<BLOB_EXTENSION_KEY> |
BLOB 拡張機能アクセス キーは、自分の BLOB 拡張機能エンドポイントに他のユーザーがアクセスするのをより困難にするように設計されています。 BLOB 拡張機能のアクセス キーを確認するには:
Visual Studio Code のアクティビティ バーで Azure アイコンを選択します。 [リソース] でサブスクリプションを展開し、[関数アプリ] を展開して、作成した関数アプリを右クリックし、[ポータルで開く] を選びます。
左側のメニューの [関数] で、[アプリ キー] を選びます。
[システム キー] で、blobs_extension という名前のキーを選び、キーの値をコピーします。
この値を、新しいエンドポイント URL のクエリ文字列に含めます。
次の例に基づいて、Blob Storage トリガーの新しいエンドポイント URL を作成します。
https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.EventGridBlobTrigger&code=<BLOB_EXTENSION_KEY>
この例で、
<FUNCTION_APP_NAME>
を関数アプリの名前に置き換え、<BLOB_EXTENSION_KEY>
をポータルから取得した値に置き換えます。 関数に別の名前を使用した場合は、EventGridBlobTrigger
をその関数名に置き換えます。
これで、このエンドポイント URL を使ってイベント サブスクリプションを作成できるようになります。
イベント サブスクリプションを作成する
Azure Event Grid を利用したイベント サブスクリプションにより、サブスクライブされた BLOB コンテナーの変更に基づいてイベントが発生します。 その後、このイベントは、関数の BLOB 拡張機能エンドポイントに送られます。 イベント サブスクリプションを作成した後で、エンドポイント URL を更新することはできません。
Visual Studio Code のアクティビティ バーで Azure アイコンを選択します。 [リソース] でサブスクリプションを展開し、[ストレージ アカウント] を展開して、前に作成したストレージ アカウントを右クリックし、[ポータルで開く] を選びます。
Azure portal にサインインし、ご自分のストレージ アカウントのリソース グループを書き留めておきます。 同じグループ内に他のリソースを作成して、完了時にリソースを簡単にクリーンアップできるようにします。
左側のメニューから [イベント] オプションを選びます。
[イベント] ウィンドウで、[+ イベント サブスクリプション] ボタンを選び、次の表の値を [基本] タブに入力します。
設定 提案された値 Description 名前 myBlobEventSub イベント サブスクリプションを識別する名前。 この名前を使用すると、イベント サブスクリプションをすばやく見つけることができます。 イベント スキーマ イベント グリッド スキーマ イベントには既定のスキーマを使用します。 [システム トピック名] samples-workitems-blobs コンテナーを表すトピックの名前。 トピックは最初のサブスクリプションで作成され、今後のイベント サブスクリプションに使用します。 イベントの種類のフィルター 作成された BLOB エンドポイントの種類 Web Hook BLOB ストレージ トリガーでは、Web hook エンドポイントが使用されます。 エンドポイント Azure ベースの URL エンドポイント 作成した URL エンドポイント (キー値を含む) を使用します。 [選択の確認] を選び、エンドポイント URL を検証します。
[フィルター] タブを選択し、プロンプトに次の情報を指定します。
設定 提案された値 説明 サブジェクト フィルタリングを有効にする Enabled 関数をトリガーできる BLOB のフィルタリングを有効にします。 次で始まるサブジェクト /blobServices/default/containers/<CONTAINER_NAME>/blobs/<BLOB_PREFIX>
<CONTAINER_NAME
と<BLOB_PREFIX>
を選択した値に置き換えます。 これにより、サブスクリプションは、BLOB_PREFIX
で始まり、CONTAINER_NAME
コンテナー内にある BLOB に対してのみトリガーされるように設定されます。次で終わるサブジェクト .txt 関数が、 .txt
で終わる BLOB によってのみトリガーされるようにします。
特定の BLOB へのフィルタリングの詳細については、Azure Event Hubs のイベント フィルタリングに関する記事を参照してください。
- [作成] を選び、イベント サブスクリプションを作成します。
コンテナーにファイルをアップロードする
Visual Studio Code を使用して、お使いのコンピューターから BLOB ストレージ コンテナーにファイルをアップロードできます。
Visual Studio Code で F1 キーを押してコマンド パレットを開き、「
Azure Storage: Upload Files...
」と入力します。[開く] ダイアログ ボックスで、ファイル (できればテキスト ファイル) を選んで、[アップロード] を選びます。
プロンプトで、次の情報を入力します。
設定 提案された値 説明 このアップロードの宛先ディレクトリを入力する default コンテナー ルートである /
の既定値をそのまま使用します。リソースの選択 ストレージ アカウント名 前の手順で作成したストレージ アカウントの名前を選びます。 リソースの種類を選択する BLOB コンテナー BLOB コンテナーにアップロードしています。 BLOB コンテナーを選択する samples-workitems この値は、前の手順で作成したコンテナーの名前です。
ローカル ファイル システムを参照してアップロードするファイルを検索し、[アップロード] ボタンを選んでファイルをアップロードします。
Azure で関数を検証する
samples-workitems コンテナーにファイルをアップロードしたので、関数がトリガーされるはずです。 Azure portal で次のことを調べて確認できます。
ストレージ アカウントで [イベント] ページに移動し、[イベント サブスクリプション] を選ぶと、イベントが配信されたことがわかります。 イベントがグラフに表示されるまで、最大で 5 分かかる可能性があります。
ポータルで関数アプリのページに戻り、[関数] で関数を見つけて、[呼び出しなど] を選びます。 正常に実行された関数から書き込まれたトレースが表示されます。
リソースをクリーンアップする
この後、次の手順に進んで Azure Storage キュー バインドを関数に追加する場合、既存の作業をベースにするので、リソースはすべてそのままにしておく必要があります。
それ以外の場合は、追加コストの発生を避けるために、次の手順に従って関数アプリとその関連リソースを削除してください。
Visual Studio Code で、F1 キーを押してコマンド パレットを開きます。 コマンド パレットで、
Azure: Open in portal
を検索して選択します。関数アプリを選択し、Enter キーを押します。 その関数アプリのページが Azure portal で開きます。
[概要] タブで、 [リソース グループ] の横にある名前付きリンクを選択します。
[リソース グループ] ページで、含まれているリソースの一覧を確認し、削除するものであることを確認します。
[リソース グループの削除] を選択し、指示に従います。
削除には数分かかることがあります。 実行されると、通知が数秒間表示されます。 ページの上部にあるベルのアイコンを選択して、通知を表示することもできます。
Functions のコストについて詳しくは、「従量課金プランのコストの見積もり」を参照してください。