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

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

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

高レベル aws s3 コマンドを使用すると、Amazon S3 オブジェクトの管理が容易になります。これらのコマンドにより、Amazon S3 のコンテンツの管理をそれ自体の内部およびローカルディレクトリ内で行うことができます。

注記

aws s3 コマンドを使用して大きなオブジェクトを Amazon S3 バケットにアップロードすると、AWS CLI がマルチパートアップロードを自動的に実行します。これらの aws s3 コマンドを使用した場合、失敗したアップロードを再開することはできません。

マルチパートアップロードがタイムアウトして失敗した場合、または AWS CLI で手動でキャンセルした場合、AWS CLI はアップロードを停止し、作成されたすべてのファイルをクリーンアップします。この処理には数分かかることもあります。

マルチパートアップロードまたはクリーンアップのプロセスが kill コマンドやシステム障害によってキャンセルされた場合、作成されたファイルは Amazon S3 バケットに残ります。マルチパートアップロードをクリーンアップするには、s3api abort-multipart-upload コマンドを使用します。

詳細については、Amazon Simple Storage Service 開発者ガイドの「マルチパートアップロードの概要」を参照してください。

前提条件

s3 コマンドを実行するには、次のことが必要です。

  • AWS CLI をインストールして設定します。詳細については、「AWS CLI のインストール」および「設定の基本」を参照してください。

  • 次の Amazon S3 用語を理解します。

    • バケット – 最上位の Amazon S3 フォルダ。

    • プレフィックス – バケット内の Amazon S3 フォルダ。

    • オブジェクト – Amazon S3 バケットでホストされている任意の項目。

バケットの作成

s3 mb コマンドを使用して、バケットを作成します。バケット名は、グローバルに一意 (Amazon S3 全体で一意) で、DNS に準拠している必要があります。

バケット名には、小文字の英文字、数字、ハイフン、およびピリオドを使用することができます。バケット名の先頭と末尾は文字または数値とし、ハイフンまたは別のピリオドの横にピリオドを使用することはできません。

構文

$ aws s3 mb <target> [--options]

次の例では、s3://bucket-name バケットを作成します。

$ aws s3 mb s3://bucket-name

バケットとオブジェクトの一覧表示

バケット、フォルダ、オブジェクトのいずれかを一覧表示するには、s3 ls コマンドを使用します。ターゲットまたはオプションを指定せずにコマンドを使用すると、すべてのバケットが一覧表示されます。

構文

$ aws s3 ls <target> [--options]

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。使用可能なオプションの詳細なリストについては、AWS CLI Command Referenceの「s3 ls」を参照してください。

次の例では、すべての Amazon S3 バケットを一覧表示します。

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

次のコマンドでは、バケット内のすべてのオブジェクトとプレフィックスを一覧表示します。この出力例では、プレフィックス example/ 内に MyFile1.txt という名前のファイル が 1 つあります。

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

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

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

バケットの削除

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

構文

$ aws s3 rb <target> [--options]

次の例では、s3://bucket-name バケットを削除します。

$ aws s3 rb s3://bucket-name

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

次の例では、バケット内のすべてのオブジェクトとプレフィックスを削除し、さらにバケット自体を削除します。

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

オブジェクトの削除

バケット内またはローカルディレクトリ内のオブジェクトを削除するには、s3 rm コマンドを使用します。

構文

$ aws s3 rm <target> [--options]

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの詳細な一覧については、AWS CLI Command Referenceの「s3 rm」を参照してください。

次の例では、s3://bucket-name/example からすべてのオブジェクトを削除します。

$ aws s3 rm s3://bucket-name/example

オブジェクトの移動

バケットまたはローカルディレクトリからオブジェクトを移動するには、s3 mv コマンドを使用します。

構文

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

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。使用可能なオプションの詳細なリストについては、AWS CLI Command Referenceの「s3 mv」を参照してください。

次の例では、すべてのオブジェクトを s3://bucket-name/example から s3://my-bucket/ に移動します。

$ aws s3 mv s3://bucket-name/example s3://my-bucket/

次の例では、s3 cp コマンドを使用して、現在の作業ディレクトリから Amazon S3 バケットにローカルファイルを移動します。

$ aws s3 mv filename.txt s3://bucket-name

次の例では、Amazon S3 バケットから現在の作業ディレクトリにファイルを移動します (./ で現在の作業ディレクトリを指定します)。

$ aws s3 mv s3://bucket-name/filename.txt ./

オブジェクトのコピー

バケットまたはローカルディレクトリからオブジェクトをコピーするには、s3 cp コマンドを使用します。

構文

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

標準入力 (stdin) または標準出力 (stdout) へのファイルストリーミングには dash パラメータを使用できます。

警告

PowerShellを使用している場合、シェルによって CRLF のエンコーディングが変更されたり、パイプされた入力/出力またはリダイレクトされた出力に CRLF が追加されたりすることがあります。

s3 cp コマンドでは、次の構文を使用して、stdin から指定先のバケットにファイルストリームをアップロードします。

構文

$ aws s3 cp - <target> [--options]

s3 cp コマンドでは、次の構文を使用して、Amazon S3 ファイルストリームを stdout にダウンロードします。

構文

$ aws s3 cp <target> [--options] -

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。アクションの詳細なリストについては、AWS CLI Command Referenceの「s3 cp」を参照してください。

