Oracle Integration CloudでREST Adapterを使ってObject Storageからファイル取得する

# はじめに

この記事ではOracle Integration Cloud(OIC)からObject Storageにおいてあるファイルをデータとして取り込み連携する方法について説明します。OICはObject Storageに対応するAdapterとしてREST Adapterが利用可能で連携することでSaaSやIaaSなど様々なサービスと連携することができます。

- Oracle Integration Cloudについてはこちら
https://www.oracle.com/jp/integration/application-integration/

- Object Storageについてはこちら
https://www.oracle.com/jp/cloud/storage/object-storage/

# 前提

- OICのプロビジョニングおよびユーザー・ロール設定が完了していること
https://docs.oracle.com/ja-jp/iaas/integration/index.html

- Object Storageの作成と使用準備が完了していること
https://docs.oracle.com/ja-jp/iaas/Content/Object/Concepts/objectstorageoverview.htm

# 事前準備

## Object Storageへファイルを配置

適当なcsvファイルをObject Storageへ配置します。

```cities.csv
"PREF_CODE","CITY_CODE","CITY_NAME","BIG_CITY_FLAG"
1,"01101","札幌市中央区","1"
1,"01102","札幌市北区","1"
1,"01103","札幌市東区","1"
1,"01105","札幌市豊平区","1"
1,"01106","札幌市南区","1"
1,"01109","札幌市手稲区","1"
1,"01110","札幌市清田区","1"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b3677cd1-02ce-6ca9-8629-ba79ab4bbdb9.png)


## 必要な情報の収集

次にOICで作成するアプリケーションに必要な情報を収集します。

### Object Storage関連の情報

Object Storageの以下の情報を取得します。

- connection url
- namespace name
- bucket name
- object name

Object Storageのメニューから"View Object Details"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b49b24b8-b57a-40d5-f179-5c82866a11b2.png)

表示されたURLの以下の{}部分をそれぞれコピーしてメモしておきます。

    https://xxx/n/{namespaceName}/b/{bucketName}/o/{objectName}

:::note info
connection urlは `https://xxx` の部分です。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/392ee13a-3043-e808-a095-5d1755fb9de2.png)

### Tenancy OCID

以下の手順でTenancy OCIDをメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/092587ab-e199-ad04-aae5-bc167f1caf7a.png)

### User OCID

以下の手順でUser OCIDをメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/36d58069-2443-8f6e-329c-10ded646e0c0.png)


### Private KeyとFinger Print

User OCIDをコピーした画面を下にスクロールすると左下にAPI Keysというリンクがあるのでクリック、"Add API Key"をクリック、"Generate API Key Pair"を選択した状態で"Download Private Key"を押してPrivate Keyをダウンロードし、最後に"Add"をクリックします。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/e7aae871-a637-e97b-44dc-830f3af010f4.png)

フィンガープリントが表示されるのでこちらもコピーしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/e5487228-a7c5-9be5-7692-10b68e55a0b6.png)

[こちら](https://blogs.oracle.com/integration/post/oci-signature-in-rest-adapter-for-oci-rest-apis)によるとOIC から正常に呼び出すには、Private KeyがRSA (PKCS1) 形式である必要があるとのことなので、変換します。以下のコマンドを実行します。

    ssh-keygen -p -f ＜Private Keyファイル名＞ -N "" -t rsa -m pem

# 接続の作成

ここからOICを使って統合アプリケーションを作成していきます。
REST Adapterを使ってObject Storageにアクセスするための接続を定義します。
OICコンソールのメニューから接続をクリックし、"作成"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/42175f5f-2b8b-c3d8-c0ca-7117798dda2d.png)

任意の名前を入力し、Roleに呼び出しを指定して"作成"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/c9d0ea3a-add7-b85d-e135-aa42f26181dd.png)

メモしておいた情報をもとに各項目を入力します。

入力項目|値
-|-
Connection Type|REST API Base URL
Connection URL|[ここ](#object-storage%E9%96%A2%E9%80%A3%E3%81%AE%E6%83%85%E5%A0%B1)で取得したもの
セキュリティ・ポリシー|OCI Signature Version 1
Tenancy OCID|[ここ](#tenancy-ocid)で取得したもの
User OCID|[ここ](#user-ocid)で取得したもの
Private Key|[ここ](#private-key%E3%81%A8finger-print)で取得したもの
Finger Print|[ここ](#private-key%E3%81%A8finger-print)で取得したもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/2f800bb2-5ef6-e3cb-a903-a95f74f7293f.png)

テスト→保存をクリックし、"＜"で前の画面に戻ります。

# フローの作成

次に統合フローを作成します。
メニューから統合をクリックし、"作成"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b9576ac2-a7a6-f8a5-f03f-6ba946f8157c.png)

スケジュールを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/97e3d0fd-8342-bf04-4246-87395d3b1a8f.png)

任意の名前を入力し、"作成"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/7decdd1b-684d-ebd1-2a39-aeb968941ec0.png)

フローを作成する画面に遷移するので先ほど定義したREST APIの接続を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/cc731c24-d5b5-04ab-35dc-2c6343267a3c.png)

以下のように設定して"続行"をクリックします。

入力項目|値
-|-
エンドポイントにどのような名前をつけますか。|任意の値
エンドポイントの相対リソース名は何ですか。|/n/{namespaceName}/b/{bucketName}/o/{objectName}
このエンドポイントのパラメータを追加して確認|チェック
子のエンドポイントを構成してレスポンスを受信|チェック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/c1402d4a-e940-63ae-b727-346be55c7f18.png)

