オブジェクトのアップロード - Amazon Simple Storage Service

新しい Amazon S3 ユーザーガイドにようこそ! Amazon S3 ユーザーガイドは、使用中止された 3 つのガイド (Amazon S3 開発者ガイドAmazon S3 コンソールユーザーガイドAmazon S3 入門ガイド) の情報と手順をまとめたものです。

オブジェクトのアップロード

Amazon S3 にファイルをアップロードすると、S3 オブジェクトとして保存されます。オブジェクトは、オブジェクトを記述するファイルデータとメタデータから構成されます。バケット内のオブジェクトの数に制限はありません。Amazon S3 バケットにファイルをアップロードするには、バケットに対する書き込みアクセス許可が必要です。アクセス許可の詳細については、「Amazon S3 での Identity and Access Management」を参照してください。

ファイルタイプ (イメージ、バックアップ、データ、ムービーなど) を問わず、各種のファイルを S3 バケットにアップロードできます。Amazon S3 コンソールを使用すると、アップロードできるファイルの最大サイズが 160 GB になります。160 GB を超えるファイルをアップロードするには、AWS CLI、AWS SDK、または Amazon S3 REST API を使用します。

バージョニングが有効なバケットに既に存在するキー名の付いたオブジェクトをアップロードした場合、Amazon S3 は既存のオブジェクトを置き換える代わりにオブジェクトの別バージョンを作成します。バージョニングの詳細については、「S3 コンソールの使用」を参照してください。

アップロードするデータのサイズに応じて、Amazon S3 には以下のオプションが用意されています。

  • AWS SDK、REST API、または AWS CLI を使用して 1 回のオペレーションでオブジェクトをアップロードする — 1 回の PUT オペレーションでは、最大 5 GB の単一のオブジェクトをアップロードできます。

  • Amazon S3 コンソールを使用して 1 つのオブジェクトをアップロードする —Amazon S3 コンソールでは、最大 160 GB のオブジェクトをアップロードできます。

  • AWS SDK、REST API、または AWS CLI を使用してオブジェクトをいくつかに分けてアップロードする — マルチパートアップロード API を使用すると、最大 5 TB のサイズの単一の大容量オブジェクトをアップロードできます。

    マルチパートアップロード API は大容量オブジェクトのアップロードを効率よく行えるように設計されています。1 つのオブジェクトをいくつかに分けてアップロードできます。オブジェクトのパートは、単独で、任意の順序で、または並行してアップロードできます。マルチパートアップロードは 5 MB~5 TB のオブジェクトで使用できます。詳細については、「マルチパートアップロードを使用したオブジェクトのアップロードとコピー」を参照してください。

オブジェクトをアップロードするときには、オプションで、ディスクに保存する前にオブジェクトを暗号化し、ダウンロードするときに復号することを Amazon S3 にリクエストできます。詳細については、「暗号化を使用したデータの保護」を参照してください。

この手順では、コンソールを使用してオブジェクトおよびフォルダを S3 バケットにアップロードする方法について説明します。

オブジェクトをアップロードする場合、オブジェクトキー名はファイル名および任意のプレフィックスになります。Amazon S3 コンソールでは、フォルダを作成してオブジェクトを整理できます。Amazon S3 では、フォルダはオブジェクトキー名に表示されるプレフィックスとして表されます。Amazon S3 コンソールのフォルダに個々のオブジェクトをアップロードする場合、フォルダ名はオブジェクトキー名に含まれます。

たとえば、「sample1.jpg」という名前のオブジェクトを「backup」という名前のフォルダにアップロードすると、キー名は「backup/sample1.jpg」になります。ただし、オブジェクトはコンソールの sample1.jpg フォルダ内で backup として表示されます。有効なキー名の詳細については、「オブジェクトメタデータの使用」を参照してください。

注記

