Oracle Analytics Cloud：REST APIで接続の管理

# はじめに
Oracle Analytics Cloud（**OAC**）でファイルやローカル・サブジェクトエリア以外のデータソースにアクセスする際には、「接続」を作成する必要があります。
「接続」はブラウザで簡単に作成できますが、REST APIで作成することもできますので、試してみました。

# 準備
OACインスタンスに接続するためには、OACインスタンスに関連付けられているIdentity Domainに機密アプリケーションを作成します。
手順はこちらの記事を参考にしてください。

- [Oracle Analytics Cloud：REST APIによるシステム設定の管理](https://qiita.com/tyo38/items/680bfe1eb1e0eedf8d96)

今回はAutonommous Data Warehouse（**ADW**）への接続を作成したいので、目的のADWインスタンスの資格証明ファイルを入手しておきます。

# 接続の作成
OCI管理コンソールからCloud Shellを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/01e0e7b8-d9ea-f861-8b99-7cbc2cf8c81a.png)

ADWの資格証明.zipを展開してcwallet.ssoをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/44e53f65-b381-e85e-70ec-c3e58743b19f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/70151691-9746-4cb2-b12a-9fb532052346.png)

tnsnames.oraを開いて、ADWへの接続文字列を確認しておきます。
Cloud Shellで次のコマンドの\<access_token>、\<OAC Hostname>、\<接続文字列>およびusernameとpasswordを適切な値に置き換えて実行します。

```shell
curl -i \
--header 'Authorization: Bearer <access_token>' \
--request POST 'https://<OAC Hostname>/api/20210901/catalog/connections' \
--form 'cert=@"cwallet.sso"' \
--form 'connectionParams="{ 
    \"version\": \"2.0.0\", 
    \"type\": \"connection\", 
    \"name\": \"myADW\", 
    \"description\": \"Sample Oracle ADW connection with a wallet created using Connections API\" , 
    \"content\": { 
        \"connectionParams\": { 
            \"connectionType\": \"oracle-autonomous-data-warehouse\" , 
            \"connectionString\": \"<接続文字列>\" , 
            \"username\": \"ADMIN\" , 
            \"password\": \"password \", 
            \"remoteData\": false , 
            \"systemConnection\": true , 
            \"sslType\": \"ClientSideSSL\" 
        } 
    } 
}"'

```

実行結果
```shell
HTTP/1.1 201 Created
Date: Mon, 15 Jan 2024 00:43:15 GMT
Content-Type: text/plain
Content-Length: 43
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
X-ORACLE-DMS-RID: 0:4
X-ORACLE-DMS-RID: 0
X-Content-Type-Options: nosniff
X-ORACLE-DMS-ECID: b7e414cf-8c5d-4ba8-86fb-7f431e5639a4-00032d5b
X-ORACLE-DMS-ECID: b7e414cf-8c5d-4ba8-86fb-7f431e5639a4-00032d5b
X-XSS-Protection: 1; mode=block
Vary: Origin,X-Forwarded-Proto
Strict-Transport-Security: max-age=31536000;

{"connectionID":"J3N5c3RlbScuJ215QURXJw=="}
```
connectionIDの戻り値は、接続のオブジェクトIDをBase64でエンコードしたものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/24c6472a-2fcc-e1e9-2f3d-f68ad6eb00ac.png)

# 接続の更新
更新したい接続のオブジェクトIDをエンコードします。
エンコードしたオブジェクトIDが「J3N5c3RlbScuJ215QURXJw==」の接続で、ADWにアクセスするユーザー名とパスワードを変更します。

```shell
curl \
 --header 'Authorization: Bearer <access_token>' \
 --request PUT  https://<OAC Hostname>/api/20210901/catalog/connections/J3N5c3RlbScuJ215QURXJw== \
 --form 'cert=@"cwallet.sso"' \
 --form 'connectionParams="{
      \"version\": \"2.0.0\",
      \"type\": \"connection\",
      \"content\": {
        \"connectionParams\": {
           \"username\": \"scott\",
           \"password\": \"password \"
        }
      }
}"'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a84eb92c-1066-d65d-1e7a-a46e6ec44f91.png)

# 接続の削除
削除したい接続のオブジェクトIDをエンコードします。
例えば、オブジェクトIDが「J3N5c3RlbScuJ215QURXJw==」の接続を削除する場合は、次の通りです。

```shell
curl -i \
 --header "Authorization: Bearer <access_token>" \
 --header "Content-Type: application/json" \
 --request DELETE https://<OAC Hostname>/api/20210901/catalog/connections/J3N5c3RlbScuJ215QURXJw==

HTTP/1.1 202 Accepted
Date: Mon, 15 Jan 2024 02:04:38 GMT
Content-Type: text/plain
Content-Length: 0
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
X-ORACLE-DMS-RID: 0:5
X-ORACLE-DMS-RID: 0
X-Content-Type-Options: nosniff
X-ORACLE-DMS-ECID: dac20284-1fb2-47e1-b485-578876cc6131-0003cfce
X-ORACLE-DMS-ECID: dac20284-1fb2-47e1-b485-578876cc6131-0003cfce
X-XSS-Protection: 1; mode=block
Vary: Origin,X-Forwarded-Proto
Strict-Transport-Security: max-age=31536000;
```

# ドキュメント

https://docs.oracle.com/en/cloud/paas/analytics-cloud/acapi/api-catalog-connections.html