Amazon S3(Simple Storage Service)で作業する際には、おそらくS3ウェブコンソールを使用してS3バケットにファイルをダウンロード、コピー、またはアップロードしているでしょう。コンソールの使用は完全に問題ありません。それが最初に設計された目的です。
特にマウスクリックよりもキーボードコマンドの方が慣れている管理者にとって、ウェブコンソールはおそらく最も簡単な方法です。ただし、管理者はAmazon S3に対して一括ファイル操作(自動ファイルアップロードなど)を行う必要が出てくるでしょう。GUIはそのための最適なツールではありません。
Amazon Web Services(Amazon S3を含む)におけるこのような自動化要件に対して、AWS CLIツールは管理者にAmazon S3バケットとオブジェクトを管理するためのコマンドラインオプションを提供します。
この記事では、AWS CLIコマンドラインツールを使用して、Amazon S3とファイルをアップロード、コピー、ダウンロード、同期する方法について学びます。また、S3バケットへのアクセスを提供し、AWS CLIツールと連携するためのアクセスプロファイルの基本も学びます。
前提条件
このハウツー記事では、次のセクションで例とデモンストレーションがあります。正常に追いつくためには、いくつかの要件を満たす必要があります。
- AWSアカウント。既存のAWSサブスクリプションがない場合は、AWS Free Tierに登録できます。
- AWS S3 バケット。既存のバケットを使用することもできますが、空のバケットを作成することをお勧めします。詳細については、バケットの作成を参照してください。
- A Windows 10 computer with at least Windows PowerShell 5.1. In this article, PowerShell 7.0.2 will be used.
- コンピュータには、AWS CLI バージョン2 ツールがインストールされている必要があります。
- Amazon S3 とアップロードまたは同期するローカルフォルダとファイル
AWS S3 アクセスの準備
前提条件がすでに整っていると仮定します。AWS CLI で S3 バケットを操作し始めることができると思うでしょう。それはとても簡単なことだと思いませんか?
Amazon S3 や AWS 全般について初めて取り組む方々のために、このセクションでは S3 へのアクセスの設定と AWS CLI プロファイルの構成を支援することを目的としています。
AWS で IAM ユーザを作成するための詳細なドキュメントは、以下のリンクにあります。AWS アカウントでの IAM ユーザの作成
S3 アクセス権限を持つ IAM ユーザの作成
CLI を使用して AWS にアクセスする際には、作業するリソースに十分なアクセス権限を持つ 1 つ以上の IAM ユーザを作成する必要があります。このセクションでは、Amazon S3 へのアクセス権を持つ IAM ユーザを作成します。
Amazon S3へのアクセス権限を持つIAMユーザーを作成するには、まずAWS IAMコンソールにログインする必要があります。 アクセス管理グループの下にあるユーザーをクリックします。 次に、ユーザーの追加をクリックします。

作成するIAMユーザーの名前をユーザー名*ボックスに入力します(例:s3Admin)。 アクセスの種類*の選択で、プログラムによるアクセスにチェックを入れます。 次に、次: アクセス許可ボタンをクリックします。

次に、既存のポリシーを直接アタッチをクリックします。 次に、AmazonS3FullAccessポリシー名を検索し、チェックを入れます。 完了したら、次: タグをクリックします。

タグの追加ページでタグを作成することはオプションであり、これをスキップして次: 確認ボタンをクリックすることができます。

確認ページでは、作成された新しいアカウントの概要が表示されます。 ユーザーの作成をクリックします。

最後に、ユーザーが作成されたら、アクセスキーIDとシークレットアクセスキーの値をコピーして後で使用するために保存する必要があります。 これらの値を表示できるのはこの時だけであることに注意してください。

