Oracle Integration Gen3 で Postgres Adapterを使ってOCI Managed PostgreSQLへ接続する

# はじめに
Oracle integration Cloud(OIC)がアップグレードされたOIC3でPotgres Adapterが追加されていたので、OCIのManaged Postgresに接続できるか試してみたいと思います。この記事ではAdapterを使ってOICに接続の定義をしてテストで疎通確認をするところまでの手順をまとめます。

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

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

- Oracle Database with PostgreSQLについてはこちら
https://www.oracle.com/jp/cloud/postgresql/

# 事前準備
- Oracle Database with PostgreSQLをプロビジョニングし、さらにアクセスした後DBを作成していること。私は[こちら](https://qiita.com/atwits/items/ed1419936f900b0a3cfd)を参考にさせていただきました。

- Oracle jdk17のインストーラをダウンロードしていること。ダウンロードは[こちら](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)からできます。

- OICのエージェント・グループを作成していること。手順は[こちら](https://docs.oracle.com/cd//E83857_01/paas/application-integration/integrations-user/downloading-and-running-premises-agent-installer.html#GUID-7D122A63-C2CE-4813-A88A-F00B58AC311C)。

# Connectivity Agent用インスタンスの作成
OICのAdapterを使ってOCI Managed Postgresに接続するにはオンプレ接続用のConnectivity Agentを接続先のインスタンスへインストールする必要があります。が、Managed Postgresのインスタンスには直接アクセスできないので同じサブネット上にインスタンスを作成してそこにAgentをインストールします。

インスタンスの作成手順は省略。

イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/78a52ea6-5592-9974-a06b-9afaad00f77f.png)

# Connectivity Agentと構成ファイルの取得
まずはConnectivity Agentのzipファイルと接続のために必要な構成ファイルを取得します。
OICのコンソール画面から「設計」－「エージェント」に遷移し、右上の「ダウンロード」→「接続性エージェント」をクリックし、任意の場所にzipファイルをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/da8ad6b6-675b-d421-964d-4da85edeeff8.png)

次に任意のエージェント・グループのメニューから「構成のダウンロード」をクリックしてInstallerProfile.cfgというファイルを任意の場所にダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/2561f15d-c48e-f810-cacd-3b7092861854.png)

# Connectivity Agentのインストール
インスタンスにAgentをインストールします。今回は楽なのでCloud Shellを使います。

OCIのコンソールからCloud Shellを起動し、ネットワークをprivate subnetに切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/cc4ab780-ebd9-0997-1b85-abf29a7581fe.png)

jdk17のインストーラ、Connectivity AgentのzipファイルをCloud Shell上にアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/eebdd78e-aca4-d0ef-13ac-9a5489d278d1.png)

次にjdk17のインストーラ、Connectivity Agentのzipファイルを[こちら](#connectivity-agent%E7%94%A8%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90)で作成したインスタンスへ送信します。以下のコマンドで渡します。(※privatekeyはインスタンスを作成した際のものを事前にCloud Shellへ配置してください)

    scp -i .ssh/privatekey jdk-17.0.10_linux-x64_bin.tar.gz opc@{プライベートip}:/home/opc
    scp -i .ssh/privatekey oic_conn_agent_installer.zip opc@{プライベートip}:/home/opc

次にsshコマンドを使ってインスタンスへアクセスします。

    ssh -i .ssh/privatekey opc@{プライベートip}

アクセスできたら、以下のコマンドを使ってjdkをインストールします。

    sudo su
    tar -xvf jdk-17.0.10_linux-x64_bin.tar.gz
    mv jdk-17.0.10 /opt/
    export JAVA_HOME=/opt/jdk-17.0.10
    export PATH=$PATH:$JAVA_HOME/bin
    java --version

次にConnectivity Agentのzipファイルを解凍します。

    unzip oic_conn_agent_installer.zip

回答したら中にInstallerProfile.cfgというファイルがあるので中身を[こちら](#connectivity-agent%E3%81%A8%E6%A7%8B%E6%88%90%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%8F%96%E5%BE%97)でダウンロードした構成ファイルで置き替えます。参考までに中身は以下のようになってます。

    # Required Parameters
    # oic_URL format should be https://<runtimehostname>
    oic_URL=https://XXXXXXXXXXXXXXXXXXXXXXX.integration.us-phoenix-1.ocp.oraclecloud.com
    agent_GROUP_IDENTIFIER=YOINAKAG2
    oic_IDCS_URL=https://idcs-XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.identity.oraclecloud.com
    oic_SCOPE=https://XXXXXXXXXXXXXXXXXXXXX.integration.us-phoenix-1.ocp.oraclecloud.com:443urn:opc:resource:consumer::all
    oic_CLIENT_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    oic_CLIENT_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    # Proxy Parameters
    proxy_HOST=
    proxy_PORT=
    proxy_USER=
    proxy_PASSWORD=
    proxy_NON_PROXY_HOSTS=

ここまで出来たら以下のコマンドを実行してConnectivity Agentを起動します。

    java -jar connectivityagent.jar

正常に起動されると以下のようなメッセージが表示されます。

    [root@instance-20240510-1418-oic-agent-test opc]# java -jar connectivityagent.jar 
    Existing Agent installation found... Starting Agent for message processing.
    Checking for already running instances of this agent. This might take up to 15 seconds ... 
    Initializing the credential store ...
    Agent started successfully...Now available for new messages...

# OICの接続を定義

次にOICでPostgres Adapterを使って接続を定義します。
コンソールから「設計」－「接続」に遷移し、右上の「作成」をクリック→PostgreSQLを検索し、クリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/2d13bd70-5285-0738-318d-58b95b4674ce.png)

任意の名前を入力し、「作成」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/c5540ac1-e7b2-b870-79bd-b5d853987b56.png)

詳細の画面に遷移するので、以下のように必要な項目を入力します。

入力項目|値
-|-
Host|PostgresのEndpoint(OCI上のPostgresの詳細画面から確認可能)
Port|5432
Database Name|Postgresで事前に作成したDatabase Name
セキュリティ・ポリシー|Username Password Token With SSL Support
Choose Instance Type|OCI Managed DB
Usename|事前に作成したユーザー名
Password|事前に作成したPassword
オプションのセキュリティ Root Certificate|事前に作成したPostgres インスタンスの証明書(OCI上のPostgresの詳細画面からダウンロード可能)
アクセス・タイプ|接続性エージェントにチェック
エージェント・グループの関連付け|Connectivity Agentを起動したエージェント・グループ

参考(OCI上のPostgresの詳細画面)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/6f468694-68bd-7b90-416c-0951edc58964.png)

入力したら「テスト」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/82ad81c2-8274-9c70-6162-84c8a9c15002.png)

成功したら以下のメッセージが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479589/e27f9507-4545-6ef8-fa68-0b5a6a6b8a03.png)

これで接続の定義ができました。

次回はOICからどのような操作が可能か試してみたいと思います。