AWS CLI での高レベル (s3) コマンドの使用
このトピックでは、AWS CLI で aws s3
aws s3
高レベル aws s3
コマンドを使用すると、Amazon S3 オブジェクトの管理が容易になります。これらのコマンドにより、Amazon S3 のコンテンツの管理をそれ自体の内部およびローカルディレクトリ内で管理することができます。
トピック
前提条件
s3
コマンドを実行するには、次のことが必要です。
AWS CLI をインストールして設定します。詳細については、AWS CLI の最新バージョンのインストールまたは更新およびAWS CLI の認証とアクセス認証情報を参照してください。
-
使用するプロファイルには、例によって実行される AWS オペレーションに対する許可が必要です。
-
Amazon S3 の以下の用語を解説します。
-
バケット - トップレベルの Amazon S3 フォルダ。
-
プレフィックス - バケット内の Amazon S3 フォルダ。
-
オブジェクト - Amazon S3 バケットでホストされているすべてのアイテム。
-
開始する前に
このセクションでは、aws s3
コマンドを使用する前の注意事項をいくつか示します。
大容量オブジェクトのアップロード
aws s3
コマンドを使用して大きなオブジェクトを Amazon S3 バケットにアップロードする場合、AWS CLI は自動的にマルチパートアップロードを実行します。これらの aws s3
コマンドを使用した場合、失敗したアップロードを再開することはできません。
マルチパートアップロードがタイムアウトして失敗した場合、または AWS CLI で手動でキャンセルした場合、AWS CLI はアップロードを停止し、作成されたすべてのファイルをクリーンアップします。この処理には数分かかることもあります。
マルチパートアップロードまたはクリーンアッププロセスが kill コマンドまたはシステム障害によってキャンセルされた場合、作成されたファイルは Amazon S3 バケットに残ります。マルチパートアップロードをクリーンアップするには、s3api abort-multipart-upload
マルチパートコピーのファイルプロパティとタグ
1 つの Amazon S3 バケットの場所から別の Amazon S3 バケットの場所にファイルをコピーするために aws s3
名前空間で AWS CLI バージョン 1 のコマンドバージョンを使用しており、そのオペレーションがマルチパートコピーを使用する場合は、コピー先にソースオブジェクトのファイルプロパティがコピーされません。
デフォルトで、マルチパートコピーを実行する s3
名前空間の AWS CLI バージョン 2 のコマンドは、ソースのすべてのタグと、プロパティのセット (content-type
、content-language
、content-encoding
、content-disposition
、cache-control
、expires
) をコピー先に転送します。
これにより、AWS CLI バージョン 1 を使用する場合には行われなかった追加の AWS API コールが Amazon S3 エンドポイントに対して実行されることになる場合があります。これには、HeadObject
、GetObjectTagging
、および PutObjectTagging
が含まれます。
AWS CLI バージョン 2 コマンドでこのデフォルト動作を変更する必要がある場合は、--copy-props
パラメータを使用して次のオプションのいずれかを指定します。
-
default - デフォルト値。コピーに、ソースオブジェクトにアタッチされたすべてのタグと、マルチパートコピー以外に使用される
--metadata-directive
パラメータの次のプロパティが含まれることを指定します。content-type
、content-language
、content-encoding
、content-disposition
、cache-control
,expires
、metadata
。 -
metadata-directive -
--metadata-directive
マルチパートコピー以外に使用されるパラメータによって包含されるプロパティのみがコピーに含まれることを指定します。タグはコピーされません。 -
none - コピーにソースオブジェクトのプロパティを含みません。
バケットを作成する
s3 mb
バケット名には、小文字の英文字、数字、ハイフン、およびピリオドを使用することができます。バケット名の先頭と末尾は文字または数値とし、ハイフンまたは別のピリオドの横にピリオドを使用することはできません。
[Syntax] (構文)
$
aws s3 mb <target> [--options]
次の例では、s3://amzn-s3-demo-bucket
バケットを作成します。
$
aws s3 mb s3://
amzn-s3-demo-bucket
バケットとオブジェクトの一覧表示
バケット、フォルダ、オブジェクトのいずれかを一覧表示するには、s3 ls
[Syntax] (構文)
$
aws s3 ls <target> [--options]
このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。使用可能なオプションの完全なリストについては、AWS CLI コマンドリファレンスの s3 ls
次の例では、すべての Amazon S3 バケットを一覧表示します。
$
aws s3 ls
2018-12-11 17:08:50 amzn-s3-demo-bucketamzn-s3-demo-bucket1 2018-12-14 14:55:44 amzn-s3-demo-bucket2
次のコマンドでは、バケット内のすべてのオブジェクトとプレフィックスを一覧表示します。この出力例では、プレフィックス example/
内に MyFile1.txt
という名前のファイル が 1 つあります。
$
aws s3 ls
s3://amzn-s3-demo-bucket
PRE example/ 2018-12-04 19:05:48 3 MyFile1.txt
コマンドに含めることによって、出力を特定のプレフィックスに絞り込むことができます。次のコマンドでは、bucket-name/example/
内のオブジェクトを一覧表示します (つまり、プレフィックス example/
でフィルタリングされた、bucket-name
内のオブジェクトを表示します)。
$
aws s3 ls
s3://amzn-s3-demo-bucket/example/
2018-12-06 18:59:32 3 MyFile1.txt
バケットの削除
バケットを削除するには、s3 rb
[Syntax] (構文)
$
aws s3 rb <target> [--options]
次の例では、s3://amzn-s3-demo-bucket
バケットを削除します。
$
aws s3 rb
s3://amzn-s3-demo-bucket
デフォルトでは、オペレーションが成功するにはバケットが空である必要があります。空でないバケットを削除するには、--force
オプションを含める必要があります。以前に削除されたが保持されているオブジェクトを含む、バージョニングされたバケットを使用している場合、このコマンドでバケットを削除することはできません。すべての内容を削除しておく必要があります。
次の例では、バケット内のすべてのオブジェクトとプレフィックスを削除し、さらにバケット自体を削除します。
$
aws s3 rb
s3://amzn-s3-demo-bucket
--force
オブジェクトの削除
バケット内またはローカルディレクトリ内のオブジェクトを削除するには、s3 rm
[Syntax] (構文)
$
aws s3 rm <target> [--options]
このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの完全なリストについては、AWS CLI コマンドリファレンスの「s3 rm
以下の例では、filename.txt
から s3://amzn-s3-demo-bucket/example
が削除されます。
$
aws s3 rm s3://amzn-s3-demo-bucket/example/filename.txt
以下の例では、s3://amzn-s3-demo-bucket/example
オプションを使用して --recursive
からすべてのオブジェクトが削除されます。
$
aws s3 rm s3://amzn-s3-demo-bucket/example --recursive
オブジェクトの移動
バケットまたはローカルディレクトリからオブジェクトを移動するには、s3 mv
s3 mv
コマンドを使用すると、ソースオブジェクトまたはファイルが指定された宛先にコピーされ、ソースオブジェクトまたはファイルが削除されます。
[Syntax] (構文)
$
aws s3 mv <source> <target> [--options]
このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。使用可能なオプションの完全なリストについては、AWS CLI コマンドリファレンスの s3 mv
警告
Amazon S3 ソースまたは宛先 URI で任意のタイプのアクセスポイント ARN またはアクセスポイントエイリアスを使用している場合、ソースと宛先 Amazon S3 URI が異なる基盤となるバケットに対して解決されるように特に注意する必要があります。ソースバケットと宛先バケットが同じ場合、ソースファイルまたはオブジェクトをそれ自体に移動する可能性があるため、ソースファイルまたはオブジェクトが誤って削除される恐れがあります。ソースバケットと宛先バケットが同じでないことを確認するには、--validate-same-s3-paths
パラメータを使用するか、環境変数 AWS_CLI_S3_MV_VALIDATE_SAME_S3_PATHS
を true
に設定します。
次の例では、すべてのオブジェクトを s3://amzn-s3-demo-bucket/example
から s3://amzn-s3-demo-bucket/
に移動します。
$
aws s3 mv s3://amzn-s3-demo-bucket/example s3://amzn-s3-demo-bucket/
次の例では、s3 mv
コマンドを使用して、ローカルファイルを現在の作業ディレクトリから Amazon S3 バケットに移動します。
$
aws s3 mv filename.txt s3://amzn-s3-demo-bucket
次の例では、ファイルを Amazon S3 バケットから現在の作業ディレクトリに移動します。./
では、現在の作業ディレクトリを指定します。
$
aws s3 mv s3://amzn-s3-demo-bucket/filename.txt ./
オブジェクトのコピー
バケットまたはローカルディレクトリからオブジェクトをコピーするには、s3 cp
[Syntax] (構文)
$
aws s3 cp <source> <target> [--options]
標準入力 (stdin
) または標準出力 (stdout
) へのファイルストリーミングには dash パラメータを使用できます。
警告
PowerShellを使用している場合、シェルによって CRLF のエンコーディングが変更されたり、パイプされた入力/出力またはリダイレクトされた出力に CRLF が追加されたりすることがあります。
s3 cp
コマンドでは、次の構文を使用して、stdin
から指定先のバケットにファイルストリームをアップロードします。
[Syntax] (構文)
$
aws s3 cp - <target> [--options]
s3 cp
コマンドは、次の構文を使用して stdout
用の Amazon S3 ファイルストリームをダウンロードします。
[Syntax] (構文)
$
aws s3 cp <target> [--options] -
このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの完全なリストについては、AWS CLI コマンドリファレンスの s3 cp
次の例では、すべてのオブジェクトを s3://amzn-s3-demo-bucket/example
から s3://amzn-s3-demo-bucket/
にコピーします。
$
aws s3 cp s3://amzn-s3-demo-bucket/example s3://amzn-s3-demo-bucket/
次の例では、s3 cp
コマンドを使用して、現在の作業ディレクトリから Amazon S3 バケットにローカルファイルをコピーします。
$
aws s3 cp filename.txt s3://amzn-s3-demo-bucket
次の例では、ファイルを Amazon S3 バケットから現在の作業ディレクトリにコピーします (./
では現在の作業ディレクトリを指定します)。
$
aws s3 cp s3://amzn-s3-demo-bucket/filename.txt ./
次の例では、echo を使用して「hello world」というテキストを s3://bucket-name/filename.txt
ファイルにストリームします。
$
echo "hello world" | aws s3 cp - s3://amzn-s3-demo-bucket/filename.txt
次の例では、s3://amzn-s3-demo-bucket/filename.txt
ファイルを stdout
にストリーミングし、その内容をコンソールに出力します。
$
aws s3 cp s3://amzn-s3-demo-bucket/filename.txt -
hello world
次の例では、s3://bucket-name/pre
の内容を stdout
にストリーミングし、bzip2
コマンドを使用してファイルを圧縮します。この圧縮したファイルを key.bz2
という名前で s3://bucket-name
にアップロードします。
$
aws s3 cp s3://amzn-s3-demo-bucket/pre - | bzip2 --best | aws s3 cp - s3://amzn-s3-demo-bucket/key.bz2
オブジェクトの同期
s3 sync
s3 sync
は欠落しているか古くなったファイルやオブジェクトを、ソースとターゲットの間でコピーします。ただし、--delete
オプションを指定して、ソースに存在しないファイルまたはオブジェクトをターゲットから削除することもできます。
[Syntax] (構文)
$
aws s3 sync <source> <target> [--options]
このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの完全なリストについては、AWS CLI コマンドリファレンスの s3 sync
次の例では、amzn-s3-demo-bucket という名前のバケット内にある path という名前の Amazon S3 プレフィックスの内容と、現在の作業ディレクトリを同期させます。
s3 sync
は、同期先で同じ名前を持つファイルと、サイズや変更時間が異なるファイルを更新します。出力には、同期中に実行された特定のオペレーションが表示されます。このオペレーションでは、サブディレクトリ MySubdirectory
とその内容を s3://amzn-s3-demo-bucket/path/MySubdirectory
と再帰的に同期することに注意してください。
$
aws s3 sync . s3://mamzn-s3-demo-bucket/path
upload: MySubdirectory\MyFile3.txt to s3://amzn-s3-demo-bucket/path/MySubdirectory/MyFile3.txt upload: MyFile2.txt to s3://amzn-s3-demo-bucket/path/MyFile2.txt upload: MyFile1.txt to s3://amzn-s3-demo-bucket/path/MyFile1.txt
次の例 (前の例の拡張) では、--delete
オプションの使用方法を示します。
// Delete local file
$
rm ./MyFile1.txt
// Attempt sync without --delete option - nothing happens
$
aws s3 sync . s3://amzn-s3-demo-bucket/path
// Sync with deletion - object is deleted from bucket
$
aws s3 sync . s3://amzn-s3-demo-bucket/path --delete
delete: s3://amzn-s3-demo-bucket/path/MyFile1.txt // Delete object from bucket
$
aws s3 rm s3://amzn-s3-demo-bucket/path/MySubdirectory/MyFile3.txt
delete: s3://amzn-s3-demo-bucket/path/MySubdirectory/MyFile3.txt // Sync with deletion - local file is deleted
$
aws s3 sync s3://amzn-s3-demo-bucket/path . --delete
delete: MySubdirectory\MyFile3.txt // Sync with Infrequent Access storage class
$
aws s3 sync . s3://amzn-s3-demo-bucket/path --storage-class STANDARD_IA
--delete
オプションを使用する場合、--exclude
オプションと --include
オプションによって、s3
sync
オペレーション中に削除するファイルやオブジェクトをフィルタリングできます。この場合、パラメータ文字列で、ターゲットディレクトリまたはバケットに関連して、削除から除外するか、削除に含めるファイルを指定する必要があります。例を以下に示します。
Assume local directory and s3://amzn-s3-demo-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://amzn-s3-demo-bucket/path --delete --exclude "path/MyFile?.txt"
delete: s3://amzn-s3-demo-bucket/path/MyFile88.txt '''
// Sync with delete, excluding MyFile2.rtf - local file is NOT deleted
$
aws s3 sync s3://amzn-s3-demo-bucket/path . --delete --exclude "./MyFile2.rtf"
download: s3://amzn-s3-demo-bucket/path/MyFile1.txt to MyFile1.txt ''' // Sync with delete, local copy of MyFile2.rtf is deleted
$
aws s3 sync s3://amzn-s3-demo-bucket/path . --delete
delete: MyFile2.rtf
s3 コマンドでよく使用されるオプション
このトピックで説明するコマンドでは、次のオプションがよく使用されます。コマンドで使用できるオプションの完全なリストについては、AWS CLIバージョン 2 リファレンスガイド
- acl
-
s3 sync
とs3 cp
では、--acl
オプションを使用できます。これにより、Amazon S3 にコピーされたファイルのアクセス権限を設定できます。--acl
オプションは、private
、public-read
、およびpublic-read-write
の値を受け入れます。詳細については、「Amazon S3 ユーザーガイド」の「既定 ACL」を参照してください。$
aws s3 sync . s3://amzn-s3-demo-bucket/path --acl public-read
- exclude
-
s3 cp
、s3 mv
、s3 sync
、s3 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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-bucket/path --exclude "*.txt" --include "MyFile*.txt" --exclude "MyFile?.txt"
- include
-
s3 cp
、s3 mv
、s3 sync
、s3 rm
のいずれかのコマンドを使用する場合、--exclude
オプションまたは--include
オプションを使用して結果をフィルタリングできます。--include
オプションは、指定したオブジェクトのみをコマンドに含めるようにルールを設定します。各オプションは、指定した順に適用されます。これを次の例で示します。Local directory contains 3 files: MyFile1.txt MyFile2.rtf MyFile88.txt
// Include all .txt files, resulting in MyFile1.txt and MyFile88.txt being copied
$
aws s3 cp . s3://amzn-s3-demo-bucket/path --include "*.txt"
// Include all .txt files but exclude all files with the "MyFile*.txt" format, resulting in no files being copied
$
aws s3 cp . s3://amzn-s3-demo-bucket/path --include "*.txt" --exclude "MyFile*.txt"
// Include all .txt files, but exclude all files with the "MyFile*.txt" format, but include all files with the "MyFile?.txt" format resulting in MyFile1.txt being copied
$
aws s3 cp . s3://amzn-s3-demo-bucket/path --include "*.txt" --exclude "MyFile*.txt" --include "MyFile?.txt"
- 許可
-
s3 cp
、s3 mv
、s3 sync
の各コマンドには、指定したユーザーやグループにオブジェクトへのアクセス許可を付与できる--grants
オプションが含まれています。次の構文を使用して、--grants
オプションをアクセス許可リストに設定します。Permission
、Grantee_Type
、Grantee_ID
を独自の値に置き換えます。[Syntax] (構文)
--grants
Permission
=Grantee_Type
=Grantee_ID
[Permission
=Grantee_Type
=Grantee_ID
...]各値には以下の要素が含まれます。
-
Permission
- 付与されたアクセス許可を指定します。read
、readacl
、writeacl
、full
のいずれかに設定できます。 -
Grantee_Type
- 被付与者の識別方法を指定します。uri
、emailaddress
、id
のいずれかに設定できます。 -
Grantee_ID
-Grantee_Type
に基づいて被付与者を指定します。-
uri
– グループの URI。詳細については、「被付与者とは」を参照してください。 -
emailaddress
– アカウントの E メールアドレス。 -
id
– アカウントの正規 ID。
-
Amazon S3 アクセスコントロールの詳細については、「アクセスコントロール」を参照してください。
次の例では、バケットにオブジェクトをコピーします。これは、オブジェクトへの
read
アクセス許可を全員に付与し、full
アクセス許可 (read
、readacl
、writeacl
) をuser@example.com
に関連付けられたアカウントに付与します。$
aws s3 cp file.txt s3://amzn-s3-demo-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://amzn-s3-demo-bucket/
--storage-class REDUCED_REDUNDANCY
-
- recursive
-
このオプションを使用すると、指定のディレクトリ内またはプレフィックス内のすべてのファイルやオブジェクトに対してコマンドが実行されます。次の例では、
s3://amzn-s3-demo-bucket/path
とそのすべての内容を削除します。$
aws s3 rm s3://amzn-s3-demo-bucket/path --recursive
リソース
AWS CLI リファレンス:
サービスリファレンス:
-
「Amazon S3 ユーザーガイド」の「Amazon S3 バケットの操作」
-
「Amazon S3 ユーザーガイド」の「Amazon S3 オブジェクトの操作」
-
「Amazon S3 ユーザーガイド」の「プレフィックスと区切り記号によるキーの階層的なリスト」
-
「Amazon S3 ユーザーガイド」の「AWS SDK for .NET (低レベル) を使用した S3 バケットへのマルチパートアップロードの中止」