【AWSコマンドライン】S3でフォルダ単位・複数ファイルダウンロード方法を紹介

AWS

本記事では、AWS コマンドラインについて解説します。

AWSコマンドラインを使うと、Amazon Web Service(以下AWS)の、Amazon Simple Storage Service(以下S3)で、

  • フォルダ単位でのファイルダウンロード
  • 複数ファイルを一括ダウンロード

このような操作が可能となります。今回は、AWS コマンドラインインターフェースのインストール方法と利用方法を紹介します。

はじめに

S3はAWS Management Console(WEB上での操作)からGUI操作が可能です。しかし、バケットフォルダや複数ファイルに対して一括ダウンロードができません。扱うファイルやフォルダが少ない場合は影響が少ないですが、扱うデータ等が増えると影響が大きいです。

解決方法として、AWS コマンドラインインターフェースを利用する方法があります。

このツールを利用することにより、S3バケット上のフォルダまたは複数ファイルをまとめてダウンロードすることができます。
本記事では、AWS コマンドラインインターフェースの導入方法と実際の操作方法を画像を交えて紹介します。

AWS全体についての解説や、S3についての詳細につきましては、以下のページを参照ください。

AWS コマンドラインインターフェース(AWS CLI)とは何か

AWS コマンドラインインターフェース(以下、AWS CLI)は、AWSの各種サービスの管理を行うための統合ツールとなっており、コマンドラインからAWSを操作することができます。

つまり、AWS CLIを使うことで、AWS Management Console(WEB上での操作)から行っていたさまざまな操作をCLIで行うことができるようになるということです。Windowsの場合はコマンドプロンプトかPowerShell、LinuxとMacOSの場合はbash、zsh、tcshなどのコマンドシェルで動作します。

これは、本記事で紹介するS3に対してだけでなく、それ以外の操作も行うことが可能です。

操作可能な範囲として、AWS Management ConsoleのすべてのIaaS(サービスとしてのインフラストラクチャ)AWS管理、管理、およびアクセス機能とあります(参考)。

AWS CLIインストーラのダウンロード

AWS CLI公式サイトに移動し、画面右側にある任意のインストーラをダウンロードします。

インストール

Windowsでのインストールを紹介します。

Windowsの場合は、「AWSCLIV2.msi」がダウンロードされますので、ダウンロード後にインストーラを起動します。

起動すると、以下の画面になるのでNextボタンをクリックして進めます。

規約を確認し、問題なければチェックをしたあとNextをクリックします。

インストールする内容を選択し、また、インストール先を選択して、Nextボタンをクリックします。

これまで設定した内容に問題なければInstallボタンをクリックします。

インストールが始まります。

インストールが終了したら、Finishボタンをクリックします。

インストール後、コンソール(コマンドプロンプト)を開き「aws」コマンドを入力し、ヘルプが出れば、インストールは完了です。

AWS側での設定

AWS CLIで操作を行うためには、AWS側のIAMでAWS CLI用のユーザアカウントを作成して、許可を行う必要があります。

IAMについては以下の記事を参照ください。

IAM設定

今回の設定は、ユーザーガイドから行います。

IAM設定にアクセスします。

IAMダッシュボードを開く

IAMを操作可能なユーザ情報を選択し、情報を入力しサインインします。

サインインすると同時にIAMの画面になります。

上記手順のほかに、AWSコンソールからログインすることも可能です。

ログイン後に、左上のサービス→セキュリティ、ID、およびコンプライアンス→IAMをクリックすると、同じ画面に遷移します。

ユーザーの追加

アクセス管理の「ユーザ」をクリックします。

画面右上の「ユーザを追加」ボタンをクリックします。

任意のユーザ名を入力し、「次へ」ボタンをクリックします。

※サーチコンソール(今操作している画面)の操作が不要な場合は、「AWSマネジメントコンソールへのユーザアクセスを提供する」はチェックしなくてよいです。
今回はAWS CLI専用のユーザを作りたいので、チェックをつけずに進めます。

ユーザーの詳細を指定

今回はAWS CLIのみが触れる新しいグループを作るようにするため、「ユーザをグループに追加」を選択し、「新規作成」ボタンをクリックします。
※既存グループに所属させたり既存ユーザからポリシーなどをコピーしたり、直接ポリシーを設定したい場合は、「許可のコピー」や「ポリシーを直接アタッチする」を選択することでできます。
ユーザーグループやポリシーを選択後に、「次へ」ボタンをクリックします。

許可を設定

「新規作成」ボタンをクリックすると、「ユーザーグループ名」と「許可ポリシー」を入力して、「ユーザーグループを作成」ボタンをクリックします。
※今回はS3の操作をしたいので、AmazonS3FullAccessを許可します。本来はフルアクセスではなく、本当に与えたいポリシー以外は与えないようにします。

ユーザーグループを作成

タグを追加したい場合は、「新しいタグを追加する」を選択し、ほかに設定した内容に問題なければ、「作成」ボタンをクリックします。

作成したユーザーに対してAWS CLIを許可する

設定が完了したら、「アクセス管理」から「ユーザ」を選択し、AWS CLIを許可したいユーザ名を選択します。

「セキュリティ認証情報」をクリックします。

画面をスクロールし、「アクセスキー」項目から「アクセスキーを作成」をクリックします。

