AWS CLI での高レベル (s3) コマンドの使用 - AWS Command Line Interface

AWS CLI での高レベル (s3) コマンドの使用

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

コマンドを実行する前に、デフォルトの認証情報を設定します。詳細については、「AWS CLI の設定」を参照してください。

バケットの管理

高レベル aws s3 コマンドは、バケットの作成、一覧表示、削除など、一般的なバケット操作をサポートしています。

バケットの作成

バケットを作成するには、s3 mb コマンドを使用します。バケット名はグローバルに一意でなければならず、DNS に準拠する必要があります。バケット名には、小文字の英文字、数字、ハイフン、およびピリオドを使用することができます。バケット名の先頭と末尾は文字または数値とし、ハイフンまたは別のピリオドの横にピリオドを使用することはできません。

$ aws s3 mb s3://bucket-name

バケットの一覧表示

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

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

$ aws s3 ls 2018-12-11 17:08:50 my-bucket 2018-12-14 14:55:44 my-bucket2

次のコマンドは、バケット内のすべてのオブジェクトとフォルダ (S3 で「プレフィックス」として参照) を一覧表示します。

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

前の出力は、プレフィックス path/ 下に MyFile1.txt という名前の 1 つのファイルがあることを示しています。

コマンドに含めることによって、出力を特定のプレフィックスに絞り込むことができます。次のコマンドを実行すると、bucket-name/path 内のオブジェクト (つまり、プレフィックス path/ でフィルタリングされた、bucket-name 内のオブジェクト) が一覧表示されます。

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

バケットを削除する

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

$ aws s3 rb s3://bucket-name

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

次の例は、バケット内のすべてのオブジェクトとサブフォルダを削除してから、バケットを削除します。

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

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

オブジェクトの管理

高レベルの aws s3 コマンドにより、Amazon S3 オブジェクトの管理が便利になります。オブジェクトコマンドには、s3 cps3 lss3 mvs3 rm、および s3 sync があります。

cplsmv、および rm の各コマンドは Unix の対応コマンドと同様に動作するため、ローカルディレクトリと Amazon S3 バケット間でシームレスな作業が可能になります。sync コマンドはバケットとディレクトリ、または 2 つのバケットの内容を同期します。

注記

Amazon S3 バケットへのオブジェクトのアップロードに関わるすべての高レベルコマンド (s3 cps3 mv、および 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

s3 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

通常、s3 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 オプションを使用して、同期オペレーション中にコピーするファイルまたはオブジェクトをフィルタリングするルールを指定できます。デフォルトでは、指定されたフォルダ内のすべての項目が同期に含まれます。そのため、--include は、--exclude オプションの例外を指定する必要がある場合にのみ必要です (つまり、--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 オプションを含む s3 sync オペレーション時に削除されるファイルまたはオブジェクトもフィルタリングします。この場合、パラメータ文字列で、ターゲットディレクトリまたはバケットに関連して、削除から除外するか、削除に含めるファイルを指定する必要があります。例を以下に示します。

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

s3 sync コマンドは --acl オプションも受け入れ、このオプションによって Amazon S3 にコピーされるファイルのアクセス許可を設定することができます。--acl オプションは、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 オプションを cpmvrm のいずれかとともにディレクトリまたはフォルダで使用する場合、コマンドはすべてのサブディレクトリを含むディレクトリツリーを対象にします。これらのコマンドでは、--exclude コマンドと同じように --include--acl、および sync オプションも使用できます。