AWS Command Line Interface
ユーザーガイド

AWS Command Line Interface での高レベルの S3 コマンドの使用

このセクションでは、高レベルの aws s3 コマンドを使用して、Amazon S3 のバケットとオブジェクトを管理する方法について説明します。

バケットの管理

高レベルの aws s3 コマンドは、バケットの作成、削除、一覧表示など、よく使用されるバケットオペレーションをサポートします。

バケットの作成

新しいバケットを作成するには、aws s3 mb コマンドを使用します。バケット名は一意で、DNS に準拠する必要があります。バケット名には、小文字の英文字、数字、ハイフン、およびピリオドを含めることができます。バケット名の最初と最後は文字または数値とし、ハイフンまたは別のピリオドの横にピリオドを含めることはできません。

$ aws s3 mb s3://bucket-name

バケットの削除

バケットを削除するには、aws s3 rb コマンドを使用します。

$ aws s3 rb s3://bucket-name

デフォルトでは、オペレーションが成功するにはバケットが空である必要があります。空ではないバケットを削除するには、--force オプションを含める必要があります。

$ aws s3 rb s3://bucket-name --force

これにより、バケット内のすべてのオブジェクトとサブフォルダが削除されてから、バケットが削除されます。

注記

以前に削除されたが保持されているオブジェクトを含む、バージョニングされたバケットを使用している場合、このコマンドでバケットを削除することはできません

バケットの一覧表示

すべてのバケットまたはそのコンテンツを一覧表示するには、aws s3 ls コマンドを使用します。一般的な使用例をいくつか次に示します。

次のコマンドを実行すると、すべてのバケットが一覧表示されます。

$ aws s3 ls 2013-07-11 17:08:50 my-bucket 2013-07-24 14:55:44 my-bucket2

次のコマンドを実行すると、バケット内のすべてのオブジェクトとフォルダ (プレフィックス) が一覧表示されます。

$ aws s3 ls s3://bucket-name PRE path/ 2013-09-04 19:05:48 3 MyFile1.txt

次のコマンドを実行すると、bucket-name/path 内のオブジェクト (プレフィックス path/ でフィルタリングされた、bucket-name 内のオブジェクト) が一覧表示されます。

$ aws s3 ls s3://bucket-name/path/ 2013-09-06 18:59:32 3 MyFile2.txt

オブジェクトの管理

高レベルの aws s3 コマンドにより、Amazon S3 オブジェクトの管理も便利になります。オブジェクトのコマンドには、aws s3 cpaws s3 lsaws s3 mvaws s3 rm、および sync があります。cplsmv、および rm の各コマンドは Unix の対応コマンドと同様に動作し、ローカルディレクトリと Amazon S3 バケット間でシームレスに作業を行うことができます。sync コマンドはバケットとディレクトリ、または 2 つのバケットの内容を同期します。

注記

Amazon S3 バケットにオブジェクトをアップロードするすべての高レベルのコマンド (aws s3 cpaws s3 mv、および aws s3 sync) は、オブジェクトが大きい場合に自動的にマルチパートアップロードを実行します。

これらのコマンドを使用する場合、失敗したアップロードを再開することはできません。マルチパートアップロードがタイムアウトで失敗するか、Ctrl+C を押して手動でキャンセルされた場合、AWS CLI は作成されたファイルをクリーンアップし、アップロードを中止します。この処理には数分かかることもあります。

プロセスが kill コマンドまたはシステム障害によって中断された場合、進行中のマルチパートアップロードは Amazon S3 に残り、AWS マネジメントコンソールで、または s3api abort-multipart-upload コマンドを使用して手動でクリーンアップする必要があります。

cpmv、および sync コマンドには、指定されたユーザーまたはグループにオブジェクトのアクセス権限を付与するために使用できる --grants オプションが用意されています。次の構文を使用して、アクセス権限のリストに --grants オプションを設定します。

--grants Permission=Grantee_Type=Grantee_ID [Permission=Grantee_Type=Grantee_ID ...]

各値には以下の要素が含まれます。

  • Permission – 付与されたアクセス権限を指定し、readreadaclwriteacl、または full に設定できます。

  • Grantee_Type – 被付与者を識別する方法を指定し、uriemailaddress、または id に設定できます。

  • Grantee_IDGrantee_Type に基づいて被付与者を指定します。

    • uri – グループの URI。詳細については、「被付与者とは」を参照してください

    • emailaddress – アカウントの E メールアドレス。

    • id – アカウントの正規 ID。

Amazon S3 のアクセスコントロールの詳細については、「アクセスコントロール」を参照してください。

次の例では、バケットにオブジェクトをコピーします。これは、オブジェクトの read アクセス権限を全員に付与し、full アクセス権限 (readreadacl、および writeacl) を、user@example.com に関連付けられたアカウントに付与します。

$ aws s3 cp file.txt s3://my-bucket/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=emailaddress=user@example.com

Amazon S3 にアップロードするオブジェクトに、デフォルト以外のストレージクラス (REDUCED_REDUNDANCY または STANDARD_IA) を指定するには、--storage-class オプションを使用します。

$ aws s3 cp file.txt s3://my-bucket/ --storage-class REDUCED_REDUNDANCY

sync コマンドの形式は次のとおりです。使用できるソースとターゲットの組み合わせは次のとおりです。

  • ローカルファイルシステムから Amazon S3 へ

  • Amazon S3 からローカルファイルシステムへ

  • Amazon S3 から Amazon S3 へ

$ aws s3 sync <source> <target> [--options]

