AWS CLIを使用してファイルをS3にアップロードする方法:包括的ガイド

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 Users Menu

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

Set IAM user details

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

Assign IAM user permissions

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

IAM user tags

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

IAM user summary

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

IAM user key credentials

コンピューターにAWSプロファイルを設定する

今、適切なアクセス権限を持つIAMユーザーをAmazon S3に作成したので、次のステップはコンピューターにAWS CLIプロファイルを設定することです。

このセクションでは、必要なAWS CLIバージョン2ツールをすでにインストールしたものとしています。プロファイルを作成するためには、次の情報が必要です。

  • IAMユーザーのアクセスキーID
  • IAMユーザーに関連付けられたシークレットアクセスキー
  • デフォルトのリージョン名は、AWS S3バケットの場所に対応しています。エンドポイントの一覧は、このリンクから確認できます。この記事では、AWS S3バケットはアジアパシフィック(シドニー)リージョンにあり、対応するエンドポイントはap-southeast-2です。
  • デフォルトの出力形式はJSONを使用します。

プロファイルを作成するには、PowerShellを開き、以下のコマンドを入力し、プロンプトに従ってください。

aws configure

アクセスキーID、シークレットアクセスキー、デフォルトのリージョン名、およびデフォルトの出力名を入力してください。以下のデモを参照してください。

Configure an AWS CLI profile

AWS CLIアクセスのテスト

AWS CLIプロファイルを設定した後、以下のコマンドをPowerShellで実行することで、プロファイルが正常に機能していることを確認できます。

aws s3 ls

上記のコマンドは、アカウント内のAmazon S3バケットの一覧を表示するはずです。以下のデモでは、コマンドの動作例が示されています。結果から、利用可能なS3バケットの一覧が表示され、プロファイルの設定が成功したことが示されています。

List S3 buckets

AWS CLIコマンドのAmazon S3に特化したコマンドについては、AWS CLIコマンドリファレンスS3ページをご覧ください。

S3でのファイル管理

AWS CLIを使用すると、S3での典型的なファイル管理操作が行えます。S3にファイルをアップロードしたり、S3からファイルをダウンロードしたり、S3のオブジェクトを削除したり、S3のオブジェクトを別のS3の場所にコピーしたりすることができます。すべては、正しいコマンドや構文、パラメータ、オプションを知っているかどうかの問題です。

次のセクションでは、使用する環境は以下のようになっています。

  • 2つのS3バケット、すなわちatasync1atasync2。以下のスクリーンショットは、Amazon S3コンソールに存在する既存のS3バケットを示しています。
List of available S3 bucket names in the Amazon S3 console
  • ローカルディレクトリとc:\sync以下にあるファイル。
Local Directory

S3への個々のファイルのアップロード

S3にファイルをアップロードする場合、一度に1つのファイルをアップロードするか、複数のファイルとフォルダを再帰的にアップロードすることができます。要件に応じて、適切と思われる方法を選択することができます。

S3にファイルをアップロードするには、aws s3 cpコマンドに2つの引数(ソースと宛先)を指定する必要があります。

たとえば、ファイルc:\sync\logs\log1.xmlatasync1バケットのルートにアップロードするには、以下のコマンドを使用できます。

aws s3 cp c:\sync\logs\log1.xml s3://atasync1/

注意:AWS CLIで使用する場合、S3バケット名は常に”S3://”で接頭辞が付きます

上記のコマンドをPowerShellで実行しますが、まず環境に合わせてソースと宛先を変更してください。出力は以下のデモと似たような形になります。

Upload file to S3

上記のデモでは、ファイルc:\sync\logs\log1.xmlがエラーなくS3の宛先s3://atasync1/にアップロードされたことが示されています。

以下のコマンドを使用して、S3バケットのルートにあるオブジェクトの一覧を表示します。

aws s3 ls s3://atasync1/

上記のコマンドをPowerShellで実行すると、以下のデモと同様の出力が得られます。出力の下にあるように、ファイルlog1.xmlがS3のルートに存在していることがわかります。

List the uploaded file in S3

複数のファイルとフォルダを再帰的にS3にアップロードする

前のセクションでは、単一のファイルをS3にコピーする方法を説明しました。しかし、複数のファイルをフォルダとサブフォルダからアップロードする必要がある場合は、異なるファイル名で同じコマンドを複数回実行したくはないでしょう。

aws s3 cpコマンドには、ファイルとフォルダを再帰的に処理するオプションがあります。これが--recursiveオプションです。

例として、ディレクトリc:\syncには166個のオブジェクト(ファイルとサブフォルダ)が含まれています。

The folder containing multiple files and sub-folders

--recursiveオプションを使用すると、c:\syncフォルダのすべての内容がS3にアップロードされ、フォルダの構造も保持されます。テストするには、以下の例のコードを使用してください。ただし、ソースと宛先を環境に合わせて変更してください。

以下のコードからわかるように、ソースはc:\syncで、宛先はs3://atasync1/syncです。S3バケット名の後に続く/syncキーは、AWS CLIに対してS3の/syncフォルダ内のファイルをアップロードするよう指示します。S3に/syncフォルダが存在しない場合、自動的に作成されます。

