Oracle Integration Cloudでzipファイルを作成する

# はじめに

この記事ではOracle Integration Cloud(以下略OIC)でZIPファイルを作成する方法について説明します。

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

OIC3についてはこちら
https://docs.oracle.com/ja-jp/iaas/application-integration/index.html

今回作成する統合フローのイメージは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ba19bbf9-2c06-97ed-8724-b171e044f5d4.png)

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

- FTP Adapterの接続定義が完了していること
https://docs.oracle.com/en/cloud/paas/application-integration/ftp-adapter/create-ftp-adapter-connection.html

- OICに組み込まれているFile Serverへの有効化が完了、および接続ができること
https://docs.oracle.com/cd/E83857_01/paas/application-integration/file-server/file-server.html

- ファイルサーバへ任意のファイル・ディレクトリを配置していること。今回は以下のようなファイルを配置しています。
ディレクトリ名：ziptest
圧縮対象ファイル：test1.txt, test2.txt, test3.txt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/28a9fe5b-900c-498b-6d06-9c08cc32c5fb.png)


# OICフローの作成
最初にOICフローを作成します。

OICのコンソールから「Create」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/395a849c-b033-aec1-49a0-5f28538ec9fc.png)


「Schedule」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/66667bb3-469b-1af6-adf4-bd44bb4e0af1.png)

任意の名前を入力し、「Create」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/03c6d453-4b1d-f3ab-b3f2-693a964c24f3.png)

## FTP Adapterでファイルサーバからファイル一覧情報を取得
最初にファイルサーバーからファイル一覧のパスなどの情報を取得します。

統合フローの作成画面に遷移したら事前に作成したFTP Adapterを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/d0e95c6f-ba46-3242-13b2-cfc0de84d901.png)

任意の名前を入力し、「Continue」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/9d5404d0-5694-07c6-5587-113e66d67f3e.png)

Operationは「List Files」、Input deirectoryは事前にファイルサーバーに用意したディレクトリ、File name patternは用意した圧縮対象のファイルパターン(すべての場合は*)を入力し、「Continue」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/f88cd5ed-b529-e4c6-42cb-bfde2a99fcc8.png)

Summaryではそのまま「Finish」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/910d0ec0-8789-b50e-1fed-dc206adad89d.png)


## 一覧情報をループ
ファイル一覧情報をループして対象のファイルをOICインスタンス内にダウンロードします。

先ほど配置したFTPの定義の下に「For each」のアクションを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/41fbd95c-bc21-a969-3d81-2dbf970e2aae.png)

Repeating elementでは何を繰り返し処理するかを選択します。今回はファイル一覧で取得した情報がFTPで実行したレスポンスに格納されているのでその中のFileをドラッグアンドドロップで配置します。※ここで指定できるのはこのアイコン「![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/1e385085-2fa8-7178-1d14-489a8f09a610.png)」がついているものだけです。
Current element nameは初期値のままにします。ちなみにCurrent element nameはループ中の配列内の一要素が格納されています。拡張for文の要素名のようなものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/0141df5c-82f7-98ec-daa1-83ac8308cd07.png)


## ファイルをダウンロード
次にループの中で一つ一つのファイルをOICインスタンス内にダウンロードします。

配置した「For each」のなかで、FTPの接続を選択(配置)します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/efa7c0c4-35ad-0721-6f10-ad1d9f2c8b6c.png)

Operationは「Download file」を選択、Input directory, File nameはマッピングするので空、※Download directoryは任意の名前を入力します。

:::note info
※このDownload directoryはFile Serverのディレクトリではなくダウンロードしたファイルを置く場所を指定します。ここで入力した名前でOICに認識されているステージングされた場所にディレクトリが作成され、ファイルがダウンロードされます。ここに置かれたファイルはFTPアダプタではなく、[Stage File Action](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/add-actions-app-driven-orchestration-integration.html#GUID-8673224A-42C5-4C10-BCF2-66FCA7AB9DEF)というアクションで処理することができます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/5773e2c2-455f-8022-e21a-a2d087883348.png)

「Finish」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/579393ec-9232-0fa3-4544-02d209a7bb4b.png)

Input directory, File nameをマッピングします。
配置したFTPアダプタの上にあるMapを「Edit」で編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ec1165d3-c6ca-c75b-fb73-e7c2a5196486.png)

以下のようにマッピングします。左側のf0_FileはFor eachの中の一要素が格納されています。要素の中にDirectoryとFilenameがあるのでそれぞれ右側のDownload Requestにマッピングします。「Validate」を押した後、左上の「<」を押して前の画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/2a6ee76c-bc08-a182-cd27-fd7d9a254c13.png)


