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

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

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

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

バージョニングが有効なバケットに既に存在するキー名の付いたオブジェクトをアップロードした場合、Amazon 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 マネージドキーによるサーバー側の暗号化 (SSE-S3) を使用して自動的に暗号化されます。ダウンロードすると、オブジェクトは復号化されます。詳細については、Amazon S3 バケット向けのサーバー側のデフォルトの暗号化動作の設定および暗号化によるデータの保護を参照してください。

オブジェクトをアップロードするときに、別の種類のデフォルト暗号化を使用する場合は、S3 PUT リクエストで AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を指定するか、SSE-KMS を使用してデータを暗号化するように送信先バケットのデフォルトの暗号化設定を設定することもできます。SSE-KMS に関する詳細は、「AWS KMS (SSE−KMS) によるサーバー側の暗号化の指定」を参照してください。別のアカウントが所有している KMS キーを使用する場合は、そのキーを使用するアクセス許可が必要です。KMS キーのクロスアカウント権限の詳細については、「AWS Key Management Service デベロッパーガイド」の「他のアカウントで使用できる KMS キーを作成する」を参照してください。

Amazon S3 でアクセス拒否 (403 Forbidden) エラーが発生したとき、一般的な原因の詳細については「Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング 」を参照してください。

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

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

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

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

注記

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

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

フォルダとファイルを S3 バケットにアップロードするには
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 左側のナビゲーションペインで、[バケット] を選択します。

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

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

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

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

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

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

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

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

追加のオブジェクトプロパティを設定するには
  1. アクセスコントロールリストの許可を変更するには、[Permissions] (許可) を選択します。

  2. [Access control list (ACL)] (アクセスコントロールリスト (ACL) で、許可を編集します。

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

  3. その他の追加プロパティを設定するには、[Properties] (プロパティ) を選択します。

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

    ストレージクラスの詳細については、Amazon S3 ストレージクラスの理解と管理 を参照してください。

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

    1. [Specify an encryption key] (暗号化キーを指定する) を選択します。

    2. [暗号化設定] で、[デフォルトの暗号化にバケット設定を使用する] または [デフォルトの暗号化にバケット設定を上書きする] を選択します。

    3. [デフォルトの暗号化にバケット設定を上書きする] を選択した場合は、次の暗号化設定を設定する必要があります。

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

        詳細については、「Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)」を参照してください。

      • AWS Key Management Service (AWS KMS) に保存されているキーを使用してアップロード済みファイルを暗号化するには、AWS Key Management Service キー (SSE−KMS) を選択します。次に、AWS KMS キーについて、以下のいずれかのオプションを選択します。

        • 使用可能な KMS キーのリストから選択するには、[AWS KMS keys から選択する] を選択し、使用可能なキーのリストから自分の KMS キーを選択します。

          AWS マネージドキー (aws/s3) とカスタマーマネージドキーの両方がこのリストに表示されます。カスタマーマネージドキーの詳細については、AWS Key Management Serviceデベロッパーガイドの「カスタマーキーと AWS キー」を参照してください。

        • KMS キー ARN を入力するには、[AWS KMS key ARN を入力] を選択し、表示されるフィールドに KMS キー ARN を入力します。

        • AWS KMS コンソールで新しいカスタマーマネージドキーを作成するには、[KMS キーを作成] を選択します。

          AWS KMS key の作成の詳細については、「AWS Key Management Service デベロッパーガイド」の「キーの作成」を参照してください。

        重要

        バケットと同じ AWS リージョン で使用可能な KMS キーのみを使用できます。Amazon S3 コンソールには、バケットと同じリージョンで最初の 100 個の KMS キーしか表示されません。リストに存在しない KMS キーを使用するには、KMS キー ARN を入力する必要があります。別のアカウントが所有している KMS キーを使用する場合は、まずそのキーを使用するアクセス許可が必要であり、次に KMS キー ARN を入力する必要があります。

        Amazon S3 では、対称暗号化 KMS キーのみがサポートされ、非対称暗号化 KMS キーはサポートされません。詳細については、AWS Key Management Service デベロッパーガイドの「Identifying symmetric and asymmetric KMS keys」(対称および非対称 KMS キーの識別) を参照してください。

  6. 追加のチェックサムを使用するには、[On] (オン) を選択します。次に、[Checksum function] (チェックサム関数) で、使用する関数を選択します。Amazon S3 は、オブジェクト全体を受け取った後、チェックサム値を計算して保存します。[Precalculated value] (事前計算された値) ボックスを使用して、事前計算された値を指定できます。その場合、Amazon S3 は、指定した値と計算した値を比較します。2 つの値が一致しない場合、Amazon S3 はエラーを生成します。

    追加のチェックサムを使用すると、データの検証に使用するチェックサムアルゴリズムを指定できます。追加のチェックサムの詳細については、「オブジェクトの整合性をチェックする」を参照してください。

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

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

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

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

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

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

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

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

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

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