S3 コンソールでオブジェクトの名前を変更したり、ストレージクラス暗号化メタデータなどのプロパティを変更したりすると、新しいオブジェクトが作成され、古いオブジェクトが置き換えられます。S3 バージョニングが有効な場合は、オブジェクトの新しいバージョンが作成され、既存のオブジェクトは古いバージョンになります。また、プロパティを変更するロールは、新しいオブジェクト (オブジェクトのバージョン) の所有者になります。

フォルダをアップロードすると、Amazon S3 は、そのフォルダからすべてのファイルとサブフォルダをバケットにアップロードします。その後、アップロードしたファイルの名前とフォルダの名前を組み合わせたオブジェクトキー名が割り当てられます。たとえば、sample1.jpgsample2.jpg の 2 つのファイルを含む /images というフォルダをアップロードすると、Amazon S3 はファイルのアップロード後に、対応するキー名である images/sample1.jpgimages/sample2.jpg を割り当てます。キー名にはプレフィックスとしてフォルダ名が含まれています。Amazon S3 コンソールには、最後の「/」に続くキー名の一部のみが表示されます。たとえば、イメージフォルダ内では images/sample1.jpg オブジェクトと images/sample2.jpg オブジェクトが sample1.jpg および sample2.jpg として表示されます。

フォルダとファイルを S3 バケットにアップロードするには

  1. AWS マネジメントコンソールにサインインして Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [Buckets (バケット)] リストで、フォルダやファイルのアップロード先のバケットの名前を選択します。

  3. [Upload (アップロード)] を選択します。

  4. [Upload] (アップロード) ウィンドウで、次のいずれかの操作を行います。

    • ファイルとフォルダを [Upload] (アップロード) ウィンドウにドラッグアンドドロップします。

    • [Add file] (ファイルの追加) または [Add folder] (フォルダの追加) を選択し、アップロードするファイルまたはフォルダを選択して [Open] (開く) を選択します。

  5. バージョニングを有効にするには、[Destination] (送信先) で [Enable Bucket Versioning] (バケットバージョニングを有効化) を選択します。

  6. 追加のアップロードオプションを設定せずにリストされたファイルとフォルダをアップロードするには、ページの下部で [Upload] (アップロード) を選択します。

    Amazon S3 はオブジェクトとフォルダをアップロードします。アップロードが完了すると、[Upload: status] (アップロード: ステータス) ページに成功のメッセージが表示されます。

  7. アップロード前に追加のオブジェクトプロパティを設定する方法については、「追加のオブジェクトプロパティを設定するには」を参照してください。

