Azure Blob Storageにファイルがアップロードされたら即座に表にロードするライブ表フィードを設定してみた

# はじめに
特定のAzure Blob Storageコンテナーにファイルがアップロードされたら、自動的にAutonomous Database内の表にデータをロードする方法が[マニュアル](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/feed.html#GUID-46229004-4357-450D-A99E-180E7437084F)に記載されたので、検証してみました。

仕組みとしては、Azure Blob Storageコンテナーのファイル作成時のイベント通知をAutonomos Databaseが受信し、対象ファイルのデータ・ロード（ライブ表フィード）を行うというものです。

# 1. Azure Blob Storageコンテナーの作成とファイルのアップロード

AzureポータルからAzure Blob Storageコンテナーを作成します。
今回は、「live-table-feed」という名前のコンテナーを作成しました。
![スクリーンショット 2024-10-08 14.48.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2267d6fc-e70f-5018-b589-ff6efcbbdac5.png)

作成したコンテナーに以下のファイルをアップロードします。

```text:empdata1.csv
1,SMITH
2,ALLEN
3,WARD
```
![スクリーンショット 2024-10-08 15.08.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/98b4026e-3b72-b655-ba9e-8360fcde862b.png)


# 2. Azure Blob Storageコンテナーに対するクラウド・ストレージ・リンク（クラウドストアの場所）の作成

Autonomous Databaseの付属ツール「Database Actions」で、Azure Blob Storageコンテナー「live-table-feed」に対するクラウド・ストレージ・リンクを作成します。

Autonomous Databaseの詳細画面で「データベース・アクション」→「データ・ロード」とクリックします。

![スクリーンショット 2024-10-08 14.55.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2882400e-9725-51fe-a663-7876060164e0.png)

Database Actionsのデータ・ロードのページが表示されます。

![スクリーンショット 2024-10-08 14.58.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9f10de0a-8c30-aa2d-29c9-137b631af2bb.png)

「接続」をクリックします。
![スクリーンショット 2024-10-08 14.58.54のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/540dc129-ed7b-c2d2-f49c-ff7d5992e114.png)

「作成」をクリックし、「新規クラウド・ストアの場所」を選択します。
![スクリーンショット 2024-10-08 14.59.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ccc0b59f-4836-b76a-2163-5ef956980e80.png)

「クラウド・ストアの場所の追加」のウィザードが表示されますので、「資格証明の作成」をクリックします。
![スクリーンショット 2024-10-09 11.23.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a9e61234-e6b5-8550-9b59-2b573763be5f.png)

「資格証明の作成」ウィザードが表示されます。
「資格証明名」には作成する資格証明（クレデンシャル）の名前を入力します。今回は「AZURE_CRED」という名前にしました。
「クラウド・サービス」は「Microsoft Azure」を選択します。
「Azureストレージ・アカウント名」にはコンテナーを作成したストレージ・アカウント名を入力します。
「Azure ストレージ・アカウント・アクセス・キー」には、Azure ストレージ・アカウントのアクセスキーを入力します。
全ての項目の入力が完了したら、「資格証明の作成」をクリックします。
![スクリーンショット 2024-10-08 15.02.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/74763e8a-4d14-b37d-1b65-1e2b0caa0e8a.png)

「名前」に作成するクラウド・ストアの場所の名前を入力します。今回は「AzureBlobStorage」としました。
「資格証明の選択」を選択し、先ほど作成した資格証明「AZURE_CRED」を選択します。
バケットURIにはAzure Blob StorageのコンテナーのURIを入力します。
全ての入力が完了したら、「作成」をクリックします。
![スクリーンショット 2024-10-08 15.05.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8fde8393-9e55-7154-8ea7-86f20c21b216.png)

クラウド・ストレージ・リンク「AzureBlobStorage」が作成できました。
![スクリーンショット 2024-10-08 15.06.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1996ee56-903a-c965-1e9f-85d35c149686.png)

# 3. ライブ表フィードの作成
「データ・ロード」をクリックして、データ・ロードのページに移動します。
![スクリーンショット 2024-10-08 15.06.15のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/935daa32-e61e-0745-a81b-6043cc28500f.png)

「データのフィード」をクリックします。
![スクリーンショット 2024-10-09 11.47.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1a2f976b-8395-b362-dcec-2ca97bd8737a.png)

「ライブ表フィードの作成」をクリックします。
![スクリーンショット 2024-10-08 15.06.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e6df789e-0182-ffb1-e16e-87fb7ddcf47a.png)

「クラウド・ストアの場所」として先ほど作成した「AZUREBLOBSTORAGE」を選択します。
入力したら、「次」をクリックします。
![スクリーンショット 2024-10-08 15.09.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f946d971-fadf-7fe6-8e7e-9a1b9472a96e.png)

ターゲット表名を入力します。今回はempとしました。
また、今回ロードするCSVファイルにはヘッダー行がありませんので、「列ヘッダー行」のチェックをオフにしました。
![スクリーンショット 2024-10-09 11.55.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fd735002-f2e2-8631-91ec-20c2f0ea314a.png)

マッピングのセクションでは、ターゲット列名とそのデータ型を設定し、「次」をクリックします。
![スクリーンショット 2024-10-09 11.55.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f6e44f14-fd4f-b7c6-2603-6d99e5f27bdd.png)

プレビューが表示されるので、内容を確認して「次」をクリックします。
![スクリーンショット 2024-10-09 11.58.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/3b820125-1e97-e1c7-8379-7567830f67a0.png)

作成するライブ表フィードの名前を入力します。今回は「EMP_FEED」をしました。
また、「通知に対して有効」のチェックをオンにし、「スケジューリングに対して有効化」のチェックをオフにします。
入力が完了したら、「作成」をクリックします。
![スクリーンショット 2024-10-09 11.59.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8916ce18-b7a4-7579-d241-de9bfec17ec7.png)

「今すぐライブ表フィードを実行」と表示されますので、「はい」をクリックします。
![スクリーンショット 2024-10-09 12.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/52f338da-693d-c928-68da-4b5e59b0bbd2.png)

ライブ表フィード「EMP_FEED」が作成され、3行をロードしたことが表示されています。
![スクリーンショット 2024-10-09 12.15.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/41a1c014-8c32-1cfd-f512-493f66a62931.png)

「EMP_FEED」の右上の3つ点の部分をクリックし、「通知URLを表示」をクリックします。
![スクリーンショット 2024-10-09 12.16.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c4b65dd2-68f4-7db5-f2d6-04e440254ecf.png)

EMP_FEEDの通知URLが表示されますので、URLをコピーしておきます。
![スクリーンショット 2024-10-09 12.16.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e28f3ed7-d580-9284-edd4-a849f2ee8aff.png)


# 4. Azure Event Gridの有効化
Azure Event Gridが有効化されていない場合、有効化します。

Azureポータルでサブスクリプションに移動し、左側のメニューから「リソースプロバイダー」をクリックします。
![スクリーンショット 2024-10-08 15.17.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/accd8f66-d97f-3ffd-9ce5-c2772029ff3d.png)

リソースプロバイダーのページが表示されます。
![スクリーンショット 2024-10-08 15.17.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2fddf37e-2f26-39bd-a851-a4280442a356.png)

フィルターに「Microsoft.EventGrid」と入力してMicrosoft.EventGridを検索します。
![スクリーンショット 2024-10-08 15.18.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c72d281b-9937-bae7-5638-a81889fafa0f.png)

Microsoft.EventGridのチェックをオンにし、3点リーダをクリックして、「登録」をクリックします。
![スクリーンショット 2024-10-08 15.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0d3a68ba-3ab2-8000-7b2c-a43c6da74e8b.png)
「状態」が「Registering」になります。
![スクリーンショット 2024-10-08 15.19.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/02dce34a-8312-929d-803a-282817798aff.png)
しばらく待つと、「状態」が「Registerd」に変わります。
![スクリーンショット 2024-10-08 15.20.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/631206de-244c-4d2b-9985-bfae9fd08d48.png)
以上で、Azure Event Gridが有効化できました。

# 5. イベント・サブスクリプションの作成
Azure Blob Storageのイベント・サブスクリプションを作成します。

Azureポータルでストレージアカウントに移動し、左側のメニューから「イベント」をクリックします。
![スクリーンショット 2024-10-08 15.21.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2f04a393-aa3d-1aa9-0278-6388677a42a7.png)

「+ イベントサブスクリプション」をクリックします。
![スクリーンショット 2024-10-08 15.22.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/25f234e3-43ca-dc2d-a9b0-38ed83d1bf41.png)

「名前」に作成するイベントサブスクリプションの名前を入力します。今回は「BlobCreated」としました。
「システムトピック名」に作成するシステムトピック名を入力します。今回は「BlobCreatedTopic」としました。
「イベントの種類のフィルター」は「Blob Created」を選択します。
「エンドポイントの種類」は「Web hook」を選択します。
全てを入力したら、「エンドポイントの構成」をクリックします。
![スクリーンショット 2024-10-08 15.24.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0199d19e-7226-9fa7-8b04-523a28293767.png)

「サブスクライバーエンドポイント」に、先ほどコピーしておいたEMP_FEEDの通知URLを入力し、「選択の確認」をクリックします。
![スクリーンショット 2024-10-08 15.25.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fc8073b1-b2a7-733d-e607-6d716c6dc584.png)

入力内容を確認し、「作成」をクリックします。
![スクリーンショット 2024-10-08 15.25.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a8b14e2e-48e3-06b5-bac6-f38044252538.png)

# 6. 通知が受信できるかの確認
ライブ表フィードが5.で作成したイベント・サブスクリプションからの通知を正しく受信できるかを確認します。

「EMP_FEED」の右上の3つ点の部分をクリックし、「確認URLを表示」をクリックします。
![スクリーンショット 2024-10-09 12.34.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8b651af8-26a9-c11f-0d16-3d360a7b9892.png)

確認URLが表示されるので、リンクをクリックします。
![スクリーンショット 2024-10-09 12.35.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4bd78fda-c79e-70c2-2259-9a374e89a557.png)

ブラウザのウインドウが開き、通知が問題なく受信できると次のような内容が表示されます。
![スクリーンショット 2024-10-09 12.35.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9d01a973-7c3c-d5a8-5bf5-2bdee64e81d8.png)

通知が問題なく受信できることが確認できたら、「クラウド・ストア確認プロセスが完了している場合のみチェックします。」のチェックをオンにし、「OK」をクリックします。
![スクリーンショット 2024-10-09 12.37.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fa6d5e07-214c-be7c-fb83-b446d0202295.png)

以上で、Azure Blob Storageのコンテナーにファイルが追加されたら、イベントを受信して自動的に表へのデータロードを行うライブ表フィードの設定が完了しました。
![スクリーンショット 2024-10-09 12.37.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5ce1d2d9-17f7-7281-d55a-c585b099d7e6.png)

# 7. 動作確認

Azure Blob Storageのコンテナーにファイルをアップロードして、動作を確認してみます。

Azureポータルでコンテナー「live-table-feed」の概要ページにアクセスし、「アップロード」をクリックします。
![スクリーンショット 2024-10-09 12.40.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5ec6bb09-05ee-dcee-11c4-779ee4e51098.png)

以下のような内容のファイルempdata2.csvをアップロードします。
```text:empdata2.csv
4,JACKSON
5,BROWN
6,TURNER
```

![スクリーンショット 2024-10-09 12.41.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/123f7dc2-704f-037e-e99a-53863eaea4ad.png)

ファイルempdata2.csvがアップロードされました。
![スクリーンショット 2024-10-09 12.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/82a24d20-364a-97d2-afa8-36a387403b55.png)

Database Actionsに戻り、「EMP_FEED」の右上の3つの点の部分をクリックし、「ライブ表フィードの実行の詳細」をクリックします。
![スクリーンショット 2024-10-09 12.42.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f2da8e9d-1bf8-89bb-58a4-f8c7b32338e3.png)

プレビューが表示され、empdata2.csvのファイルがロードされていることが確認できました。
![スクリーンショット 2024-10-09 12.42.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8705b4d8-8a93-a5be-f68c-3911c612e10f.png)

左側のメニューの「ログ」をクリックして、実行ログを確認します。
![スクリーンショット 2024-10-09 12.43.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/3e532251-e7fa-538e-1d2d-ed10931cb570.png)
empdata2.csvのアップロード日時が2024/10/9 12:41:20 JST（2024/10/9 3:41:20 UTC）ですので、その約9秒後に自動的に表にロードされていることがわかりました。

Database ActionsのSQLから表empの内容を確認してみます。
![スクリーンショット 2024-10-09 12.44.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/11f8a135-4c05-dd9f-e0fe-e27ace374c46.png)

EMP_FEEDのプレビューで表示された内容と同じデータが格納されていることが確認できました。

# 参考情報
・[Creating a Notification-Based Live Table Feed using Microsoft Azure](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/feed.html#GUID-46229004-4357-450D-A99E-180E7437084F)