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

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

このトピックでは、AWS CLI で aws s3 コマンドを使用して、Amazon S3 のバケットとオブジェクトを管理するために使用できるコマンドの一部について説明します。このトピックで説明されていないコマンドおよびその他のコマンドの例については、AWS CLI リファレンスの 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-typecontent-languagecontent-encodingcontent-dispositioncache-controlexpires) をコピー先に転送します。

これにより、AWS CLI バージョン 1 を使用する場合には行われなかった追加の AWS API コールが Amazon S3 エンドポイントに対して実行されることになる場合があります。これには、HeadObjectGetObjectTagging、および PutObjectTagging が含まれます。

AWS CLI バージョン 2 コマンドでこのデフォルト動作を変更する必要がある場合は、--copy-props パラメータを使用して次のオプションのいずれかを指定します。

  • default - デフォルト値。コピーに、ソースオブジェクトにアタッチされたすべてのタグと、マルチパートコピー以外に使用される --metadata-directive パラメータの次のプロパティが含まれることを指定します。content-typecontent-languagecontent-encodingcontent-dispositioncache-control, expiresmetadata

  • metadata-directive - --metadata-directive マルチパートコピー以外に使用されるパラメータによって包含されるプロパティのみがコピーに含まれることを指定します。タグはコピーされません。

  • none - コピーにソースオブジェクトのプロパティを含みません。

バケットの作成

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

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

[Syntax] (構文)

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

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

$ aws s3 mb s3://bucket-name

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

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

[Syntax] (構文)

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

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。使用可能なオプションの完全なリストについては、AWS CLI コマンドリファレンスの 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 コマンドを使用します。

[Syntax] (構文)

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

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

$ aws s3 rb s3://bucket-name

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

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

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

オブジェクトの削除

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

[Syntax] (構文)

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

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの完全なリストについては、AWS CLI コマンドリファレンスの「s3 rm」を参照してください。

以下の例では、filename.txt から s3://bucket-name/example が削除されます。

$ aws s3 rm s3://bucket-name/example/filename.txt --recursive

以下の例では、s3://bucket-name/example オプションを使用して --recursive からすべてのオブジェクトが削除されます。

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

オブジェクトの移動

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

[Syntax] (構文)

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

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。使用可能なオプションの完全なリストについては、AWS CLI コマンドリファレンスの 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 コマンドを使用します。

[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://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 ./

次の例では、echo を使用して「hello world」というテキストを s3://bucket-name/filename.txt ファイルにストリームします。

$ echo "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 オプションを指定して、ソースに存在しないファイルまたはオブジェクトをターゲットから削除することもできます。

[Syntax] (構文)

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

このコマンドで使用するいくつかの一般的なオプションと例については、「s3 コマンドでよく使用されるオプション」を参照してください。オプションの完全なリストについては、AWS CLI コマンドリファレンスの s3 sync を参照してください。

次の例では、my-bucket という名前のバケット内の path という名前の 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

次の例 (前の例の拡張) では、--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 "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バージョン 2 リファレンスガイド のコマンドリファレンスで特定のコマンドを参照してください。

acl

s3 syncs3 cp では、--acl オプションを使用できます。これにより、Amazon S3 にコピーされたファイルのアクセス権限を設定できます。--acl オプションは、privatepublic-read、および public-read-write の値を受け入れます。詳細については、Amazon Simple Storage ユーザーガイドの「既定 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 // Include all .txt files, resulting in MyFile1.txt and MyFile88.txt being copied $ aws s3 cp . s3://my-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://my-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://my-bucket/path --include "*.txt" --exclude "MyFile*.txt" --include "MyFile?.txt"
許可

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

[Syntax] (構文)

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

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

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

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

  • Grantee_ID - Grantee_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 リファレンス:

サービスリファレンス: