OCIイベント経由でオブジェクト・ストレージにファイルをアップロード時にFunctionsを起動

# 今回やりたいこと
タイトルの通りOCIイベント経由でオブジェクト・ストレージにファイルをアップロード時にFunctionsを起動できるか検証を行います。
![スクリーンショット 2025-03-20 15.13.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/d6a304fc-70ae-4af3-9332-e2c79d10174a.png)

## 事前準備
* オブジェクト・ストレージの作成許可
`Allow group fn-group to manage buckets in tenancy`
`Allow group fn-group to manage objects in tenancy`
* ファンクションの使用許可
`Allow group fn-group to manage functions-family in tenancy`
* VCN等のネットワーク系リソースの管理許可
`Allow group fn-group to manage virtual-network-family in tenancy`
* サービス・ログの作成許可
`Allow group fn-group to manage logging-family in tenancy`
* イベント・サービスの作成許可
`Allow group fn-group to manage cloudevents-rules in tenancy`

## 1.オブジェクト・ストレージの作成
最初にオブジェクト・ストレージの作成を行います。
OCIコンソール画面左上のナビゲーションメニューから「**ストレージ**」→「**バケット**」をそれぞれ選択します。
![スクリーンショット 2025-03-20 15.36.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/4c0db3e6-3dd4-4bc0-9359-e98b95d84999.png)

「**バケットの作成**」から任意のバケット名(ここでは「fn-bucket」)を入力、「**オブジェクト・イベントの出力**」を有効にして「**作成**」を選択します。
![スクリーンショット 2025-03-20 15.38.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/a507daa9-5d83-46db-8a3f-b06c887d5d63.png)

バケットが作成されます。
![スクリーンショット 2025-03-20 16.33.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/4ebbdfa3-bd9c-42bc-88eb-4a69daa8022e.png)


## 2.Functionsのサービス・ログの有効化
続いて、Functionsのサービス・ログの有効化を行います。
任意のFunctionsのアプリケーション（ここでは「helloworld-app」）の「**Logs**」から「**Function Invocation Logs**」の有効化を行います。
![スクリーンショット 2025-03-20 16.02.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/4ec03f4f-fe92-4856-a738-0c4858c12eaf.png)

全て任意の内容を入力、「**ログの有効化**」を選択します。
![スクリーンショット 2025-03-20 16.03.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/88c04f0e-1fdb-48b0-881d-e100d5303291.png)

ステータスが「**作成中**」→「**アクティブ**」に遷移、有効化は完了となります。
![スクリーンショット 2025-03-20 16.11.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/7212ae76-30fa-431c-91e6-c3d7ee867d61.png)

## 3.イベント・サービスの作成
最後にイベント・サービスの作成を行います。
OCIコンソール画面左上のナビゲーションメニューから「**監視および管理**」→「**ルール**」をそれぞれ選択します。
![スクリーンショット 2025-03-20 16.14.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/79f2fec4-1ca6-41bb-bd80-7541cb0db38d.png)

「**ルールの作成**」を選択します。
![スクリーンショット 2025-03-20 16.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/a553e84f-ef4e-431c-85dc-3f38868c7c1b.png)

以下の項目を入力、「**ルールの作成**」を選択します。
* 表示名、説明：任意
* ルール条件
    * 条件：イベント・タイプ
    * サービス名：Object Storage
    * イベント・タイプ：Object - Create
    * 条件：属性
    * 属性名：bucketName
    * 属性値：fn-bucket（バケット名）
* アクション
    * アクション・タイプ：ファンクション
    * ファンクション・コンパートメント、アプリケーション、ファンクション：任意
![スクリーンショット 2025-03-20 16.23.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/d2a06c1c-6470-418c-abfc-e13c519f1fd1.png)

イベントが作成されます。
![スクリーンショット 2025-03-20 16.25.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/f83a3954-4851-4f25-b320-cba70cf90280.png)

作成は以上となります。

## 4.動作確認
ここではサンプルファイルをオブジェクト・ストレージにアップロードして、サービス・ログからFunctionが起動できるか確認を行います。

サンプルファイル（`test.txt`）をアップロードしました。
![スクリーンショット 2025-03-20 16.28.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/e4fdae49-55a5-49e4-b678-2746c032b309.png)

サービス・ログを確認すると、ほぼリアルタイムで連携、Functionsが起動されていることがわかります。
![スクリーンショット 2025-03-20 16.30.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/1516618b-d065-4e9f-8194-f800f736507a.png)

またイベント・サービスもログの取得が可能のため、こちらも有効化します。
![スクリーンショット 2025-03-20 16.32.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/84eada55-e490-4f66-abe0-36e2595a32b5.png)

再度別のサンプルファイル（`test2.txt`）をアップロードしてみます。
![スクリーンショット 2025-03-20 16.37.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/1b5be0fd-c37f-4481-b7a8-2547a34cf40e.png)

イベント・サービスのにも`successfully`が含まれているログを確認できます。
![スクリーンショット 2025-03-20 16.38.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1430519/7be982f9-29cf-4b53-b8db-0c6425f008f0.png)

本検証の手順は以上となります。

# 引用ドキュメント等

https://docs.oracle.com/ja/solutions/update-nosql-table-with-oci-functions/index.html#GUID-0509584B-10C3-4639-B763-10058A6615C3