OCI Data Integrationでエクスポート/インポートを実行する

# はじめに
OCI Data Integrationのエクスポート、インポート機能を使うと、任意のタイミングのリソースをObject Storageに保存し、それを別のワークスペースにインポートすることが可能です。
以下を対象にエクスポート、インポートを実行できます。

+ プロジェクトおよびフォルダ
+ タスク
+ データ・フロー
+ パイプライン
+ ユーザー定義関数および関数ライブラリ
+ アプリケーション（12月リリースで可能になりました）

[Livelabsのワークショップ](https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/view-workshop?wid=859&clear=180&session=7237068639650)で作成できるプロジェクトでエクスポート/インポートを試してみます。
なお、前提として、エクスポートおよびインポートに使用されるObject Storageのバケットへのアクセスに必要なポリシーは付与済みとします。

# プロジェクトのエクスポート/インポート
プロジェクトの一覧からエクスポートが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/27183ad4-3ebf-1445-43f1-83aac3778804.png)

エクスポートをクリックすると、エクスポートファイルを出力するオブジェクト・ストレージの設定画面になります。
**テナンシOCID、OCIDリージョン、コンパートメント、バケット、ファイル名**の編集が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/4336b5db-e193-5ae1-905a-710327c8d583.png)

ファイルの拡張子はproject.zipのように**エクスポートする対象.zip**となります。このファイルの拡張子はインポートの時も参照されるため変更不可です。
また**参照を含める**のチェックボックスをチェックすると、プロジェクトで参照しているデータ・アセットなどのオブジェクトを含めることができます。デフォルトはチェックがされています。

設定後**エクスポート**を実行すると、**エクスポート・リクエストの表示**のリンクを含む通知が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/95da4437-e5d7-4e54-ce65-c32b5ea447db.png)

もし通知が消えてしまっても、ホーム画面の**エクスポート/インポートのリクエスト**で確認ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/03831b51-278b-6bc2-fedf-9eddc92c3dd1.png)

アクセスすると、実行したリクエストのステータスおよびこれまでのリクエストの履歴が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0c9a0dd8-72bb-06d7-ef02-2c1b0c7e4bed.png)

リクエストの詳細も確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/0b39b8a5-edee-dbc8-f401-f35376c2c363.png)

**詳細の表示**ではエクスポートしたオブジェクトのリストを確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/8551d5a0-2d5c-6eb5-4f96-a4720a62f2b5.png)

エクスポートが成功だったので、Object Storageを確認すると設定された名前のファイルが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/021b4745-1615-8a05-6778-4d90338e14be.png)

# エクスポートファイルの中身は？
エクスポートファイルをダウンロードして中をのぞいてみました。Objectsというフォルダとマニフェストファイルがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/87fe67e7-55d9-0e70-86bf-8161aa523429.png)

Objectsフォルダにはプロジェクトに含まれている設計リソースのJSONファイルがあるようです。参照を含めたため、データ・アセットや接続のJSONファイルも存在します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/719ab1bd-d0c3-d222-b5bd-7bdc265c951c.png)

各JSONファイルをのぞいてみると、マニフェストファイルの内容は以下でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6296f33d-640e-fd13-25e4-7b21fcc696c7.png)

設計リソースは例えば以下、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/8ae56d03-22fe-dd98-384a-9900bf1b8e6f.png)

データ・アセットは例えば以下でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6858852f-6685-e97f-8437-7e50276e51be.png)

# エクスポートファイルを同じテナンシーの別リージョンのOCI Data Integrationワークスペースにインポート
エクスポートしたファイルのインポートを試します。インポート先は同じテナンシーで別リージョンのワークスペースです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/4413d952-c186-3083-066b-5dd4f82a979b.png)

**プロジェクトの作成**から**インポート**を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6f715c09-e534-5563-ee14-460ce3b8a3bf.png)

エクスポートファイルを出力したObject Storageのバケットとエクスポートファイル名を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/6d5df59a-32d0-1f37-7dd0-ec7082048688.png)

インポート先に同じ名前のオブジェクトが存在した場合のアクションを**保持、置換、複製**から選択することが可能です。複製の場合は、指定した接頭辞、接尾辞が追加されたオブジェクト名でインポートがされます。

**インポート**をクリックすると、**インポート・リクエストの表示**リンクを含む通知が表示されます。もし、消えてしまってもエクスポートの時と同じく、ホーム画面の**エクスポート/インポートのリクエスト**で確認ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/5c00ea7c-e378-ed6b-fcf3-0f20e62fa16e.png)

リクエストの詳細を確認すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/2515f629-19e3-8725-01c0-3040de03497b.png)

インポートされたオブジェクトのリストが確認できます。解決処理にはインポートで指定したアクションに従った処理がされた結果がはいります。例では新規に作成されたため、「作成済み」となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/19a5da3f-741c-8be2-af26-daea71f18436.png)

プロジェクトのページではインポートされたプロジェクトを確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/198d0f2a-79db-1da9-9875-aa1d06a06f83.png)

プロジェクトの配下には、設計リソースも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/22ebbcf5-5384-4af5-9b9e-92c90b4322ea.png)

データ・アセットも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/229a82e2-fe59-548a-4fe7-d70f86207735.png)

Object Storageのデータ・アセットはポリシー上アクセスできるようになっていたので、そのままスキーマ（バケット）などを確認することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/c6363feb-927b-bb81-0463-82b423074a6f.png)

しかし、Autonomous Databaseのほうは、クレデンシャルファイルデータがない、というエラーになりました。
実際に処理を実行するためには、クレデンシャルを再設定する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/b84e70ae-9255-3467-2492-35f7472970a5.png)

# エクスポートファイルを別のテナンシーの別リージョンのOCI Data Integrationワークスペースにインポート
次に別テナンシーの場合を試してみました。今回はテナンシーをまたいだポリシー設定を行っていないので、出力したエクスポートファイルを別テナンシーのObject Storage上のバケットに配置してインポートしました。インポートの結果は成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/a44c4c1e-5805-f30d-0cd7-2dfd044b433e.png)

インポートされたデータ・フローを確認すると、エクスポートされたフローがきちんと表示されました。しかし、ソースであるObject Storageのファイル、ターゲットであるAutonomous Databaseいずれもアクセスするとデータ・エンティティを取得できないというエラーが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134317/373524c1-ba0b-e093-d168-c4f2bd4ff713.png)

これは、インポートの結果から確認できる通り、どちらもデータ・アセットとしては作成されていますが、Object Storageのデータ・アセットはアクセスできるポリシーがないため、またAutonomous Databaseもクレデンシャルがないためアクセスできないからとなります。

# おわりに
OCI Data Integrationのプロジェクトをエクスポートし、インポートをリージョン、テナンシーを変えて試してみました。どちらも設計リソースのインポートは成功しますが、データ・アセットをともにエクスポートして、インポートした場合は環境に適したポリシーや改めてのクレデンシャルの指定が必要となることが確認できました。

# 参考資料
+ ドキュメント：[オブジェクトのエクスポートおよびインポート](https://docs.oracle.com/ja-jp/iaas/data-integration/using/export-import.htm)
+ Davidさんのblog : [Exporting and Importing in OCI Data Integration](https://dave-allan-us.medium.com/exporting-and-importing-in-oci-data-integration-89ef0d75042a)
⇒OCICLIでの方法も記載されています