次の例では、すべてのオブジェクトを s3://bucket-name/example から s3://my-bucket/ にコピーします。

$ aws s3 cp s3://bucket-name/example s3://my-bucket/

次の例では、s3 cp コマンドを使用して、現在の作業ディレクトリから Amazon S3 バケットにローカルファイルをコピーします。

$ aws s3 cp filename.txt s3://bucket-name

次の例では、Amazon S3 バケットから現在の作業ディレクトリにファイルをコピーします (./ で現在の作業ディレクトリを指定します)。

$ aws s3 cp s3://bucket-name/filename.txt ./

次の例では、cat テキストエディタを使用して、テキスト「hello world」を s3://bucket-name/filename.txt ファイルにストリーミングします。

$ cat "hello world" | aws s3 cp - s3://bucket-name/filename.txt

次の例では、s3://bucket-name/filename.txt ファイルを stdout にストリーミングし、その内容をコンソールに出力します。

$ aws s3 cp s3://bucket-name/filename.txt - hello world

次の例では、s3://bucket-name/pre の内容を stdout にストリーミングし、bzip2 コマンドを使用してファイルを圧縮します。この圧縮したファイルを key.bz2 という名前で s3://bucket-name にアップロードします。

$ aws s3 cp s3://bucket-name/pre - | bzip2 --best | aws s3 cp - s3://bucket-name/key.bz2

オブジェクトの同期

s3 sync コマンドはバケットとディレクトリの内容を同期します。または 2 つのバケットの内容を同期します。通常、s3 sync は欠落しているか古くなったファイルやオブジェクトを、ソースとターゲットの間でコピーします。ただし、--delete オプションを指定して、ソースに存在しないファイルまたはオブジェクトをターゲットから削除することもできます。

構文

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

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの詳細な一覧については、AWS CLI Command Referenceの「s3 sync」を参照してください。

次の例では、バケット (my-bucket) 内の Amazon S3 プレフィックス (path) の内容を現在の作業ディレクトリと同期します。

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

次の例 (前の例の拡張) では、--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

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

Assume local directory and s3://my-bucket/path currently in sync and each contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.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 ''' // 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 コマンドでよく使用されるオプション

このトピックで説明するコマンドでは、次のオプションがよく使用されます。コマンドで使用できるオプションの詳細なリストについては、AWS CLI Command Referenceで該当するコマンドを参照してください。

acl

s3 syncs3 cp では、--acl オプションを使用できます。これにより、Amazon S3 にコピーされたファイルへのアクセス許可を設定できます。--acl オプションは、privatepublic-read、および public-read-write の値を受け入れます。詳細については、Amazon Simple Storage Service 開発者ガイドの「既定の ACL」を参照してください。

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

s3 cps3 mvs3 syncs3 rm のいずれかのコマンドを使用する場合、--exclude オプションまたは --include オプションを使用して結果をフィルタリングできます。--exclude オプションは、コマンドからオブジェクトのみを除外するようにルールを設定します。各オプションは、指定した順に適用されます。これを次の例で示します。

Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt // Exclude all .txt files, resulting in only MyFile2.rtf being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" // Exclude all .txt files but include all files with the "MyFile*.txt" format, resulting in, MyFile1.txt, MyFile2.rtf, MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" // Exclude all .txt files, but include all files with the "MyFile*.txt" format, but exclude all files with the "MyFile?.txt" format resulting in, MyFile2.rtf and MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" --exclude "MyFile?.txt"
include

s3 cps3 mvs3 syncs3 rm のいずれかのコマンドを使用する場合、--exclude オプションまたは --include オプションを使用して結果をフィルタリングできます。--include オプションは、指定したオブジェクトのみをコマンドに含めるようにルールを設定します。各オプションは、指定した順に適用されます。これを次の例で示します。

Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt // Exclude all .txt files, resulting in MyFile1.txt and MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --include "*.txt" // Exclude all .txt files but include all files with the "MyFile*.txt" format, resulting in, MyFile1.txt, MyFile2.rtf, MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" // Exclude all .txt files, but include all files with the "MyFile*.txt" format, but exclude all files with the "MyFile?.txt" format resulting in, MyFile2.rtf and MyFile88.txt being copied $ aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" --exclude "MyFile?.txt"
grant

s3 cps3 mvs3 sync の各コマンドには、指定したユーザーやグループにオブジェクトへのアクセス許可を付与できる --grants オプションが含まれています。次の構文を使用して、--grants オプションをアクセス許可リストに設定します。PermissionGrantee_TypeGrantee_ID を独自の値に置き換えます。

構文

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

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

  • Permission – 付与するアクセス許可を指定します。readreadaclwriteaclfull のいずれかに設定できます。

  • Grantee_Type – 被付与者を識別する方法を指定します。uriemailaddressid のいずれかに設定できます。

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

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

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

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

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

次の例では、バケットにオブジェクトをコピーします。これは、オブジェクトへの read アクセス許可を全員に付与し、full アクセス許可 (readreadaclwriteacl) を 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
recursive

このオプションを使用すると、指定のディレクトリ内またはプレフィックス内のすべてのファイルやオブジェクトに対してコマンドが実行されます。次の例では、s3://my-bucket/path とそのすべての内容を削除します。

$ aws s3 rm s3://my-bucket/path --recursive

参照

AWS CLI リファレンス

サービスリファレンス: