LoginSignup
1
0

More than 1 year has passed since last update.

Blob Event Grid Triggerを動かしてみる

Posted at

はじめに

「Azure Functions の Azure Blob Storage トリガー」に記載の通りBlobTriggerはファイルをスキャンするアーキテクチャで10分間の遅延がでたり、関数実行は1回だけと信頼性という面ではかなり心配です。

そこで利用するのがEventGridを使ったアーキテクチャになります。

動作としてはこんな感じ

  • 1.ストレージアカウントにファイルが作られる/削除される
  • 2.イベントサブスクリプションの発生
  • 3.EventGridのキューにデータが入る
  • 4.FunctionがHTTPで実行される

こちらのチュートリアル「チュートリアル: イベント サブスクリプションを使用して BLOB コンテナーで Azure Functions をトリガーする」の記事の補足記事という感じで読んでいただければと思います。

StorageAccountを作成します。

StorageAccountを作成する

image.png

ConnectionStringは後の手順で使うのでコピーしておきます。

image.png

Azure Functionをデプロイする

関数アプリをコンソールから作ります。いつもnodeなんですけど諸事情があって今回はjavaでやってみてます。

image.png

「storageAccountConnectionString」という名前で先ほどコピーしておいたStorageAccountへのConnectionStringを設定します

image.png

こちらからソースをダウンロードして、pom.xmlの以下の項目を関数アプリに合わせて修正します。

今回はServerlessでデプロイしますが、DedicatedPlanの場合は、AppServicePlan名とAppServicePlanのリソースグループの指定が必要です。

		<functionResourceGroup>rg-uzresk-20221002</functionResourceGroup>
		<functionAppName>func-uzresk-20221002</functionAppName>

早速デプロイしていきます。

az login
.\mvnw package azure-functions:deploy

StorageAccountでイベントサブスクリプションを設定する

ストレージアカウント - イベントをクリックして、イベントサブスクリプションを設定していきます。

image.png

赤枠のエンドポイントの部分がポイントです。

  • マニュアルには関数アプリ名とblob_extension keyを変えてくださいとあるのですが、関数名まで変えろ。とは書いておらずちゃんと読まない私はこれで少々はまりました。。
  • blob_extension keyは「関数アプリ」-「アプリキー」の一番下に作られているはずなのでそこから持ってきます。
https://<<関数アプリ名>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.<<関数名>>&code=<<blob_extension key>>

動作確認

ソースの@BlobTriggerアノテーションでpathが指定してあるのでそのパスに合わせてコンテナを作成し、ファイルを置きます。

public class BlobTriggerSampleHandler {
    @FunctionName("blobTrigger")
    @StorageAccount("storageAccountConnectionString")
    public void run(
            @BlobTrigger(name = "content", path = "items/{name}", dataType = "binary", source = "EventGrid") 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");
    }
}

image.png

イベントサブスクリプションを見るとトリガーされてることがわかるはずです。

image.png

Functionが動いていることも確認しておきます

  • Functionだけ動いていない場合は、Functionがちゃんとデプロイされているかの再確認とイベントサブスクリプションのURLの指定が間違っていないかを確認します。

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0