コンピューターにAWSプロファイルを設定する
今、適切なアクセス権限を持つIAMユーザーをAmazon S3に作成したので、次のステップはコンピューターにAWS CLIプロファイルを設定することです。
このセクションでは、必要なAWS CLIバージョン2ツールをすでにインストールしたものとしています。プロファイルを作成するためには、次の情報が必要です。
- IAMユーザーのアクセスキーID
- IAMユーザーに関連付けられたシークレットアクセスキー
- デフォルトのリージョン名は、AWS S3バケットの場所に対応しています。エンドポイントの一覧は、このリンクから確認できます。この記事では、AWS S3バケットはアジアパシフィック(シドニー)リージョンにあり、対応するエンドポイントはap-southeast-2です。
- デフォルトの出力形式はJSONを使用します。
プロファイルを作成するには、PowerShellを開き、以下のコマンドを入力し、プロンプトに従ってください。
アクセスキーID、シークレットアクセスキー、デフォルトのリージョン名、およびデフォルトの出力名を入力してください。以下のデモを参照してください。

AWS CLIアクセスのテスト
AWS CLIプロファイルを設定した後、以下のコマンドをPowerShellで実行することで、プロファイルが正常に機能していることを確認できます。
上記のコマンドは、アカウント内のAmazon S3バケットの一覧を表示するはずです。以下のデモでは、コマンドの動作例が示されています。結果から、利用可能なS3バケットの一覧が表示され、プロファイルの設定が成功したことが示されています。

AWS CLIコマンドのAmazon S3に特化したコマンドについては、AWS CLIコマンドリファレンスS3ページをご覧ください。
S3でのファイル管理
AWS CLIを使用すると、S3での典型的なファイル管理操作が行えます。S3にファイルをアップロードしたり、S3からファイルをダウンロードしたり、S3のオブジェクトを削除したり、S3のオブジェクトを別のS3の場所にコピーしたりすることができます。すべては、正しいコマンドや構文、パラメータ、オプションを知っているかどうかの問題です。
次のセクションでは、使用する環境は以下のようになっています。
- 2つのS3バケット、すなわちatasync1とatasync2。以下のスクリーンショットは、Amazon S3コンソールに存在する既存のS3バケットを示しています。

- ローカルディレクトリとc:\sync以下にあるファイル。

S3への個々のファイルのアップロード
S3にファイルをアップロードする場合、一度に1つのファイルをアップロードするか、複数のファイルとフォルダを再帰的にアップロードすることができます。要件に応じて、適切と思われる方法を選択することができます。
S3にファイルをアップロードするには、aws s3 cp
コマンドに2つの引数(ソースと宛先)を指定する必要があります。
たとえば、ファイルc:\sync\logs\log1.xmlをatasync1バケットのルートにアップロードするには、以下のコマンドを使用できます。
注意:AWS CLIで使用する場合、S3バケット名は常に”S3://”で接頭辞が付きます
上記のコマンドをPowerShellで実行しますが、まず環境に合わせてソースと宛先を変更してください。出力は以下のデモと似たような形になります。

上記のデモでは、ファイルc:\sync\logs\log1.xmlがエラーなくS3の宛先s3://atasync1/にアップロードされたことが示されています。
以下のコマンドを使用して、S3バケットのルートにあるオブジェクトの一覧を表示します。
上記のコマンドをPowerShellで実行すると、以下のデモと同様の出力が得られます。出力の下にあるように、ファイルlog1.xmlがS3のルートに存在していることがわかります。

複数のファイルとフォルダを再帰的にS3にアップロードする
前のセクションでは、単一のファイルをS3にコピーする方法を説明しました。しかし、複数のファイルをフォルダとサブフォルダからアップロードする必要がある場合は、異なるファイル名で同じコマンドを複数回実行したくはないでしょう。
aws s3 cp
コマンドには、ファイルとフォルダを再帰的に処理するオプションがあります。これが--recursive
オプションです。
例として、ディレクトリc:\syncには166個のオブジェクト(ファイルとサブフォルダ)が含まれています。

--recursive
オプションを使用すると、c:\syncフォルダのすべての内容がS3にアップロードされ、フォルダの構造も保持されます。テストするには、以下の例のコードを使用してください。ただし、ソースと宛先を環境に合わせて変更してください。
以下のコードからわかるように、ソースはc:\syncで、宛先はs3://atasync1/syncです。S3バケット名の後に続く/syncキーは、AWS CLIに対してS3の/syncフォルダ内のファイルをアップロードするよう指示します。S3に/syncフォルダが存在しない場合、自動的に作成されます。
上記のコードは、以下のデモンストレーションに示されるような出力になります。

