Oracle Cloud Infrastructureドキュメント

Amazon S3互換API

Amazon S3 Compatibility APIを使用すると、顧客は引き続き既存のAmazon S3ツール(SDKクライアントなど)を使用でき、パートナは、オブジェクト・ストレージで動作するようにアプリケーションを最小限に変更できます。Amazon S3 Compatibility APIオブジェクト・ストレージのデータセットは一致しています。Amazon S3 Compatibility APIを使用してデータをオブジェクト・ストレージに書き込む場合、そのデータはネイティブのオブジェクト・ストレージAPIを使用して読み取ることができます。逆も同様です。

オブジェクト・ストレージAPIとAmazon S3 Compatibility APIの間の相違点

Oracle Cloud InfrastructureおよびAmazon S3が提供するオブジェクト・ストレージ・サービスでは、同様の概念および用語が使用されています。どちらの場合も、データはオブジェクトとしてバケットに格納されます。相違点は、オブジェクトを操作するための機能およびツールの実装にあります。

次に、2つのストレージのテクノロジ間の相違点を示します:

  • コンパートメント

    Amazon S3ではコンパートメントは使用されません。デフォルトでは、Amazon S3 Compatibility APIまたはSwift APIを使用して作成されたバケットは、Oracle Cloud Infrastructureテナンシのルート・コンパートメントに作成されます。かわりに、Amazon S3 Compatibility APIまたはSwift APIに異なるコンパートメントを指定して、バケットを作成できます。

  • グローバル・バケット・ネームスペース

    オブジェクト・ストレージではグローバル・バケット・ネームスペースは使用されません。各テナントは、リージョン内のすべてのコンパートメントにまたがって1つのデフォルト・ネームスペースと関連付けられます。ネームスペースは、すべてのバケットおよびオブジェクトのコンテナとして機能します。ネームスペース内でバケット名を制御しますが、バケット名は各リージョン内で一意である必要があります。米国西部(フェニックス)MyBucketという名前のバケットと、ドイツ中央部(フランクフルト)MyBucketという名前のバケットを持つことができます。

  • 暗号化

    Oracle Cloud Infrastructure Object Storageサービスは、デフォルトですべての保存データを暗号化します。APIを使用して暗号化を有効または無効にすることはできません。

  • オブジェクト・レベルのアクセス制御リスト(ACL)

    Oracle Cloud Infrastructureでは、オブジェクトにACLは使用されません。かわりに、IAMポリシーを使用して、コンパートメント、バケットおよびオブジェクトへのアクセスを管理します。

詳細は、オブジェクト・ストレージ・サービスの概要を参照してください。

Amazon S3 Compatibility APIの前提条件

Amazon S3からオブジェクト・ストレージへのアプリケーション・アクセスを有効にするには、Oracle Cloud Infrastructureへのアクセスを設定し、アプリケーションを変更する必要があります。

Oracle Cloud Infrastructureへのアクセスの設定:

アプリケーションの変更:

  • ネームスペースおよびリージョン識別子を含むアプリケーションに対して新しいエンドポイントを構成します。たとえば、mynamespace.compat.objectstorage.us-phoenix-1.oraclecloud.comです。

  • ターゲット・リージョンをOracle Cloud Infrastructureリージョンの1つとして設定します。

    重要

    アプリケーションでリージョン識別子を正しいOracle Cloud Infrastructure識別子に設定できない場合、リージョンをus-east-1に設定するか、または空白のままにする必要があります。この構成を使用する場合、Oracle Cloud Infrastructureホーム・リージョンにあるAmazon S3 Compatibility APIのみを使用できます。
    リージョンを手動で設定できる場合は、任意のOracle Cloud Infrastructureリージョンに対してアプリケーションを使用できます。

  • Amazon S3 Compatibility APIキーを使用するようにアプリケーションを構成します。
  • アプリケーションでは、パス・ベースのアクセスを使用する必要があります。仮想ホスト・スタイルのアクセス(bucketname.namespace.compat.objectstorage.region.oraclecloud.comとしてのバケットへのアクセス)はサポートされていません。

これで、Amazon S3 Compatibility APIを使用してOracle Cloud Infrastructureオブジェクト・ストレージにアクセスできるようになります。

Amazon S3 Compatibility APIのサポート

Amazon S3 Compatibility APIのサポートは、バケット・レベルおよびオブジェクト・レベルで提供されます。

バケットAPI

次のバケットAPIがサポートされています:

オブジェクトAPI

次のオブジェクトAPIがサポートされています:

マルチパート・アップロードAPI

次のマルチパート・アップロードAPIがサポートされています:

タグ付けAPI

次のタグ付けAPIがサポートされています:

サポートされるAmazon S3クライアント

ここでは、様々なクライアント・アプリケーションを構成して、オブジェクト・ストレージのAmazon S3互換のエンドポイントと通信する例をいくつか示します。アクセス・キー/秘密キーのペアであるAmazon S3で認証するには、既存の署名キーを使用するか、特別な署名キーを作成する必要があります。詳細は、ユーザー資格証明の管理を参照してください。

AWS SDK for Java

次に、AWS SDK for Javaの構成例を示します。

                // Get S3 credentials from the console and put them here
                
AWSCredentialsProvider credentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(
"gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
"7fa22331ebe62bf4605dc9a42aaeexampleuniqueID"));

// Your namespace
String namespace = "namespace";

// The region to connect to
String region = "us-ashburn-1";

// Create an S3 client pointing at the region
String endpoint = String.format("%s.compat.objectstorage.%s.oraclecloud.com",namespace,region);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AmazonS3 client = AmazonS3Client.builder()
.standard()
.withCredentials(credentials)
.withEndpointConfiguration(endpointConfiguration)
.disableChunkedEncoding()
.enablePathStyleAccess()
.build();

AWS SDK for Javascript

次に、AWS SDK for Javascriptの構成例を示します。

s3 = new AWS.S3({
  region: 'us-ashburn-1',
  endpoint: 'https://' + mynamespace + '.compat.objectstorage.us-ashburn-1.oraclecloud.com',
  accessKeyId: 'gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID',
  secretAccessKey: '7fa22331ebe62bf4605dc9a42aaeexampleuniqueID',
  s3ForcePathStyle: true,
  signatureVersion: 'v4',
});

AWS SDK for Python (Boto 3)

次に、AWS SDK for Python (Boto 3)の構成例を示します。

import boto3
  
s3 = boto3.resource(
    's3',
    aws_access_key_id="gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
    aws_secret_access_key="7fa22331ebe62bf4605dc9a42aaeexampleuniqueID",
    region_identifier="us-phoenix-1", # Region name here that matches the endpoint
    endpoint_url="https://mynamespace.compat.objectstorage.us-phoenix-1.oraclecloud.com" # Include your namespace in URL
)
  
# Print out bucket names
for bucket in s3.buckets.all():
    print bucket.name