追加のオブジェクトプロパティを設定するには

  1. 追加のオブジェクトプロパティを設定するには、[Additional upload options] (追加のアップロードオプション) を選択します。

  2. [Storage class] (ストレージクラス) で、アップロードするファイルのストレージクラスを選択します。

    ストレージクラスの詳細については、「Amazon S3 ストレージクラスを使用する」を参照してください。

  3. オブジェクトの暗号化設定を更新するには、[Server-side encryption settings] (サーバー側の暗号化設定) で、次の操作を行います。

    1. [Override default encryption bucket settings] (デフォルトの暗号化バケット設定を上書き) を選択します。

    2. Amazon S3 管理のキーを使用してアップロードされたファイルを暗号化するには、[Amazon S3 key (SSE-S3)] (Amazon S3 キー (SSE-S3)) を選択します。

      詳細については、「Amazon S3 が管理する暗号化キーによるサーバー側の暗号化 (SSE-S3) を使用したデータの保護」を参照してください。

    3. AWS Key Management Service (AWS KMS) を使用してアップロード済みファイルを暗号化するには、[AWS Key Management Service key (SSE-KMS)] を選択します。その後、AWS KMS キーのオプションを選択します。

      • AWS 管理のキー (aws/s3) - AWS 管理の CMK を選択します。

      • KMS マスターキーから選択する - バケットと同じリージョン内の CMK のリストから、カスタマー管理の CMK を選択します。

        カスタマーマネージドの AWS KMS CMK の作成の詳細については、AWS Key Management Service 開発者ガイドの「キーの作成」を参照してください。AWS KMS を使用したデータの保護の詳細については、「AWS Key Management Service (SSE-KMS) に保存された CMK によるサーバー側の暗号化を使ったデータの保護」を参照してください。

      • KMS マスターキー ARN の入力 - カスタマー管理の CMK の AWS KMS キー ARN を指定し、Amazon リソースネーム (ARN) を入力します。

        KMS マスターキー ARN を使用すると、AWS KMS CMK によって保護されているオブジェクトを使用する機能を外部アカウントに付与できます。これを行うには、[Enter KMS master key ARN] (KMS マスターキー ARN の入力) を選択し、外部アカウントの Amazon リソースネーム (ARN) を入力します。AWS KMS CMK によって保護されたオブジェクトの使用アクセス許可を持っている外部アカウントの管理者は、リソースレベルの IAM ポリシーを作成して、アクセスをさらに制限できます。

      注記

      バケットのオブジェクトを暗号化するには、バケットと同じ AWS リージョンで使用可能な CMK のみ使用できます。

  4. アクセス制御リストのアクセス権限を変更するには、[Access control list (ACL)] (アクセスコントロールリスト (ACL)) でアクセス権限を編集します。

    オブジェクトのアクセス許可については、「S3 コンソールを使用した、オブジェクトの ACL アクセス権限の設定」を参照してください。アップロードしているすべてのファイルに対して、一般ユーザー (世界中のすべてのユーザー) にオブジェクトへの読み取りアクセスを許可できます。パブリック読み取りアクセスの既定の設定を変更しないことをお勧めします。パブリック読み取りアクセスの付与が該当するのは、バケットがウェブサイトなどに使用されるなど、ユースケースの小さいサブセットです。オブジェクトをアップロードした後で、オブジェクトのアクセス許可をいつでも変更できます。

  5. アップロードするすべてのオブジェクトにタグを追加するには、[Add tag (タグの追加)] を選択します。[Key (キー)] フィールドにタグ名を入力します。タグの値を入力します。

    オブジェクトのタグ付けにより、ストレージを分類する方法が提供されます。各タグはキーと値のペアです。キーとタグ値は大文字と小文字が区別されます。オブジェクトごとに最大 10 個のタグを持つことができます。タグキーには最大 128 個の Unicode 文字、タグ値には最大 255 個の Unicode 文字を使用できます。オブジェクトタグの詳細については、「タグを使用してストレージを分類する」を参照してください。

  6. メタデータを追加するには、[Add metadata] (メタデータの追加) を選択します。

    1. [Type] (タイプ) で、[System defined] (システム定義) または [User defined] (ユーザー定義) を選択します。

      システム定義のメタデータの場合は、Content-TypeContent-Disposition などの一般的な HTTP ヘッダーを選択できます。システム定義のメタデータのリストと値を追加できるかどうかについては、「システムで定義されたオブジェクトメタデータ」を参照してください。プレフィックス x-amz-meta- で始まるメタデータはすべてユーザー定義のメタデータとして扱われます。ユーザー定義メタデータはオブジェクトと共に保存され、オブジェクトのダウンロード時に返されます。キーと値の両方が US-ASCII 標準に従っている必要があります。ユーザー定義メタデータのサイズは最大 2 KB です。システム定義メタデータとユーザー定義メタデータの詳細については、「オブジェクトメタデータの使用」をご参照ください。

    2. [Key] (キー) で、キーを選択します。

    3. キーの値を入力します。

  7. オブジェクトをアップロードするには、[Upload] (アップロード) を選択します。

    Amazon S3 はオブジェクトをアップロードします。アップロードが完了すると、[Upload: status] (アップロード: ステータス) ページに成功のメッセージが表示されます。

  8. [終了] を選択します。

AWS SDK を使用して、Amazon S3 にオブジェクトをアップロードできます。SDK にはデータを容易にアップロードできるラッパーライブラリが用意されています。ただし、アプリケーションで必要とされる場合は、REST API をアプリケーション内で直接使用することもできます。AWS コマンドラインインターフェイス (AWS CLI) を使用することも可能です。