## Stage File Actionを使ってダウンロードしたファイルをZIP
次にStageされた場所にダウンロードされたファイルをStage File Actionを使ってZIPします。
Stage File Actionについては[こちら](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/add-actions-app-driven-orchestration-integration.html#GUID-8673224A-42C5-4C10-BCF2-66FCA7AB9DEF)をご確認ください。

フローの一番下に「Stage File」を配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/b972123f-81e9-d598-447a-9c3226fe6a8c.png)

配置したStage Fileに任意の名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/3fc7d8e5-437d-225b-ea02-6157066bf0d9.png)

Select Operationに「Download File」を選択し、以下のように入力します。

:::note warn
シングルクォートで囲ってください。
:::

入力項目|値|説明
-|-|-
Specify the File Name|'test.zip'|zipファイルの名前(任意の名前)
Specify the Directory to zip|'/temp'|zip対象のディレクトリ([ここ](#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)で入力したDownload directoryの値)
Specify the Output Directory|'/tempzip'&nbsp;&nbsp;&nbsp;&nbsp;|zipファイルの配置先ディレクトリ(任意の名前)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/8d3503c5-1ed4-dd36-7d4b-48b83c4533e9.png)

「Finish」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/3042ac2f-3cae-689e-8d35-a3524152108f.png)

## ZIPファイルをファイルサーバに出力
FTP Adapterで作成したZIPファイルをファイルサーバに出力します。

フローの一番下にFTPを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/f86510d4-3b1d-4b17-335e-093745d3aee6.png)

配置したFTPに名前を付けます。任意の名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/1b534322-0db0-8d41-6014-c379cc5698a6.png)

Select Operationに「Write File」を選択し、以下のように入力します。

入力項目|値|説明
-|-|-
Transfer Mode|Binary|変換モード、今回はZIPファイルなのでBinary
Output directory|任意のパス|ファイル出力するファイルサーバーのディレクトリ
File name pattern|test-%SEQ%.zip|出力ファイル名

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/4ba97d22-0984-fef7-4ebc-8b5ce0db0c6f.png)

スキーマの定義は不要なので「No」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/f5d4da0e-4444-449d-f8fd-723406a730e4.png)

「Finish」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/51aff3a1-2210-5805-0b4d-fd82dc763a96.png)


先ほど配置したFTPの上にマッピングがあるのでクリックして「Edit」を押します。出力するZIPファイルのディレクトリをマッピングで指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/aa6ef17b-6c75-2317-a86b-d10782899f6d.png)

左側のStage File Actionのレスポンスの中にFile Referenceという項目があるので、右側のFTPのICS Fileの中のFile Referenceにマッピングします。「Validate」→「<」を押して前の画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ff158bc1-82ea-2f1e-dd81-0c2b873541eb.png)

以上でフローの作成が完了しました。出来上がったフローの全体図は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/68e5ab7a-fb54-24b2-e9ae-7041e1fb3ab7.png)

# ビジネス識別子の設定
スケジュールの統合のお決まり事ですが、右上の（Ｉ）マークからBusiness identifierを指定します。startTimeをドラッグアンドドロップでビジネス識別子として指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/07b50414-d3cf-a2a2-2a77-8e5b12f4d248.png)

右上の「Save」を押して、保存したら一覧画面に戻ります。

# アクティベート
それでは作成したアプリケーションをアクティベートして実行してみます。

一覧からActivateのボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/fccd964a-aa72-4838-1a79-d912c70ef967.png)

本番ではなくただの検証なのでDebugをチェックして「Activate」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/11190479-e81f-b2c1-b062-84e1b2b6e696.png)

Activateが完了するのを待ちます。

# 実行
Activateができたら実行します。

一覧のメニューから「Run」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/1dfb6302-7142-ef8a-c6a7-2e174ce5866a.png)

そのまま「Run」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/bf75c286-18a1-044e-a9ab-ec9c6d160f07.png)

Activity Streamで正常に完了したか確認します。「Processing completed Successfully」と表示されたら正常に処理が終わっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/c19b6138-c958-48de-9063-4795043b47ed.png)

# 動作確認

最後に出力されたファイルを確認します。FTPサーバーにZIPファイルが出力されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/ad24707d-c760-f82e-0be4-b180b5555cd6.png)

FTPクライアントソフトなどを使ってファイルの中身を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/de15c988-8e1b-eff1-3809-c33e0c761376.png)

以上です。