aws s3 cp c:\sync s3://atasync1/sync --recursive

上記のコードは、以下のデモンストレーションに示されるような出力になります。

Upload multiple files and folders to S3

複数のファイルとフォルダを選択的にS3にアップロードする

すべての種類のファイルをアップロードすることが最適でない場合もあります。たとえば、特定のファイル拡張子(例:*.ps1)のファイルのみをアップロードする必要がある場合などです。コピー(cp)コマンドには、--includeおよび--excludeという2つのオプションもあります。

前のセクションでのコマンドは再帰的なアップロードで全てのファイルが含まれますが、以下のコマンドは*.ps1ファイル拡張子に一致するファイルのみを含み、他のすべてのファイルをアップロードから除外します。

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.ps1

以下のデモンストレーションは、上記のコードの実行結果を示しています。

Upload files that matched a specific file extension

もう一つの例は、複数の異なるファイル拡張子を含める場合で、--includeオプションを複数回指定する必要があります。

以下の例のコマンドは、*.csvおよび*.pngファイルのみをコピーの対象にします。

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.csv --include *.png

このコードをPowerShellで実行すると、以下のような結果が表示されます。

Upload files with multiple include options

S3からオブジェクトをダウンロードする

このセクションで学んだ例に基づいて、逆のコピー操作も実行することができます。つまり、S3バケットのオブジェクトをローカルマシンにダウンロードすることができます。

S3からローカルへのコピーには、ソースと宛先の位置を入れ替える必要があります。ソースはS3の場所であり、宛先はローカルパスです。以下に示されているようなものです。

aws s3 cp s3://atasync1/sync c:\sync

ローカルへのオブジェクトのダウンロード時にも、S3へのファイルのアップロード時に使用したオプションが適用されます。たとえば、以下のコマンドを使用して--recursiveオプションを指定してすべてのオブジェクトをダウンロードします。

aws s3 cp s3://atasync1/sync c:\sync --recursive

S3間でオブジェクトのコピー

AWS CLIを使用して、ファイルやフォルダをアップロード、ダウンロードするだけでなく、2つのS3バケットの場所間でファイルをコピーまたは移動することもできます。

以下のコマンドでは、ソースとして1つのS3の場所を、宛先として別のS3の場所を使用しています。

aws s3 cp s3://atasync1/Log1.xml s3://atasync2/

以下のデモンストレーションでは、上記のコマンドを使用してソースファイルが別のS3の場所にコピーされる様子が示されています。

Copy objects from one S3 location to another S3 location

S3とのファイルおよびフォルダの同期

これまでに、AWS CLIコマンドを使用してS3でファイルをアップロード、ダウンロード、コピーする方法について学びました。このセクションでは、S3用のAWS CLIで利用可能なもう1つのファイル操作コマンドであるsyncコマンドについて学びます。syncコマンドは、更新されたファイル、新しいファイル、削除されたファイルのみを処理します。

S3バケットの内容をローカルディレクトリと同期させる必要がある場合があります。たとえば、トランザクションログをサーバー上のS3と同期させる必要がある場合などです。

以下のコマンドを使用すると、ローカルサーバーのフォルダ内にある*.XMLログファイルがS3のに同期されます。

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml

以下のデモでは、PowerShellで上記のコマンドを実行した後、すべての*.XMLファイルがS3の宛先にアップロードされたことが示されています。

Synchronizing local files to S3

S3との新しいおよび更新されたファイルの同期

次の例では、ログファイルの内容が変更されたと仮定しています。syncコマンドはその変更を検知し、ローカルファイルに行われた変更をS3にアップロードします。以下のデモをご覧ください。

前の例と同じコマンドを使用します。

Synchronizing changes to S3

上記の出力からわかるように、ローカルで変更されたファイルはだけであるため、それだけがS3に同期されました。

S3との削除の同期

syncコマンドにはデフォルトで削除処理は含まれていません。ソースのファイルが削除されても、宛先からは削除されません。ただし、--deleteオプションを使用する場合は別です。

次の例では、ソースからファイルが削除されました。ファイルを同期するコマンドには、--deleteオプションが追加されます。

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml --delete

上記のコマンドをPowerShellで実行すると、削除されたファイルであるLog5.xmlも宛先のS3場所で削除されます。以下は、サンプル結果です。

Synchronize file deletions to S3

概要

Amazon S3は、クラウド上でファイルを保存するための優れたリソースです。AWS CLIツールを使用することで、Amazon S3の活用方法がさらに拡大され、プロセスを自動化する機会が広がります。

この記事では、AWS CLIツールを使用して、ローカルの場所とS3バケットの間でファイルやフォルダをアップロード、ダウンロード、同期する方法を学びました。また、S3バケットの内容を他のS3場所にコピーまたは移動することもできることを学びました。

Amazon S3とのファイル管理を自動化するためにAWS CLIツールを使用するさまざまなユースケースが存在します。PowerShellスクリプトと組み合わせて、再利用可能な独自のツールモジュールを作成することもできます。機会を見つけて自分のスキルを発揮してください。

さらなる情報

Source:
https://adamtheautomator.com/upload-file-to-s3/