結論(TL;DR)
oci-emulator
を使うことで、OCI CLIからバケット作成・オブジェクトの put/list/get をローカル開発環境だけで実行できました
はじめに
ローカル開発環境だけでOCI Object Storageの検証を完結させたかったので色々探したところ、
oci-emulator
を見つけたので実際に検証してみました。
結果として、OCI CLIからのバケット作成・オブジェクト操作(put/list/get)がローカルで完結できることを確認しました。本記事はその手順メモをもとにしたまとめです。
公式
構成と前提
- 実行環境: Oracle Linux 8.9(Dockerが動く他Linux/Macでも可)
- 主要ツール: Docker、OCI CLI
- ポート: 公式デフォルトの
12000/tcp
を使用
1. oci-emulatorを起動
# イメージ取得と起動(初回はpullが走る)
docker run -d -p 12000:12000 cameritelabs/oci-emulator:latest
# 起動確認(404応答になるがOK = サーバは生きている)
curl -v http://localhost:12000/
期待される応答例(抜粋):
HTTP/1.0 404 NOT FOUND
{"code": "NotAuthorizedOrNotFound", "message": "Authorization failed or requested resource not found."}
2. OCI CLIのプロファイル設定
エミュレータに合わせたダミーOCIDなどを ~/.oci/config
に追加します。
秘密鍵はリポジトリに同梱されているものをダウンロードして利用します。
# プロファイル追記
cat >> ~/.oci/config << 'EOF'
[EMULATOR]
user=ocid1.user.oc1..testuser
fingerprint=50:a6:c1:a1:da:71:57:dc:87:ae:90:af:9c:38:99:67
tenancy=ocid1.tenancy.oc1..testtenancy
region=ap-tokyo-1
key_file=~/.oci/emulator_private_key.pem
EOF
# 秘密鍵の取得
cd ~/.oci
wget https://raw.githubusercontent.com/cameritelabs/oci-emulator/main/assets/keys/private_key.pem -O emulator_private_key.pem
chmod 600 emulator_private_key.pem
# 反映する環境変数
export OCI_CLI_PROFILE=EMULATOR
export OCI_CLI_ENDPOINT=http://localhost:12000
export COMPARTMENT_ID=ocid1.compartment.oc1..testcompartment
3. バケット作成〜オブジェクト操作
「emubacket」というバケットを作成し、操作してみます
# バケット作成
oci os bucket create --compartment-id $COMPARTMENT_ID --name emubacket
# 一覧
oci os bucket list --compartment-id $COMPARTMENT_ID
# テストファイル作成とアップロード
echo "test data from emulator" > test.txt
oci os object put --bucket-name emubacket --file test.txt --name test.txt
# 確認
oci os object list --bucket-name emubacket
# ダウンロード
oci os object get --bucket-name emubacket --name test.txt --file download.txt
cat download.txt
実行結果(抜粋)
バケット作成:
{
"data": {
"approximate-count": 0,
"approximate-size": 0,
"auto-tiering": null,
"compartment-id": "ocid1.compartment.oc1..testcompartment",
"created-by": "ocid1.user.oc1..testuser",
"defined-tags": null,
"etag": "deb90915-35dc-41f8-a8d3-7b86bd76ac2d",
"freeform-tags": null,
"id": "ocid1.bucket.oc1.sa-saopaulo-1.fwcazpoifpwjyppj8ujds103xxjn3pcc9u5de0ca4t384ucwief3nk45v02q",
"is-read-only": null,
"kms-key-id": null,
"metadata": null,
"name": "emubacket",
"namespace": "namespace_name",
"object-events-enabled": null,
"object-lifecycle-policy-etag": null,
"public-access-type": null,
"replication-enabled": null,
"storage-tier": null,
"time-created": "2025-10-15T11:46:49.522690+00:00",
"versioning": "Disabled"
}
}
バケット一覧:
{
"data": [
{
"compartment-id": "ocid1.compartment.oc1..testcompartment",
"created-by": "ocid1.user.oc1..testuser",
"defined-tags": null,
"etag": "deb90915-35dc-41f8-a8d3-7b86bd76ac2d",
"freeform-tags": null,
"name": "emubacket",
"namespace": "namespace_name",
"time-created": "2025-10-15T11:46:49.522690+00:00"
}
]
}
オブジェクトアップロード(ETag):
{
"etag": "0888640a-fdff-4d04-855e-04bd82388d15"
}
オブジェクト一覧:
{
"data": [
{
"archival-state": null,
"etag": "0888640a-fdff-4d04-855e-04bd82388d15",
"md5": null,
"name": "test.txt",
"size": 24,
"storage-tier": null,
"time-created": null,
"time-modified": null
}
],
"prefixes": []
}
ダウンロード内容:
test data from emulator
4. ユースエースと制約
-
ユースケース
- SDK/CLIを用いた機能検証をローカルで実行可能
- クラウド接続が制限される環境での検証
-
制約・注意
- 実サービス完全互換ではない(リージョン/認可/IAM/イベント等は制限あり)
- 公式からの秘密キーはあくまでも検証目的で利用しています。セキュリティ上あまり好ましくはない
6. まとめ
- Dockerで
oci-emulator
を起動し、OCI CLIからObject Storage操作をローカル完結で検証できました - 本番等価ではない点に留意しつつ、初期開発・学習・デモ用途で有用です