ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
AWS SDK for C++でのOCI Object Storage Amazon S3 Compatibility APIの使用
イントロダクション
Oracle Cloud Infrastructure(OCI)Object Storageを使用すると、あらゆるタイプのデータをネイティブ形式で安全に格納できます。組み込みの冗長性により、OCI Object Storageは、分析、バックアップ、アーカイブの目的で複数のデータ・ソースを統合するために使用できるため、拡張性と柔軟性を必要とする最新のアプリケーションを構築するのに最適です。
OCI Object Storageはクラウド・ワークロードの基礎であり、弾力性、スケーラビリティ、信頼性、コスト効率により、クラウド内の非構造化データのプライマリ・ストレージとなっています。その人気の結果として、OCI Object Storageと連携するためのツールの広範なエコシステムがあります。
OCI Object StorageはAmazon S3 Compatibility APIを提供し、お客様は引き続き既存のAmazon S3ツールを使用し、アプリケーションに最小限の変更を加えてOCI Object Storageで動作するようにできます。Amazon S3 Compatibility APIとOCI Object Storageのデータセットは一致しています。Amazon S3 Compatibility APIを使用してデータをOCI Object Storageに書き込む場合、そのデータはネイティブのOCI Object Storage APIを使用して読み取ることができます。逆も同様です。AWS SDK for C++を使用するお客様は、Amazon S3 Compatibility APIを使用するときに認証面が困難になることがあります。このチュートリアルでは、AWS SDK for C++の使用を開始するための簡単な例を2つ提供することを目的としています。
ノート:これらは、AWS SDK for C++を使用するスクリプトの例であり、公式のOracle applicationsではなく、Oracleによって保守またはサポートされません。これらは例であるため、独自のソフトウェア・リポジトリのユース・ケースに合せて確認、更新およびカスタマイズできます。Oracleは、サードパーティのSDKを認証またはサポートしていません。
目的
-
OCI Object StorageでAWS SDK for C++を使用する場合、SSL証明書および認証の問題を回避します。
-
OCI Object Storageサービスで、ListBucketsおよびListObjectsV2のサンプルC++コードを実行します。
前提条件
-
OCIアカウント。
-
OCIオブジェクト・ストレージ内のバケットおよびオブジェクトを読み取るユーザー権限。詳細は、ユーザーにオブジェクトをオブジェクト・ストレージ・バケットからダウンロードさせるを参照してください。
-
接頭辞/ディレクトリにネストされた既存のオブジェクトを含む既存のバケットへのアクセス。チュートリアルにはバケット名が必要です。詳細は、オブジェクト・ストレージへのデータの配置チュートリアルを参照してください。
-
macOS、Linux、Berkeley Software Distribution (BSD)およびWindows PowerShell、コマンド・プロンプトまたはbashでの端末またはシェル・インタフェースの使用に精通しています。
-
Linuxシステムへのアクセス
-
Linuxシステムにソフトウェアをインストールする機能またはアクセス権。
-
Oracle Cloud Infrastructureコマンドライン・インタフェース(OCI CLI)をインストールし、Linuxシステムに構成します。詳細は、CLIのインストールを参照してください。
-
Linuxシステムの
LD_LIBRARY_PATH
の共有ライブラリを使用してAWS SDK for C++をインストールします。詳細は、Linux/macOSでのAWS SDK for C++の構築を参照してください。 -
LinuxシステムにGitをインストールします。詳細は、「スタート・ガイド- Gitのインストール」を参照してください。
タスク1: パスおよび仮想ホスト・スタイルのURLの理解
このチュートリアルの記述時に、OCI Object Storage Amazon S3 Compatibility APIはパス形式のURLをサポートしています。つまり、バケットはURLパスにあります。
たとえば次のようにします。
https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName
または、次の操作を実行します。
https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyBucketName/MyObjectName
仮想ホスト・スタイルのURLでは、OCIオブジェクト・ストレージのバケット名がURLのサブドメイン(または先頭)に含まれます。
たとえば次のようにします。
https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com
または、次の操作を実行します。
https://MyBucketName.MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/MyObjectName
デフォルトでは、AWS SDK for C++は仮想ホスト形式のURLを使用します。AWSで生成されたコード例に従い、OCIテナンシから値を置き換えると、次のようなエラーが表示されます。詳細は、バケットの作成、リストおよび削除を参照してください。
curlCode: 60, SSL peer certificate or SSH remote key was not OK
コードが仮想ホスト・スタイルのURLを使用しているため、コードはOCIオブジェクト・ストレージ・バケットまたは有効な証明書を参照しません。
パス形式のURLを使用するには、S3Client設定を変更する必要があります。次のコマンドを使用して構成を設定する必要があります。
Aws::Client::ClientConfiguration config;
S3Client s3Client(config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
タスク2: テナンシ・ネームスペースおよびS3 APIコンパートメントの決定
-
Linuxシステムにログインします。
ノート:すべてのコマンドは、必要な前提条件がインストールおよび構成されているLinuxシステムから実行されます。
-
oci os ns get-metadata
OCI CLIコマンドを実行します。$ oci os ns get-metadata { "data": { "default-s3-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa", "default-swift-compartment-id": "ocid1.tenancy.oc1..bbbbcccdabcc0x0aaaaaa00aaaaaaaaaaa0b0b00ccccccccbbbbbbbb00aa", "namespace": "MyNamespace" } }
-
S3コンパートメントOCIDに
tenancy
という語が含まれている場合は、ルート・コンパートメントです。次のコマンドを使用して名前を取得します。$ oci iam compartment get --compartment-id <compartment_ocid>
または、テナンシ・ルート・コンパートメントに対して次のコマンドを実行します。
$ oci iam tenancy get --tenancy-id <tenancy_ocid>
または、右上隅にあるプロファイルに移動し、テナンシ(
your_tenancy_name
)を選択してネームスペースおよびS3 APIコンパートメントを決定することで、OCIコンソールを使用できます。S3コンパートメントは、タスク4で再度使用されます。
タスク3: S3互換APIにアクセスするための顧客秘密キーの作成
OCI CLIコマンドを使用して秘密キーを生成します。
-
oci iam customer-secret-key create
コマンドを実行します。oci iam customer-secret-key create --display-name display-name --user-id ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq { "data": { "display-name": "display-name", "id": "7aaaa3462aa34271a276002015f30674a5325aaa", "inactive-status": null, "key": "1aaa577aaaa/aa3aa92aa7aa7aaaaaaAa0aaaAa8AAa=", "lifecycle-state": "ACTIVE", "time-created": "2024-07-19T19:58:03.794000+00:00", "time-expires": null, "user-id": "ocid1.user.oc1..aaaaaaaa-user-ocid-sdd6ahdouq" }, "etag": "e63038c73fc24fa087a2a4c3339ef709" }
-
ID (
AWS_ACCESS_KEY_ID
)およびキー(AWS_SECRET_ACCESS_KEY
)を安全な場所にコピーし、後で環境変数を設定するために使用します。ノート:ユーザーOCIDは、OCI CLI構成ファイル(通常は
$HOME/.oci/config
に格納)にあります。
または
OCIコンソールを使用して秘密キーを生成し、右上隅のプロファイルに移動して、表示されたユーザー名を選択することもできます。「顧客秘密キー」リンクをクリックし、「秘密キーの生成」をクリックして表示名を設定します。「コピー」をクリックして秘密キーをセキュアな場所に格納し、「閉じる」をクリックします。
「秘密キーの生成」ウィンドウを閉じた後、「顧客秘密キー」のリストに表示名を検索し、「アクセス・キー」にマウス・ポインタを重ねてアクセス・キーをコピーします。
タスク4: 設定のためのバケット情報の収集
-
OCIコンソールに移動し、「ストレージ」に移動して「バケット」をクリックします。
-
前提条件からバケット名をクリックし、次の情報を書き留めます。
- バケットの名前。
- オブジェクトの「場所」。これは接頭辞になります。
- リージョン名。リージョンおよび可用性ドメインからリージョン・コードを取得します。たとえば、米国東部(アッシュバーン)はus-ashburn-1で表されます。
タスク5: 環境変数の設定
次のコマンドを使用して、前のタスクの情報に基づいて環境変数を設定します。
export AWS_ACCESS_KEY_ID="<your access key ID from Task 3>"
export AWS_SECRET_ACCESS_KEY="<your secret key ID from Task 3>"
export OCI_REGION="bukcet region from Task 4>"
export OCI_NAMESPACE="<namespace name from Task 1>"
export OCI_BUCKET="<your bucket name from Task 4>"
export OCI_PREFIX="<object prefix name from Task 4>"
たとえば次のようにします。
export AWS_ACCESS_KEY_ID="da34baaa4ab029f51c34c1cee83d40f0dEXAMPLE"
export AWS_SECRET_ACCESS_KEY="7w3uMS6kYiYkUpziSlLFcBimBsYDJfojwCWKEXAMPLE="
export OCI_REGION="us-ashburn-1"
export OCI_NAMESPACE="MyNamespace"
export OCI_BUCKET="Images"
export OCI_PREFIX="2024/12/18/Camera"
タスク6: C++サンプルのビルド
-
次のコマンドを実行して、gitでサンプル・リポジトリをクローニングします。
$ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
-
次のコマンドを実行して、C++の例を含むディレクトリに変更し、ビルド・ディレクトリを作成し、そのディレクトリに変更してから、buildおよびmakeを実行します。
$ OCI_AWS_CPP_SDK_S3_Examples $ mkdir build $ cd build $ cmake .. $ make
ノート:これらは、AWS SDK for C++を使用するスクリプトの例であり、公式のOracle applicationsではなく、Oracleによって保守またはサポートされません。これらは例であるため、独自のソフトウェア・リポジトリのユース・ケースに合せて確認、更新およびカスタマイズできます。Oracleは、サードパーティのSDKを認証またはサポートしていません。
タスク7: サンプルの実行
-
次のコマンドを実行して、バケットのリストを取得します。
$ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY
たとえば次のようにします。
$ ./listBuckets $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY S3 Endpoint is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com/ Found 3 buckets Demo Images Logs
-
次のコマンドを実行して、オブジェクトのリストを取得します。
たとえば次のようにします。
$ ./listObjects $OCI_NAMESPACE $OCI_REGION $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY $OCI_BUCKET $OCI_PREFIX S3 Object Path is: https://MyNamespace.compat.objectstorage.us-ashburn-1.oraclecloud.com Bucket is: Images Prefix is: 2024/12/18/Camera LISTING OBJECTS Found 3 objects 2024/12/18/Camera/Image1.jpeg 2024/12/18/Camera/Image2.jpeg 2024/12/18/Camera/DefinitelyNotACat.jpeg
ノート:問題がある場合は、タスク5に戻り、環境変数が正しく設定されていることを確認します。
関連リンク
承認
-
著者 - Kenneth Heung (マスター・プリンシパル・クラウド・アーキテクト)、Tony Markel (プリンシパル・クラウド・アーキテクト)
-
貢献者 - Melinda Centeno (シニア・プリンシパル・プロダクト・マネージャー)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Use OCI Object Storage Amazon S3 Compatibility API with AWS SDK for C++
G28124-01
Copyright ©2025, Oracle and/or its affiliates.