複数のファイルとフォルダを選択的にS3にアップロードする
すべての種類のファイルをアップロードすることが最適でない場合もあります。たとえば、特定のファイル拡張子(例:*.ps1)のファイルのみをアップロードする必要がある場合などです。コピー(cp
)コマンドには、--include
および--exclude
という2つのオプションもあります。
前のセクションでのコマンドは再帰的なアップロードで全てのファイルが含まれますが、以下のコマンドは*.ps1ファイル拡張子に一致するファイルのみを含み、他のすべてのファイルをアップロードから除外します。
以下のデモンストレーションは、上記のコードの実行結果を示しています。

もう一つの例は、複数の異なるファイル拡張子を含める場合で、--include
オプションを複数回指定する必要があります。
以下の例のコマンドは、*.csvおよび*.pngファイルのみをコピーの対象にします。
このコードをPowerShellで実行すると、以下のような結果が表示されます。

S3からオブジェクトをダウンロードする
このセクションで学んだ例に基づいて、逆のコピー操作も実行することができます。つまり、S3バケットのオブジェクトをローカルマシンにダウンロードすることができます。
S3からローカルへのコピーには、ソースと宛先の位置を入れ替える必要があります。ソースはS3の場所であり、宛先はローカルパスです。以下に示されているようなものです。
ローカルへのオブジェクトのダウンロード時にも、S3へのファイルのアップロード時に使用したオプションが適用されます。たとえば、以下のコマンドを使用して--recursive
オプションを指定してすべてのオブジェクトをダウンロードします。
S3間でオブジェクトのコピー
AWS CLIを使用して、ファイルやフォルダをアップロード、ダウンロードするだけでなく、2つのS3バケットの場所間でファイルをコピーまたは移動することもできます。
以下のコマンドでは、ソースとして1つのS3の場所を、宛先として別のS3の場所を使用しています。
以下のデモンストレーションでは、上記のコマンドを使用してソースファイルが別のS3の場所にコピーされる様子が示されています。

S3とのファイルおよびフォルダの同期
これまでに、AWS CLIコマンドを使用してS3でファイルをアップロード、ダウンロード、コピーする方法について学びました。このセクションでは、S3用のAWS CLIで利用可能なもう1つのファイル操作コマンドであるsync
コマンドについて学びます。sync
コマンドは、更新されたファイル、新しいファイル、削除されたファイルのみを処理します。
S3バケットの内容をローカルディレクトリと同期させる必要がある場合があります。たとえば、トランザクションログをサーバー上のS3と同期させる必要がある場合などです。
以下のコマンドを使用すると、ローカルサーバーの
以下のデモでは、PowerShellで上記のコマンドを実行した後、すべての*.XMLファイルがS3の宛先

S3との新しいおよび更新されたファイルの同期
次の例では、ログファイルsync
コマンドはその変更を検知し、ローカルファイルに行われた変更をS3にアップロードします。以下のデモをご覧ください。
前の例と同じコマンドを使用します。

上記の出力からわかるように、ローカルで変更されたファイルは
S3との削除の同期
sync
コマンドにはデフォルトで削除処理は含まれていません。ソースのファイルが削除されても、宛先からは削除されません。ただし、--delete
オプションを使用する場合は別です。
次の例では、ソースからファイル--delete
オプションが追加されます。
上記のコマンドをPowerShellで実行すると、削除されたファイルであるLog5.xmlも宛先のS3場所で削除されます。以下は、サンプル結果です。

概要
Amazon S3は、クラウド上でファイルを保存するための優れたリソースです。AWS CLIツールを使用することで、Amazon S3の活用方法がさらに拡大され、プロセスを自動化する機会が広がります。
この記事では、AWS CLIツールを使用して、ローカルの場所とS3バケットの間でファイルやフォルダをアップロード、ダウンロード、同期する方法を学びました。また、S3バケットの内容を他のS3場所にコピーまたは移動することもできることを学びました。
Amazon S3とのファイル管理を自動化するためにAWS CLIツールを使用するさまざまなユースケースが存在します。PowerShellスクリプトと組み合わせて、再利用可能な独自のツールやモジュールを作成することもできます。機会を見つけて自分のスキルを発揮してください。