次の例では、my-bucketpath という名前の Amazon S3 フォルダの内容を、現在の作業ディレクトリと同期します。s3 sync は、同期先で同じ名前を持つファイルとはサイズまたは変更時間が異なるファイルを更新します。出力には、同期中に実行された特定のオペレーションが表示されます。オペレーションでは、サブディレクトリ MySubdirectory とその内容が、s3://my-bucket/path/MySubdirectory と再帰的に同期されます。

$ aws s3 sync . s3://my-bucket/path upload: MySubdirectory\MyFile3.txt to s3://my-bucket/path/MySubdirectory/MyFile3.txt upload: MyFile2.txt to s3://my-bucket/path/MyFile2.txt upload: MyFile1.txt to s3://my-bucket/path/MyFile1.txt

通常、sync は見つからないか古いファイルまたはオブジェクトのみを、ソースとターゲット間でコピーします。ただし、--delete オプションを指定して、ソースに存在しないファイルまたはオブジェクトをターゲットから削除することができます。

前の例を拡張する次の例で、この方法を示します。

// Delete local file $ rm ./MyFile1.txt // Attempt sync without --delete option - nothing happens $ aws s3 sync . s3://my-bucket/path // Sync with deletion - object is deleted from bucket $ aws s3 sync . s3://my-bucket/path --delete delete: s3://my-bucket/path/MyFile1.txt // Delete object from bucket $ aws s3 rm s3://my-bucket/path/MySubdirectory/MyFile3.txt delete: s3://my-bucket/path/MySubdirectory/MyFile3.txt // Sync with deletion - local file is deleted $ aws s3 sync s3://my-bucket/path . --delete delete: MySubdirectory\MyFile3.txt // Sync with Infrequent Access storage class $ aws s3 sync . s3://my-bucket/path --storage-class STANDARD_IA

--exclude および --include オプションでは、同期オペレーション中にコピーするファイルまたはオブジェクトをフィルタリングするルールを指定できます。デフォルトでは、指定したディレクトリ内のすべての項目が同期に含まれます。したがって、--exclude オプションの例外を指定するときは、--include のみが必要です (たとえば、--include は実質的に「除外しない」を意味します)。このオプションは、次の例に示すように、指定された順序で適用されます。

Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt ''' $ aws s3 sync . s3://my-bucket/path --exclude '*.txt' upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf ''' $ aws s3 sync . s3://my-bucket/path --exclude '*.txt' --include 'MyFile*.txt' upload: MyFile1.txt to s3://my-bucket/path/MyFile1.txt upload: MyFile88.txt to s3://my-bucket/path/MyFile88.txt upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf ''' $ aws s3 sync . s3://my-bucket/path --exclude '*.txt' --include 'MyFile*.txt' --exclude 'MyFile?.txt' upload: MyFile2.rtf to s3://my-bucket/path/MyFile2.rtf upload: MyFile88.txt to s3://my-bucket/path/MyFile88.txt

--exclude および --include オプションでは、--delete オプションで同期オペレーション中に削除するファイルまたはオブジェクトをフィルタリングすることもできます。この場合、パラメーター文字列で、ターゲットディレクトリまたはバケットに関連して削除から除外するか削除に含めるファイルを指定する必要があります。例を以下に示します。

Assume local directory and s3://my-bucket/path currently in sync and each contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt ''' // Delete local .txt files $ rm *.txt // Sync with delete, excluding files that match a pattern. MyFile88.txt is deleted, while remote MyFile1.txt is not. $ aws s3 sync . s3://my-bucket/path --delete --exclude 'my-bucket/path/MyFile?.txt' delete: s3://my-bucket/path/MyFile88.txt ''' // Delete MyFile2.rtf $ aws s3 rm s3://my-bucket/path/MyFile2.rtf // Sync with delete, excluding MyFile2.rtf - local file is NOT deleted $ aws s3 sync s3://my-bucket/path . --delete --exclude './MyFile2.rtf' download: s3://my-bucket/path/MyFile1.txt to MyFile1.txt ''' // Sync with delete, local copy of MyFile2.rtf is deleted $ aws s3 sync s3://my-bucket/path . --delete delete: MyFile2.rtf

sync コマンドでは、--acl オプションも使用できます。これにより、Amazon S3 にコピーされたファイルにアクセス権限を設定できます。このオプションでは、privatepublic-read、および public-read-write の値を使用できます。

$ aws s3 sync . s3://my-bucket/path --acl public-read

前述したように、s3 コマンドセットには cpmvls、および rm が含まれ、これらは Unix の対応コマンドと同じように動作します。次に例をいくつか示します。

// Copy MyFile.txt in current directory to s3://my-bucket/path $ aws s3 cp MyFile.txt s3://my-bucket/path/ // Move all .jpg files in s3://my-bucket/path to ./MyDirectory $ aws s3 mv s3://my-bucket/path ./MyDirectory --exclude '*' --include '*.jpg' --recursive // List the contents of my-bucket $ aws s3 ls s3://my-bucket // List the contents of path in my-bucket $ aws s3 ls s3://my-bucket/path/ // Delete s3://my-bucket/path/MyFile.txt $ aws s3 rm s3://my-bucket/path/MyFile.txt // Delete s3://my-bucket/path and all of its contents $ aws s3 rm s3://my-bucket/path --recursive

--recursive オプションを cpmv、または rm とともにディレクトリ/フォルダで使用する場合、コマンドはすべてのサブディレクトリを含むディレクトリツリーを対象にします。これらのコマンドでは、sync コマンドと同じように --exclude--include、および --acl オプションも使用できます。