主要なベストプラクティスと代替案にアクセスするの項目のうち、「コマンドラインインターフェイス(CLI)」を選択すると、下のほうに「上記のレコメンテーションを理解し、アクセスキーを作成します。」を選択します。

説明タグ欄に必要であれば内容を記載して、「アクセスキーを作成」ボタンをクリックします。

アクセスキーが作成されます。書いてあるように、画面を遷移するとキーを確認やダウンロードする機会が失われてしまいます。
アクセスキーやシークレットアクセスキーを自分で控えるのは大変なので、「.csvファイルをダウンロード」ボタンをクリックしてダウンロードした後に、「完了」ボタンをクリックします。

これで、AWS CLI用のユーザアカウントは完了です。

AWS CLIで認証情報を設定する

コンソール(コマンドプロンプト)を起動し、以下のコマンドを入力します。

aws configure --profile プロファイル名

入力すると、以下の内容を順番に聞かれますので入力します。

AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

AWS Access Key IDとAWS Secret Access Keyは先ほどダウンロードしたCSVの内容を入力します。
Default region Nameはデフォルトでリクエストを送信するサーバのリージョンを指定します。
基本は最寄りのリージョンなので、日本であれば以下のいずれかを指定すれば良いかと思います。

リージョンコード
東京ap-northeast-1
大阪ap-northeast-3


Default output formatは結果の出力形式を指定します。
json、yaml、YAMLストリーム出力形式、text、tableが選択でき、指定しなければjsonが指定されます。

aws configureと入力でも認証情報が作れますが、プロファイル名がDefaultとなります。

今回のようにプロファイル名をあらかじめ設定していると、CLIコマンドを入力時にプロファイル名を指定することで、そのプロファイルとして機能させることができます。

認証情報と設定ファイルの保存先

acOSやLinuxの場合は、「~/.aws/」、Windowsの場合は、「C:\Users\USERNAME.aws\」にあるcredentialまたはconfigファイルです。
設定を消したい場合は、上記の設定ファイルを消せばOKです。また、CLIでの対話形式ではなく、直接編集することも可能です。

CLIでのアクセスを確認

実際に設定した認証情報と設定ファイルを使ってアクセスしてみます。

アクセスに成功している例


今回設定したユーザでは、ロールをs3のアクセスのみ与えているので、以下のコマンドを入力し、情報が帰ってくればOKです。

aws s3 ls --profile 設定プロファイル名

アクセスに失敗している例

例えば、ロール設定されていないものに対しても確認してみます。

EC2のリストを表示する以下のコマンドを入力します。

aws ec2 describe-instances --profile 設定プロファイル名

実行すると、

An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.

と権限がないと言われてしまいました。
上記のように権限がないといわれてしまった場合は、操作したいコマンドに対する指定プロファイルについて、IAMロールが正しく設定されているか確認しましょう。

AWS CLIを用いたS3バケット操作あれこれ

ダウンロード

ファイル単体

以下のコマンドを入力します。

aws s3 cp --profile プロファイル名 s3://バケット名/フォルダ名/ファイル名 ローカルの保存先

フォルダごと

先ほどのコマンドの最後に「–recursive」をつけて行うと、一斉にダウンロードされます。
フォルダ名の後ろに/をつけてもつけなくてもOKです。

aws s3 cp --profile プロファイル名 s3://バケット名/フォルダ名 ローカルの保存先 --recursive

アップロード

ファイル単体

以下のコマンドを入力します。アップロード先の最後に/をつけないとそのフォルダにアップロードされないので注意してください。

aws s3 cp --profile プロファイル名 アップロードしたいファイルパス s3://バケット名/フォルダ名/

フォルダごと

先ほどのコマンドの最後に「–recursive」をつけて行うと、一斉にアップロードされます。アップロード先の最後に/をつけないとそのフォルダにアップロードされないので注意してください。

aws s3 cp --profile プロファイル名 アップロードしたいファイルパス s3://バケット名/フォルダ名/ --recursive

フォルダ指定時の注意点

S3のフォルダ名は、実際に置きたいフォルダを指定する必要があります。
例えば、S3にhogeフォルダがあり、ローカルのfugaファイルをs3にhoge/fugaとしてアップロードしたい場合、

aws s3 cp --profile プロファイル名 hoge s3:hoge/

としてしまいそうですが、これでは、hogeの直下にfugaの中身がアップロードされてしまいます。

指定したことをやりたい場合は、

aws s3 cp --profile プロファイル名 hoge s3:hoge/fuga/

と指定する必要があります。

データ移動

これまでの紹介ではデータをコピーする前提だったので、以下のコマンドを入力していました。

aws s3 cp ~

データを移動したい場合、以下のコマンドで行えます。

aws s3 mv ~

例えばS3バケットからS3バケットへ移動する場合は以下のコマンドを入力することで可能です。

aws s3 mv --profile プロファイル名 s3://バケット名/ファイル名/移動先 s3://バケット名/ファイル名/移動元

まとめ

AWS CLIの概要および、インストール方法、実際にAWS CLIを用いてS3に対して複数ファイルやフォルダの操作を行う方法を紹介しました。

AWS CLIを用いて、S3以外のサービスに対しての操作方法についても今後更新できたらと思います。

コメント

タイトルとURLをコピーしました