Java

次の例では 2 つのオブジェクトを作成します。最初のオブジェクトにはデータとしてテキスト文字列があり、2 番目のオブジェクトはファイルです。この例では、AmazonS3Client.putObject() への呼び出しでバケット名、オブジェクトキー、およびテキストデータを直接指定して、最初のオブジェクトを作成します。例では、バケット名、オブジェクトキー、およびファイルパスを指定する PutObjectRequest を指定して 2 番目のオブジェクトを作成します。PutObjectRequest では、ContentType ヘッダーとタイトルメタデータも指定します。

作業サンプルを作成およびテストする方法については、「Amazon S3 Java コード例のテスト」を参照してください。

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import java.io.File; import java.io.IOException; public class UploadObject { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String stringObjKeyName = "*** String object key name ***"; String fileObjKeyName = "*** File object key name ***"; String fileName = "*** Path to file to upload ***"; try { //This code expects that you have AWS credentials set up per: // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .build(); // Upload a text string as a new object. s3Client.putObject(bucketName, stringObjKeyName, "Uploaded String Object"); // Upload a file as a new object with ContentType and title specified. PutObjectRequest request = new PutObjectRequest(bucketName, fileObjKeyName, new File(fileName)); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("plain/text"); metadata.addUserMetadata("title", "someTitle"); request.setMetadata(metadata); s3Client.putObject(request); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

次の C# コード例では、2 つの PutObjectRequest リクエストで 2 つのオブジェクトを作成します。

  • 最初の PutObjectRequest リクエストでは、サンプルオブジェクトデータとしてテキスト文字列を保存します。また、バケット名とオブジェクトキー名を指定します。

  • 2 番目の PutObjectRequest リクエストでは、ファイル名を指定してファイルをアップロードします。また、このリクエストは、ContentType ヘッダーとオプションのオブジェクトメタデータ (タイトル) を指定します。

作業サンプルを作成およびテストする方法については、「Amazon S3 .NET コード例の実行」を参照してください。

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class UploadObjectTest { private const string bucketName = "*** bucket name ***"; // For simplicity the example creates two objects from the same file. // You specify key names for these objects. private const string keyName1 = "*** key name for first object created ***"; private const string keyName2 = "*** key name for second object created ***"; private const string filePath = @"*** file path ***"; private static readonly RegionEndpoint bucketRegion = RegionEndpoint.EUWest1; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); WritingAnObjectAsync().Wait(); } static async Task WritingAnObjectAsync() { try { // 1. Put object-specify only key name for the new object. var putRequest1 = new PutObjectRequest { BucketName = bucketName, Key = keyName1, ContentBody = "sample text" }; PutObjectResponse response1 = await client.PutObjectAsync(putRequest1); // 2. Put the object-set ContentType and add metadata. var putRequest2 = new PutObjectRequest { BucketName = bucketName, Key = keyName2, FilePath = filePath, ContentType = "text/plain" }; putRequest2.Metadata.Add("x-amz-meta-title", "someTitle"); PutObjectResponse response2 = await client.PutObjectAsync(putRequest2); } catch (AmazonS3Exception e) { Console.WriteLine( "Error encountered ***. Message:'{0}' when writing an object" , e.Message); } catch (Exception e) { Console.WriteLine( "Unknown encountered on server. Message:'{0}' when writing an object" , e.Message); } } } }
PHP

このトピックでは、AWS SDK for PHP のクラスを使用して、5 GB までのサイズのオブジェクトをアップロードする手順を示します。ファイルのサイズが大きい場合には、マルチパートアップロード API を使用する必要があります。詳細については、「マルチパートアップロードを使用したオブジェクトのアップロードとコピー」を参照してください。

このトピックでは、すでに AWS SDK for PHP の使用と PHP の実行例 の説明に従っていて、AWS SDK for PHP が正しくインストールされていることを前提としています。

例 - データをアップロードして Amazon S3 バケットにオブジェクトを作成する

以下の PHP コード例では、putObject() メソッドを使用してデータをアップロードすることで、指定されたバケットにオブジェクトを作成しています。PHP 例の実行については、このガイド内の「PHP サンプルの実行」を参照してください。

require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); try { // Upload data. $result = $s3->putObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'Body' => 'Hello, world!', 'ACL' => 'public-read' ]); // Print the URL to the object. echo $result['ObjectURL'] . PHP_EOL; } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }
Ruby

AWS SDK for Ruby - バージョン 3 には、Amazon S3 にオブジェクトをアップロードする方法が 2 つあります。1 つ目の方法では、ディスクから任意のサイズのファイルを簡単にアップロードできる、マネージド型ファイルアップローダーを使用します。マネージド型ファイルアップローダーによる方法を使用するには、次の操作を行います。

  1. Aws::S3::Resource クラスのインスタンスを作成します。

  2. バケット名とキーで、対象オブジェクトを参照します。オブジェクトはバケット内に保持され、各オブジェクトを特定するための一意のキーを持っています。

  3. オブジェクトで #upload_file を呼び出します。

require 'aws-sdk-s3' # Uploads an object to a bucket in Amazon Simple Storage Service (Amazon S3). # # Prerequisites: # # - An S3 bucket. # - An object to upload to the bucket. # # @param s3_client [Aws::S3::Resource] An initialized S3 resource. # @param bucket_name [String] The name of the bucket. # @param object_key [String] The name of the object. # @param file_path [String] The path and file name of the object to upload. # @return [Boolean] true if the object was uploaded; otherwise, false. # @example # exit 1 unless object_uploaded?( # Aws::S3::Resource.new(region: 'us-east-1'), # 'doc-example-bucket', # 'my-file.txt', # './my-file.txt' # ) def object_uploaded?(s3_resource, bucket_name, object_key, file_path) object = s3_resource.bucket(bucket_name).object(object_key) object.upload_file(file_path) return true rescue StandardError => e puts "Error uploading object: #{e.message}" return false end

AWS SDK for Ruby - バージョン 3 でオブジェクトをアップロードする 2 番目の方法は、Aws::S3::Object#put メソッドを使用します。この方法は、オブジェクトが文字列であるか、ディスク上のファイルではない I/O オブジェクトである場合に役立ちます。この方法を使用するには、次の操作を行います。

  1. Aws::S3::Resource クラスのインスタンスを作成します。

  2. バケット名とキーで、対象オブジェクトを参照します。

  3. #put を呼び出し、文字列または I/O オブジェクトを渡します。

require 'aws-sdk-s3' # Uploads an object to a bucket in Amazon Simple Storage Service (Amazon S3). # # Prerequisites: # # - An S3 bucket. # - An object to upload to the bucket. # # @param s3_client [Aws::S3::Resource] An initialized S3 resource. # @param bucket_name [String] The name of the bucket. # @param object_key [String] The name of the object. # @param file_path [String] The path and file name of the object to upload. # @return [Boolean] true if the object was uploaded; otherwise, false. # @example # exit 1 unless object_uploaded?( # Aws::S3::Resource.new(region: 'us-east-1'), # 'doc-example-bucket', # 'my-file.txt', # './my-file.txt' # ) def object_uploaded?(s3_resource, bucket_name, object_key, file_path) object = s3_resource.bucket(bucket_name).object(object_key) File.open(file_path, 'rb') do |file| object.put(body: file) end return true rescue StandardError => e puts "Error uploading object: #{e.message}" return false end

REST リクエストを送信してオブジェクトをアップロードできます。PUT リクエストを送信して 1 回のオペレーションでデータをアップロードできます。詳細については、「PUTObject」を参照してください。

アプリケーションで必要な場合は、AWS コマンドラインインターフェイス (AWS CLI) リクエストを送信してオブジェクトをアップロードできます。PUT リクエストを送信して 1 回のオペレーションでデータをアップロードできます。詳細については、AWS CLI コマンドリファレンスの「PUT Object」を参照してください。