ノート:

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を認証またはサポートしていません。

目的

前提条件

タスク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コンパートメントの決定

  1. Linuxシステムにログインします。

    ノート:すべてのコマンドは、必要な前提条件がインストールおよび構成されているLinuxシステムから実行されます。

  2. 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"
      }
    }
    
  3. 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コンソールを使用できます。

    OCIテナンシ画面

    S3コンパートメントは、タスク4で再度使用されます。

タスク3: S3互換APIにアクセスするための顧客秘密キーの作成

OCI CLIコマンドを使用して秘密キーを生成します。

  1. 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"
    }
    
  2. ID (AWS_ACCESS_KEY_ID)およびキー(AWS_SECRET_ACCESS_KEY)を安全な場所にコピーし、後で環境変数を設定するために使用します。

    ノート:ユーザーOCIDは、OCI CLI構成ファイル(通常は$HOME/.oci/configに格納)にあります。

または

OCIコンソールを使用して秘密キーを生成し、右上隅のプロファイルに移動して、表示されたユーザー名を選択することもできます。「顧客秘密キー」リンクをクリックし、「秘密キーの生成」をクリックして表示名を設定します。「コピー」をクリックして秘密キーをセキュアな場所に格納し、「閉じる」をクリックします。

プロファイルから「顧客秘密キー」へのナビゲート

「秘密キーの生成」ウィンドウを閉じた後、「顧客秘密キー」のリストに表示名を検索し、「アクセス・キー」にマウス・ポインタを重ねてアクセス・キーをコピーします。

アクセス・キーのコピー

タスク4: 設定のためのバケット情報の収集

  1. OCIコンソールに移動し、「ストレージ」に移動して「バケット」をクリックします。

  2. 前提条件からバケット名をクリックし、次の情報を書き留めます。

    • バケットの名前
    • オブジェクトの「場所」。これは接頭辞になります。
    • リージョン名。リージョンおよび可用性ドメインからリージョン・コードを取得します。たとえば、米国東部(アッシュバーン)は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++サンプルのビルド

  1. 次のコマンドを実行して、gitでサンプル・リポジトリをクローニングします。

    $ git clone https://github.com/tonymarkel/OCI_AWS_CPP_SDK_S3_Examples.git
    
  2. 次のコマンドを実行して、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: サンプルの実行

  1. 次のコマンドを実行して、バケットのリストを取得します。

    $ ./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 
    
  2. 次のコマンドを実行して、オブジェクトのリストを取得します。

    たとえば次のようにします。

    $ ./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に戻り、環境変数が正しく設定されていることを確認します。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。