単一のオペレーションで、最大 5 GB のオブジェクトをアップロードする PUT リクエストを送信できます。詳細については、PutObjectAWS CLI コマンドリファレンスでの例を参照してください。

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

AWS SDK を使用して、Amazon S3 にオブジェクトをアップロードできます。SDK にはデータを容易にアップロードできるラッパーライブラリが用意されています。詳細については、サポートされている SDK のリスト を参照してください。

次に、いくつかの SDK を選択した例を数例挙げます。

.NET

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

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

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

コード例を設定および実行する方法の詳細については、「AWS SDK for .NET デベロッパーガイド」の「AWS SDK for .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); } } } }
Java

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

作業サンプルの作成およびテストの手順については、「AWS SDK for 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(); } } }
JavaScript

次の例では、特定のリージョンの Amazon S3 バケットに既存のファイルをアップロードします。

import { readFile } from "node:fs/promises"; import { PutObjectCommand, S3Client, S3ServiceException, } from "@aws-sdk/client-s3"; /** * Upload a file to an S3 bucket. * @param {{ bucketName: string, key: string, filePath: string }} */ export const main = async ({ bucketName, key, filePath }) => { const client = new S3Client({}); const command = new PutObjectCommand({ Bucket: bucketName, Key: key, Body: await readFile(filePath), }); try { const response = await client.send(command); console.log(response); } catch (caught) { if ( caught instanceof S3ServiceException && caught.name === "EntityTooLarge" ) { console.error( `Error from S3 while uploading object to ${bucketName}. \ The object was too large. To upload objects larger than 5GB, use the S3 console (160GB max) \ or the multipart upload API (5TB max).`, ); } else if (caught instanceof S3ServiceException) { console.error( `Error from S3 while uploading object to ${bucketName}. ${caught.name}: ${caught.message}`, ); } else { throw caught; } } };
PHP

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

AWS SDK for Ruby API の詳細については、AWS SDK for Ruby - バージョン 2 を参照してください。

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

以下の PHP コード例では、putObject() メソッドを使用してデータをアップロードすることで、指定されたバケットにオブジェクトを作成しています。

require 'vendor/autoload.php'; use Aws\S3\Exception\S3Exception; use Aws\S3\S3Client; $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' # Wraps Amazon S3 object actions. class ObjectUploadFileWrapper attr_reader :object # @param object [Aws::S3::Object] An existing Amazon S3 object. def initialize(object) @object = object end # Uploads a file to an Amazon S3 object by using a managed uploader. # # @param file_path [String] The path to the file to upload. # @return [Boolean] True when the file is uploaded; otherwise false. def upload_file(file_path) @object.upload_file(file_path) true rescue Aws::Errors::ServiceError => e puts "Couldn't upload file #{file_path} to #{@object.key}. Here's why: #{e.message}" false end end # Example usage: def run_demo bucket_name = "amzn-s3-demo-bucket" object_key = "my-uploaded-file" file_path = "object_upload_file.rb" wrapper = ObjectUploadFileWrapper.new(Aws::S3::Object.new(bucket_name, object_key)) return unless wrapper.upload_file(file_path) puts "File #{file_path} successfully uploaded to #{bucket_name}:#{object_key}." end run_demo if $PROGRAM_NAME == __FILE__

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

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

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

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

require 'aws-sdk-s3' # Wraps Amazon S3 object actions. class ObjectPutWrapper attr_reader :object # @param object [Aws::S3::Object] An existing Amazon S3 object. def initialize(object) @object = object end def put_object(source_file_path) File.open(source_file_path, 'rb') do |file| @object.put(body: file) end true rescue Aws::Errors::ServiceError => e puts "Couldn't put #{source_file_path} to #{object.key}. Here's why: #{e.message}" false end end # Example usage: def run_demo bucket_name = "amzn-s3-demo-bucket" object_key = "my-object-key" file_path = "my-local-file.txt" wrapper = ObjectPutWrapper.new(Aws::S3::Object.new(bucket_name, object_key)) success = wrapper.put_object(file_path) return unless success puts "Put file #{file_path} into #{object_key} in #{bucket_name}." end run_demo if $PROGRAM_NAME == __FILE__

同じキー名を持つオブジェクトのアップロードを禁止する

アップロード時の条件付き書き込みオペレーションを使用して、バケット内にオブジェクトが存在するかどうかを確認してからオブジェクトを作成できるようになりました。これにより、既存のデータの上書きを阻止できます。条件付き書き込みでは、アップロードする際にバケット内に同じキー名を持つ既存のオブジェクトが存在しないことを検証します。

条件付き書き込みは、PutObject リクエストまたは CompleteMultipartUpload リクエストに使用できます。

条件付きリクエストの詳細については、「条件付きリクエストを使用して S3 オペレーションに前提条件を追加する」を参照してください。