そのまま"続行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ab3fd717-3682-6e53-aa8f-3596341e3840.png)

以下のように設定し、"続行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/39cc16cb-39a8-937d-c55e-05d737a2edf8.png)

終了をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/e7a06a81-aaa8-1009-55c4-dfc2294e3a85.png)

次に定義したREST APIの接続へリクエストパラメータをマッピングから設定します。
マップのメニューから編集をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ac3bffd3-b0ff-44cd-ddf5-e04404d0f86b.png)

最初にnamespace nameを右クリック→ターゲット・ノードの作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/48ea99e1-5200-db5e-353d-7c90bc4e5e84.png)

次に開発者モードのアイコンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/8ba60fb6-e770-9856-ad49-0eecd82a3f83.png)

下にTextareaが表示され、編集できるようになるので[ここ](#%E5%BF%85%E8%A6%81%E3%81%AA%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%8E%E9%9B%86)でメモした値を""をつけて入力します。入力したら"✓"で保存して"×"で閉じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/145d1c99-0e2a-0d5c-ac18-b94ea58b8f75.png)

同様の手順でbucket name, object nameを設定します。値は[ここ](#%E5%BF%85%E8%A6%81%E3%81%AA%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%8E%E9%9B%86)でメモしたものです。
設定できたら"検証"をクリックして、"<"を押して前の画面に戻ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/0255bbef-011b-ac68-f1ce-5ef469dde043.png)

これでREST APIを使ってObject Storageにあるファイルを取得することができましたが、この時点ではマッピングするデータとして取り込まれていないので、OICで扱えるようにファイルを読み込む必要があります。

右のメニューのアクションからステージ・ファイル・アクションをドラッグアンドドロップで先ほど作成したRESTの下に配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b5888aca-348e-7939-3aab-d4c1f7663721.png)

任意の名前を入力し、"続行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b50fed46-8163-4c2d-7e00-3e8c6497ac9d.png)

以下のように設定し、"続行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/4f214b91-0304-0b9d-f1be-360c966e0fb8.png)

"続行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/75c212c3-826c-1f3d-cbb3-3444eb0297d6.png)


[ここ](#object-storage%E3%81%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E9%85%8D%E7%BD%AE)で作成したcsvファイルを指定し、レコード名に"cities", レコードセット名に"city"を入力し、"続行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/49f19e48-4acc-5ace-f4d7-3c950dee3875.png)

"終了"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b3af1610-9bc4-5c47-d08a-9eb1f6e87c06.png)

最後に取得したデータをログ出力させます。
ロガーのアクションをを先ほど追加したステージ・ファイルの下に配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/d2ea0188-8cbf-6d67-d580-4d08872fa31c.png)

なぜか日本語名だとエラーになるのでロガーという名前をlogerなどに変更し、
readfileのレスポンスからcityをドラッグアンドドロップで右にあるロガー・メッセージに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/98a04277-7af0-b994-b87e-552ea8db37c9.png)

最後にこのアプリケーションの実行をトレースできるようにビジネス識別子を設定します。右上にある(I)のあいこんをクリックし、入力ソースにあるstartTimeをビジネス識別子フィールドにドラッグアンドドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/77b78e68-ba0e-d71e-3c9b-90b61bccc334.png)

最後に保存して統合フローの完成です。

# 実行

最後に実行して動作を確認します。

統合のページでアクティブ化をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/3a4832da-2735-3bc3-806c-acb0a02b23b5.png)

デバッグにチェックして"アクティブ化"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/6b281bc8-a13e-42c4-862f-57995d70eb0c.png)

しばらくしたらアクティブになるので、"・・・"から"実行"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/2fab60c7-8f1d-b1ca-ace5-c5d5ee915d5f.png)

そのまま実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/4496a2bf-2246-df9b-d99f-d5dafcf68e5d.png)

アクティビティ・ストリームが表示され、フローの実行が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ab75d072-f1be-3a17-a08c-0da9d4c5a830.png)

ログを確認します。取得したデータがログ出力されているのが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/d4b5b85a-1cd6-7bba-8089-2943028ade0e.png)

以上です。

# 補足

ちなみにOIC3だとObject Storageへの接続用のアクションが対応されており、REST Adapterを使わなくてもObject Storageへ接続できるようです。これもいずれ試してみたいと思います。詳細は[こちら](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/add-actions-app-driven-orchestration-integration.html#GUID-822226B0-B8EB-42E0-B053-8D844D2F45DB)。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/95f5eede-e819-e811-c013-392febe7bc2a.png)