本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
これまでのODIシリーズの記事では、各種のODI製品(サービス)の差異を含め、さまざまなトピックを紹介してきました。今回は、OCI Data Integraton (以下 OCI DI と省略)の一般的な利用場面を紹介したいと思います。
検証シナリオ
オブジェクト・ストレージ上のJSONファイルからデータを読み込み、それをターゲットDBに(Oracle DBを例に)をロードします。この例では、単一のソースファイルからデータを読み込み、そのままDBにロードするため、データの編集やマージなどの機能には触れません。
オブジェクト・ストレージや Oracle DB 以外にも、多くの種類のデータ・ソースがサポートされています。詳細のリストについて、こちらをご参照ください。
目次
1. 事前準備
1-1. ネットワーク・リソース
OCI DI のワークスペースを作成する際、VCN内部か外部どちらかを指定できます。今回の例は、デフォルトの選択肢(VCN内部)を選び、プライベート・サブネットで作成します。
Oracle DBは、同じリージョンかつ同じVCNの下にある異なるプライベート・サブネットに格納されます。OCI DIからはサービス・ゲートウェイを経由して、同じリージョンのオブジェクト・ストレージにアクセスします。これらのデータ転送はすべてインターネットを経由せずにOCI内部で行われます。
この例では、OCI DIから他のリソースにアクセスするために、ワークスペースが所属するサブネットに対してセキュリティ・リストを付与する必要があります。設定の詳細は以下の通りです。
タイプ | 項目 | 値 | コメント |
---|---|---|---|
VCN | CIDR | 10.0.0.0/16 | |
プライベート・サブネット | 名前 | Private Subnet DI | ワークスペースの格納先 |
CIDR | 10.0.5.0/24 | ||
プライベート・サブネット | 名前 | Private Subnet DB | ターゲットDBの格納先 |
CIDR | 10.0.6.0/24 | ||
サービス・ゲートウェイ | サービス | "All Region-ID Services in Oracle Service Network" | サービスの指定が間違っている場合、接続時タイムアウトが発生する。 |
ルート表 (Private Subnet DI に付ける) | ルール | ターゲット・タイプ: サービス・ゲートウェイ 宛先サービス: "All Region-ID Services in Oracle Service Network" |
宛先サービスの指定が間違っている場合、接続時タイムアウトが発生する。 |
セキュリティ・リスト (Private Subnet DI に付ける) | Ingress | 空白でよい | OCIコンソールでDIを操作する |
Egress | 0.0.0.0/0, TCP All | ポートを絞りたい場合、ALLではなく、443 (Object Storage) と 1521 (Oracle DB) に変更 | |
セキュリティ・リスト (Private Subnet DB に付ける) | Ingress | ソース CIDR: 10.0.5.0/24 プロトコル: TCP 宛先ポート: 1521 |
ワークスペースからのアクセスを許可 |
Egress | 0.0.0.0/0, TCP All |
1-2. バケットとターゲットDB
一個のJSONファイルをバケットに保存しておきます。サンプル・データは、ここからダウンロードしてください。
この例で使用しているDBの情報は以下の通りです。
DB タイプ:Oracle Base DB (VM)
DB バージョン:19c Standard Edition
後ほど、SCAN DNS 名で接続しますので、それをコピーしておいてください(プライベートIPを使用しても構いません)。
ユーザの作成
SQL Plusで以下のコマンドを実施します。
管理者ユーザでPDBにログイン:
sqlplus system/<password>@<Private_IP>:1521/db19cse_pdb1.privatesubnetdb.vcn1.oraclevcn.com
ユーザ作成と権限の付与:
create user DIUSER identified by "<password>";
grant create table to DIUSER;
grant unlimited tablespace TO DIUSER;
テーブルの作成
作成したユーザでPDBにログイン:
sqlplus DIUSER/<password>@<Private_IP>:1521/db19cse_pdb1.privatesubnetdb.vcn1.oraclevcn.com
テーブル作成用SQLの実行:
SQL> @create_customers_target.sql
SQL文は、ここより取得できます。
1-3. IAM ポリシー
必要なポリシーは、ワークスペース作成画面から次のように確認できます。
Data Integration -> Workspace -> Show more information
グループとポリシーの設定例
グループ名:OCI_DI_GRP (ユーザを入れる)
ポリシー:OCI_DI_Policy (作業用Compartmentの下に)
ステートメント:
allow service dataintegration to use virtual-network-family in compartment Liu
allow group OCI_DI_GRP to manage dis-workspaces in compartment Liu
allow group OCI_DI_GRP to manage dis-work-requests in compartment Liu
allow group OCI_DI_GRP to use virtual-network-family in compartment Liu
allow group OCI_DI_GRP to manage tag-namespaces in compartment Liu
Allow group OCI_DI_GRP to use object-family in compartment Liu
Allow any-user to inspect compartments in compartment Liu where ALL {request.principal.type='disworkspace'}
Allow any-user to use buckets in compartment Liu where ALL {request.principal.type = 'disworkspace', request.operation = 'GetBucket'}
Allow any-user to manage objects in compartment Liu where ALL {request.principal.type = 'disworkspace'}
※、この時点で、ワークスペースをまだ作成していないので、取り敢えずrequest.principal.id='<workspace_ocid>'
という条件を外します。ワークスペース作成後、OCIDを取得し追加してもOKです。
2. ワークスペースの作成
OCIメニュー -> Analytics & AI -> Data Integration
作成用情報を入力
ワークスペースは、2種類のネットワークタイプがあります。VCNの内部か外部のどちらに指定できます。この例は、デフォルトの"Enable private network"を利用しますので、チェックを入れたままでOKです。ワークスペースの名前を入力し、VCNとサブネットを指定してから、作成ボタンをクリックします。
自分の環境では、作成完了まで約10分かかりました。ステータスは自動的にリフレッシュされないので、ご注意ください。長い時間が経っても「Active」にならない場合は、手動で画面をリフレッシュしてください。
3. データ・アセットの作成
作成したワークスペースをクリックすると、下記のホーム画面に入ります。ソースとターゲットに接続するため、データ・アセットを作成します。作成画面に入るには、以下のいずれかの方法を選択できます。
- 左上の"+"をクリックし、"Data assets"をクリックする。
- 左上の"Data assets"を直接にクリックする。
- "Quick actions"の枠に、"Create data asset"をクリックする。
"Quick actions"の場合、以下のデータ・アセットの一覧画面を飛ばして、直接作成画面に入ります。
3-1. ソース側(オブジェクト・ストレージ)
ソース側は、オブジェクト・ストレージで、以下のようにタイプを指定してください。
テナンシOCID、ネームスペース、およびリージョンは自動的に入力されますので、そのままでOKです。他のリージョンやテナンシを指定したい場合は、関連情報を取得して置き換えてください。
(関連情報の取得方法を省略します。ネームスペースの取得方法が分からない場合は、こちらをご参照ください。)
オブジェクト・ストレージにアクセスするため、ポリシーの設定は必要です。事前準備のステップで既に設定済で、ここには何をしなくてもよいです。ポリシーの設定方法を確認したい時、"Show more information"をクリックすれば、詳細内容が見られます。
"Test connection"をクリックし、接続をテストします。成功のメッセージを確認したら、接続情報を保存します。接続が失敗した場合、トラブル・シューティングをご参考ください。
接続が失敗しても、一旦入力情報を保存しておき、後ほど編集してもOKです。
バケット一覧画面からは、バケットとその中身のオブジェクトを確認できます。バケットを見るためには、まずCompartmentを指定してください(デフォルトは空白になっていますのでご注意ください)。
3-2. ターゲット側(Oracle DB)
Data Integration -> DI_Workspace_Private -> Quick actions (Create data asset)
以下のように接続情報を入力します。
- ホスト:SCAN DNS 名 (プライベートIPでもよい)
- ポート:1521
- サービス名:PDBのサービス名 (サービス名の取得方法を分からない方は、こちらをご参照ください。)
テーブルの確認:
Details -> Schemas -> "DIUSER"を選択
表名をクリックしたら、テーブルの構成も確認できます。
4. データフローの作成
"My First Project"の利用
プロジェクトを新規作成しても構いませんが、この例では既存の"My First Project"をそのまま利用します。入口は、以下のいずれでも構いません。
- 左上の"+"をクリックし、"Projects"をクリックする。
- 左上の"Projects"を直接にクリックする。
- "Recents"の枠に、"My First Project"をクリックする。 (一回利用したことがある場合)
データフローの作成
"Create data flow"をクリックし、作成を開始します。
フローの名前(Load Customers Data
)を入力し、「作成」をクリックします。デザイナは開いたままになっており、編集を続行できます。
ソースとターゲットの編集
画面左側の矢印アイコンをクリックすると、各アイコンの詳細情報が表示されます。ソースとターゲットのアイコンを画面の中にドラッグアンドドロップします。そして、ソースとターゲットの間に線を結びつけます。
ソースを選択し、IDとのデータ・アセットの情報を設定します。
ターゲットを選択し、IDとのデータ・アセットの情報を設定します。
5. 統合タスクの作成と実行
5-1. 統合タスクの作成
Quick actions → Create integration Task
この例は、既存の"My First Project"を使います。
選択後、Validaton(検証)が自動開始します。成功を確認した後、「作成してクローズ」をクリックします。
注意: テーブルに既存データがある場合、キー違反により検証が失敗する可能性があります。
5-2. アプリケーションの作成
入り口は、以下のどちらでもOKです。
- Quick actions → Create application
- Menu → Applications -> Create application (as below)
作成をクリックします。
アプリケーション名を入力し、作成を開始します。
5-3. アプリケーションへのタスクの公開
プロジェクトの下のタスクに入って、右側のメニューから"Public to application"をクリックします。
5-4. タスクの実行
アプリケーションの画面に移動して、タスクを実行します。
Application: Application_Sample → Tasks → IntegrationTask_Sample → Run
実行結果を確認します。(実行のステータス:未開始 → キュー済 → 実行中 → 成功)
テーブルの中身を確認します。
方法1
データ・アセットの詳細 -> Schemas -> DIUSERを選択 -> Data entities -> テーブル名を選択 -> Data
方法2: SQL Developerでテーブルの中身と件数を確認します。
テーブルの中身:
ここまで、OCI DI で成功にデータを Oracle DB にロードできました。お疲れ様です。
トラブル・シューティング
問題-1 (オブジェクト・ストレージへのテスト接続はタイムアウト)
現象: テスト接続は、タイムアウトが発生し接続できない。
可能な原因-1: ポリシー設定は足りない。
対策:1-3. ポリシーの設定内容に合っているかをもう一度確認してください。
可能な原因-2: セキュリティ・リストは、設定不正か漏れがある。
対策:ワークスペースが所属するプライベート・サブネットに対し、セキュリティ・リストを付けて以下のように、Egress ルールを設定する。
- 宛先のCIDR: 0.0.0.0/0
- IP プロトコル: TCP
- 宛先ポート:ALL (通常は、Allを指定してもよい。ポートを絞りたい時、オブジェクト・ストレージにアクセスするのに、443 ポートを指定する。)
可能な原因-3: ルート表にサービス・ゲートウェイの設定がない。
対策:以下のようにサービス・ゲートウェイを追加し、宛先サービスは、"All Region-ID Services in Oracle Services Network"を指定する。
可能な原因-4: サービス・ゲートウェイの設定があるが、サービスのタイプが間違った。
対策:"All Region-ID Services in Oracle Services Network"を指定する。
"OCI Region-ID Object Storage"に指定した場合、タイムアウトが発生するので、ご注意ください。
問題-2 (Oracle DBへのテスト接続はタイムアウト)
現象: エラーメッセージは、問題1と同様(IDが毎回変わる)
可能な原因-1: セキュリティ・リストは、設定不正か漏れがある。
対策:ワークスペースが所属するプライベート・サブネットに対し、セキュリティ・リストを付けて以下のように、Egressルールを設定する。
- 宛先のCIDR: 0.0.0.0/0 (絞りたい時、Oracle DBのプライベートIPに設定)
- IP プロトコル: TCP
- 宛先ポート:ALL (通常、Allを指定してもよいが、ポートを絞りたい時、Oracle DBへ接続するのには、1521 ポートを指定する。)
以上です。
関連記事
オラクル・クラウドの個人ブログ一覧
ODI On-PとODI MarketplaceとOCI Data Integrationの比較
オブジェクト・ストレージからOracle DB 19c/21cにデータを導入する
オブジェクト・ストレージからデータを Oracle DB/ADB にロードする方法のまとめ
オフィシャル・リンク
サービス・ホームページ (価格表、見積もりを含める)
ドキュメント・ホームページ
データ統合のチュートリアル (オブジェクト・ストレージから Autonomous DB へ)
Understanding VCN Configuration for Oracle Cloud Infrastructure (OCI) Data Integration (English blog)