Oracle Cloud Infrastructureドキュメント

Amazon S3互換性API

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

オブジェクト・ストレージ APIと「Amazon S3互換性API」の違い

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

以下は、2つのストレージ・テクノロジの違いを示しています:

  • コンパートメント

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

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

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

  • 暗号化

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

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

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

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

Amazon S3互換性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互換性APIのみを使用できます。
    リージョンを手動で設定できる場合は、任意のOracle Cloud Infrastructureリージョンに対してアプリケーションを使用できます。

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

これで、「Amazon S3互換性API」を使用してOracle Cloud Infrastructureオブジェクト・ストレージにアクセスできます。

「Amazon S3互換性API」サポート

「Amazon S3互換性API」サポートは、バケット・レベルとオブジェクトレベルで提供されます。

バケットAPI

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

オブジェクトAPI

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

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

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

タギングAPIs

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

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

ここでは、様々なクライアント・アプリケーションを構成して、オブジェクト・ストレージ Amazon S3互換性のあるエンドポイントと通信する例をいくつか示します。

Java用AWS SDK

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

// Get S3 credentials from the console and put them here
AWSCredentialsProvider credentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(
"ocid1.credential.oc1..anEXAMPLE",
"anEXAMPLE="));

// The name of your tenancy
String tenancy = "tenancy";

// 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",tenancy,region);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AmazonS3 client = AmazonS3Client.builder()
.standard()
.withCredentials(credentials)
.withEndpointConfiguration(endpointConfiguration)
.disableChunkedEncoding()
.enablePathStyleAccess()
.build();

JavascriptのAWS SDK

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

s3 = new AWS.S3({
  region: 'us-ashburn-1',
  endpoint: 'https://' + namespace + '.compat.objectstorage.us-ashburn-1.oraclecloud.com',
  accessKeyId: 'ocid1.credential.oc1..something',
  secretAccessKey: 'something=',
  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="ocid1.credential.oc1..something",    # Put your ocid for the secret key here
    aws_secret_access_key="something=",                     # Put your secret key here
    region_name="us-phoenix-1",                             # Set the region to match the endpoint
    endpoint_url="https://namespace.compat.objectstorage.us-phoenix-1.oraclecloud.com" # Endpoint url has namespace ahead of compat
)
  
# Print out bucket names
for bucket in s3.buckets.all():
    print bucket.name

AWSコマンドライン・インタフェース(CLI)

次に、「AWSコマンドライン・インタフェース(CLI)」の構成例を示します。

pip3 install awscli --upgrade --user
  
# Configure AWS Cli
aws configure --profile mynamespace
AWS Access Key ID [None]: ocid1.credential.oc1..something
AWS Secret Access Key [None]: secretkey=
Default region name [None]: us-phoenix-1
Default output format [None]:
# Install this plugin to override the url or you need to pass it on command line
pip3 install awscli-plugin-endpoint --upgrade --user
  
# Enable the plugin or it won't work
aws configure set plugins.endpoint_url awscli_plugin_endpoint
  
# Let the plugin set the endpoint URL
aws configure --profile mynamespace set s3.endpoint_url https://mynamespace.compat.objectstorage.us-phoenix-1.oraclecloud.com
  
# Test out the command!
aws s3 ls --profile mynamespace