OCI Generative AI を使用するための Dify 設定ファイルの作成方法

## はじめに

OCI Generative AI を使用する場合、API キーとその関連情報の設定が必要です。この記事では、Dify に必要な認証情報を効率的に生成する方法を説明します。

---

## 1. 必要な情報の準備

OCI Generative AI を使用する前に、以下の情報が必要です。

- **ユーザー OCID**: OCI アカウントのユーザー ID
- **フィンガープリント**: OCI API キーのフィンガープリント
- **テナント OCID**: OCI アカウントのテナント ID
- **PEM ファイルのパス**: OCI API キーの PEM ファイルのパス
- **リージョン**: 使用する OCI リージョン
- **コンパートメント OCID**: 使用するコンパートメントの OCID

---

## 2. OCI設定ファイルを活用した効率的な認証情報生成

既存のOCI設定ファイルを活用することで、より効率的に認証情報を生成できます。[dify-on-oci-guide](https://github.com/engchina/dify-on-oci-guide)プロジェクトで提供されているスクリプトを使用すると、必要な情報を自動的に読み取ることができます。

### 2.1. スクリプトの入手と実行

```bash
curl -O https://raw.githubusercontent.com/engchina/dify-on-oci-guide/main/tools/oci-dify-credentials-generator.sh
chmod +x oci-dify-credentials-generator.sh
./oci-dify-credentials-generator.sh <profile> <compartment_ocid>
```

例：
```bash
./oci-dify-credentials-generator.sh DEFAULT ocid1.compartment.oc1..aaaaaaaa
```

### 2.2. スクリプトの機能

このスクリプトは以下の処理を行います：

1. 指定されたプロファイル名とコンパートメントOCIDを受け取ります
2. `~/.oci/config`ファイルから指定されたプロファイルの設定情報を読み取ります
3. 必要な設定項目（ユーザーOCID、フィンガープリント、テナントOCID、リージョン、PEMファイルパス）が存在するか検証します
4. 設定情報とPEMファイルの内容をBase64エンコードし、Difyで使用できる形式で出力します

### 2.3. 出力例

```
Reading [DEFAULT] configuration from config file...
Configuration loaded:
User OCID: ocid1.user.oc1..aaaaaaaa
Fingerprint: 11:22:33:44:55:66:77:88:99:00:aa:bb:cc:dd:ee:ff
Tenancy OCID: ocid1.tenancy.oc1..aaaaaaaa
Region: ap-osaka-1
PEM file path: /home/opc/.oci/oci_api_key.pem
Compartment OCID: ocid1.compartment.oc1..aaaaaaaa

[Dify: oci api key config file's content]
b2NpZDEudXNlci5vYzEuLmFhYWFhYWFhLzExOjIyOjMzOjQ0OjU1OjY2Ojc3Ojg4Ojk5OjAwOmFhOmJiOmNjOmRkOmVlOmZmL29jaWQxLnRlbmFuY3kub2MxLi5hYWFhYWFhYS9hcC10b2t5by0xL29jaWQxLmNvbXBhcnRtZW50Lm9jMS4uYWFhYWFhYWE=

[Dify: oci api key file's content]
LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUVwQUlCQUFLQ0FRRUEwZmR5M0ZRVkFtRXRzOVZmSGtNOEFtWk9XbVhUMmNWZU5SdTZPYzZQVEFPU3ZYaXoKLy4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==
```

### 2.4. メリット

- 手動で情報を入力する必要がなく、ミスを減らせます
- 既存のOCI設定を再利用できるため、効率的です
- 複数の環境やプロファイルで簡単に切り替えられます

---

## 3. 手動での認証情報生成（代替方法）

既存のOCI設定ファイルがない場合や、手動で認証情報を生成したい場合は、以下の方法を使用できます。

### 3.1. シェルスクリプトの作成

以下のシェルスクリプトを作成します：

```bash
vi genai-credentials.sh
---
#!/bin/bash

# 以下を自分の情報に置き換える
user="ユーザー OCID"
fingerprint="フィンガープリント"
tenancy="テナント OCID"
pem_file_path="PEM ファイルのパス"

# 以下は変更しない
compartment_ocid="コンパートメント OCID"
region="ap-osaka-1"  # 使用するリージョンを指定

# 複合文字列の作成
combined_string="$user/$fingerprint/$tenancy/$region/$compartment_ocid"

# 複合文字列を Base64 結合
encoded_combined_string=$(echo -n "$combined_string" | base64 --wrap=0)

# 結果を表示
echo "[Dify: oci api key config file's content]"
echo "$encoded_combined_string"

# PEM ファイルの存在チェック
if [ ! -f "$pem_file_path" ]; then
    echo "PEM ファイルが見つかりません: $pem_file_path"
    exit 1
fi

# PEM ファイルを Base64 結合
encoded_pem_content=$(base64 --wrap=0 "$pem_file_path")

# 結果を表示
echo
echo "[Dify: oci api key file's content]"
echo "$encoded_pem_content"
---
```

### 3.2. シェルスクリプトの説明

#### 3.2.1. 変数の設定

- `user`: OCI アカウントのユーザー OCID を指定します。
- `fingerprint`: OCI API キーのフィンガープリントを指定します。
- `tenancy`: OCI アカウントのテナント OCID を指定します。
- `pem_file_path`: OCI API キーの PEM ファイルのパスを指定します。
- `compartment_ocid`: 使用するコンパートメントの OCID を指定します。
- `region`: 使用する OCI リージョンを指定します。

#### 3.2.2. 複合文字列の作成

```bash
combined_string="$user/$fingerprint/$tenancy/$region/$compartment_ocid"
```

この行では、ユーザー OCID、フィンガープリント、テナント OCID、リージョン、コンパートメント OCID を `/` で区切った文字列を作成します。

#### 3.2.3. Base64 結合

```bash
encoded_combined_string=$(echo -n "$combined_string" | base64 --wrap=0)
```

この行では、作成した複合文字列を Base64 結合します。Dify に必要な設定ファイルの内容として使用します。

#### 3.2.4. PEM ファイルの処理

```bash
if [ ! -f "$pem_file_path" ]; then
    echo "PEM ファイルが見つかりません: $pem_file_path"
    exit 1
fi

encoded_pem_content=$(base64 --wrap=0 "$pem_file_path")
```

この行では、PEM ファイルの存在を確認し、存在する場合に PEM ファイルの内容を Base64 結合します。

---

## 4. 結果の確認

どちらの方法でも、スクリプトを実行すると、以下のような出力が表示されます。

```
[Dify: oci api key config file's content]
<Base64 結合された複合文字列>

[Dify: oci api key file's content]
<Base64 結合された PEM ファイルの内容>
```

これらの出力を Dify に必要な設定ファイルとして使用します。

---

## 5. 注意事項

- **セキュリティ**: API キーと PEM ファイルは非常に重要な情報です。これらの情報を第三者に漏洩しないように注意してください。
- **ファイルの保管**: 作成した設定ファイルも同様に重要な情報です。安全な場所に保管してください。
- **リージョン**: 使用するリージョンを正しく指定してください。指定したリージョンに存在しないリソースを使用するとエラーが発生します。

---

## 6. 終わりに

この記事では、OCI Generative AI を使用するための Dify 認証情報を生成する方法を説明しました。既存のOCI設定を活用する効率的な方法と、手動で認証情報を生成する代替方法の両方を紹介しました。OCI と Dify を使用する際には、セキュリティに十分注意してください。