「AWS CLI」を利用した「Amazon S3」の操作について
「AWS CLI(AWS Command Line Interface)」から「Amazon S3(Amazon Simple Storage Service) 」をダイレクトに操作することが可能です。通常のマネジメントコンソール画面での操作と比較しても、同等の機能を利用することができます。
関連する用語の説明と、「AWS CLI」を利用するメリット、そして具体的な操作方法について解説していきます。
「AWS CLI」とは?
「AWS CLI(Command Line Interface)」とは、AWSの各サービスを「コマンドベース(AWSサービスへの命令言語による指示)」で操作するためのツールです。
AWS社から提供されており、Windows、Mac、Linuxといった様々なOS環境でインストールして利用することが可能となっています。
例えば、Windowsの場合は、「PowerShell」や「Windowsコマンドプロンプト」の操作ウィンドウから、Linuxの場合は、「シェル(bash、zsh、tcsh等)」のシェルプログラムからコマンドを実行することができます。
「Amazon S3(Amazon Simple Storage Service) 」とは?
「Amazon S3(Amazon Simple Storage Service)」とは、AWSのサービスの一つで、インターネット上で利用できるストレージです。
「Amazon S3」には利用できるストレージクラス(「S3 Standard」、「S3 Glacier Deep Archive」等)が幅広く用意されており、各ユースケースに合わせて選択することが可能です。
またAWSマネジメントコンソール画面といったGUI画面ベースでのファイルの保存や取得が可能ですが、今回紹介している「AWS CLI」からもコマンドベースで同等の機能が利用できます。
「Amazon S3」を操作するための「AWS CLI」のコマンド体系(2種類)
「AWS CLI」には、Amazon S3 へのアクセス用に2種類のコマンド体系が用意されています。
具体的には、以下の2種類のコマンド体系で「◯◯層」という呼び方をします。
(1)「s3層」
「s3層」とは、ファイルやバケットの作成、操作、削除といったベーシックなコマンド体系です。通常のユースケースであれば、こちらだけで対応することが可能です。
(2)「s3api層」
「s3api層」とは、「Amazon S3」を操作するためのAPIを「AWS CLI」から直接操作できるコマンド体系です。「s3層」だけでは実施できないような応用的な操作も可能となっています。
「AWS CLI」を利用した「Amazon S3」の操作方法
「AWS CLI」による「Amazon S3」の具体的な操作方法を解説していきます。
ここでは、「AWS CLI」 での「s3層」コマンドの使用例をご紹介します。
(1)バケットの作成
「s3 mb」コマンドでバケットを作成できます。
$ aws s3 mb s3://(バケット名)
※注意点
「バケット名」は、インターネット上でのバケットを特定してアクセスするために、「Amazon S3」全体で一意となるように設定する必要があります。
(2)バケットとオブジェクト(ファイル等)の一覧表示
「s3 ls」コマンドでバケットやオブジェクトを一覧表示できます。
$ aws s3 ls
2020-10-31 12:34:56 my-bucket1
2020-12-24 23:59:59 my-bucket2
※注意点
ターゲットやオプションを指定しないと、すべてのバケットが一覧表示されます。大量のバケットが配置されていて一覧表示が見づらい場合には、オプションを指定して見やすくすることができます。
(3)バケットの削除
「s3 rb」コマンドでバケットを削除できます。
$ aws s3 rb s3://(バケット名)
※注意点
バケットを削除する前提として、バケットが「空」にしておく必要があります。もし「空」ではないバケットを削除する場合は、以下のように「–force」オプションを付加して実行します。
$ aws s3 rb s3://(バケット名) –force
(4)オブジェクトの削除
「s3 rm」コマンドでオブジェクトを削除できます。
$ aws s3 rm s3://(バケット名)/(削除対象のオブジェクト名)
※注意点
バケットの中身をすべて削除する場合は、以下のように「–recursive」オプションを付加して実行します。
$ aws s3 rb s3://(バケット名) –recursive
(5)オブジェクトのコピー
「s3 cp」コマンドでオブジェクトをコピーできます。
次の例では、「s3 cp」コマンドを使用して、現在の作業フォルダに配置してあるファイルを「Amazon S3」の指定したバケットにコピーしています。
$ aws s3 cp (ファイル名) s3://(バケット名)
※注意点
一部のファイルを除外する場合は、以下の例のように「–exclude」オプションを付加して実行します。
$ aws s3 cp . s3://(バケット名)/(対象のフォルダ) –exclude “*.txt”
上記の例では、「対象フォルダ」配下のファイルで、「テキストファイル(*.txt)」以外のすべてのファイルが作業フォルダにコピーされます。
(6)オブジェクトの同期
「s3 sync」コマンドで、バケットとローカルPC上のディレクトリとの内容を同期することができます。
次の例では、「s3 sync」コマンドを使用して、バケット (my-bucket) 内の Amazon S3 プレフィックス (path) の内容を現在の作業ディレクトリと同期します。
$ 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
なおコマンド入力後には、同期中に実行された具体的な操作内容が画面表示されます。
※注意点
「s3 sync」は、フォルダの階層とファイル名を判断基準として、サイズや更新時間が異なるファイルを同期しています。
上記の操作例では、「MySubdirectory」とその内容を 「s3://my-bucket/path/MySubdirectory」と再帰的に同期されますが、ファイル名が同一のものが複数存在する場合には注意が必要です。
(7)ローカルPC上のログファイルをzip化して「AWS S3」上にバックアップする
最後に、ローカルPC上のログファイルをzip化し、「AWS S3」上にバックアップする方法について説明します。
以下の手順で作業を進めます。
①ローカルPC上の「ログファイル」のzip化
以下のコマンドを実行します。
$ zip log_archive -r (対象フォルダ)
adding: (対象フォルダ)/ (stored 0%)
adding: (対象フォルダ)/file1.txt (deflated 38%)
adding: (対象フォルダ)/file2.txt (stored 0%)
②ファイルの確認
次に、作成したzipファイルを確認します。
$ ls
(対象フォルダ) log_archive.zip
③zipファイル(log_archive.zip)の「AWS S3」へのアップロード
以下のコマンドを実行します。
$ aws s3 cp ./log_archive.zip s3://(アップロード先のバケット名)/(バックアップフォルダ名)
「AWS CLI」を利用して「Amazon S3」を操作するメリットとは?
「AWS CLI」を利用するメリットは、AWS上での作業をシェルスクリプト等から「繰り返し」かつ「自動化」できる点です。
具体的には、以下のようなメリットを活かした例が考えられます。
(1)(上記で紹介したような)ローカルPCに自動的に蓄積される「ログファイル」について、ZIP化しながら定期的にAWS上に保存する操作を自動化する
(2)ローカルPC上の「画像ファイル」について、「Amazon S3」にバケット(※PCでのフォルダに相当)を作成しながら特定のルールに基づいて繰り返し保存する
いずれもAWSマネジメントコンソール画面で操作可能です。しかし、特定のルール化(つまり「アルゴリズム化」)できるのであれば、「Amazon CLI」の利用を検討してみてはいかがでしょうか?]]>