【AWS】Amazon S3 ~ AWS CLIで操作 ~

■ はじめに

 * EC2からAWS コマンドラインインターフェイス (AWS CLI) により、
   Amazon S3にデータ更新、同期を行う

https://dk521123.hatenablog.com/entry/2017/03/06/212734

■ S3関連のAWS CLI

# コマンド 説明
1 aws s3 ls (s3://【S3のバケット名】) 一覧表示
2 aws s3 cp <コピー元> <コピー先> (--recursive) コピー(アップロード/ダウンロード) --recursive : ディレクトリまるっとコピー
3 aws s3 sync <同期元> <同期先> 同期

aws s3 ls s3://your-bucket

# アップロード
aws s3 cp s3://your-bucket/sample ./  --recursive

# 別の AWS アカウントのS3にアップロード
# https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-bucket-owner-access/  
aws s3 cp s3://your-bucket/sample/hello.txt s3://other-bucket/world.txt --acl bucket-owner-full-control

aws s3 sync s3://your-bucket/hello ./hello

公式サイト

 * AWS CLIについて、以下の公式サイトを参照のこと。

https://aws.amazon.com/jp/cli/

その他

その他のコマンドは以下のサイトを参照のこと 

http://www.task-notes.com/entry/20150904/1441335600

 ■ 手順

 * Hello World的なことを行ってみる

 概要

【1】 S3 バケットの作成 
【2】 IAMを設定する
【3】 EC2に最新の AWS CLIをインストールする
【4】 AWS CLI でAmazon S3にファイルをアップロード/同期させる

 前提条件

 * EC2(Amazon Linux)が作成されていること(以下の関連記事を参照のこと)

https://dk521123.hatenablog.com/entry/2017/03/06/212734

【1】 S3 バケットの作成

[1-1] [S3]-[バケット作成]を選択

AWSログイン後に [S3]-[バケット作成]を選択

[1-2] バケット名入力

以下を入力し、「作成」ボタン押下
  + バケット名:任意
 (!!注意!!「グローバルでユニーク」である文字列を入力すること)
  + リージョン:アジアパシフィック(東京)

【2】 IAMを設定する

AWS Identity and Access Management (IAM) について、以下の関連記事を参照のこと。 

https://dk521123.hatenablog.com/entry/2017/02/26/231046

[2-1] [IAM]-[ユーザー]-[ユーザーを追加]を選択

AWSログイン後に [IAM]-[ユーザー]-[ユーザーを追加]を選択

[2-2] 「次のステップ:アクセス権限」ボタン押下

「ユーザーを追加」で以下を入力すると、「次のステップ:アクセス権限」ボタン押下
 + ユーザー名:任意のユーザー名
 + アクセス種類:「プログラムによるアクセス」にチェック入れる

[2-3] IAMロールの追加

 IAMユーザー名のアクセス権限において、
「ポリシータイプ」に「AmazonS3」を入力しEnterキー押下し、
「AmazonS3FullAccess」にチェックを入れ、
「次のステップ:確認」ボタン押下

[2-4] ユーザ作成実行

「ユーザーの作成」ボタン押下

[2-5] 閉じる

 「表示」リンク押下で
「アクセスキーID」「シークレットアクセスキー」を
コピーしたりして取っておき、「閉じる」ボタン押下(後で使う)

【3】 EC2に最新の AWS CLIをインストールする

[3-1] 既存のAWS CLIをクリアにする

EC2にTera TarmなどのSSHクライアントでログインアクセスし、
以下のコマンドを入力し、既存のAWS CLIを一旦アンインストール
~~~~
sudo yum remove -y aws-cli
~~~~

[3-2] 最新AWS CLIをインストール

以下のコマンドを入力し、最新のAWS CLIをインストール
~~~~
sudo pip install awscli
~~~~

[3-3] 設定する

 「aws configure」コマンドで入力し、
手順[2-4]で表示された「アクセスキーID」「シークレットアクセスキー」
などを入力する
~~~~
aws configure

AWS Access Key ID [None]: [アクセスキーIDを入力]
AWS Secret Access Key [None]: [シークレットアクセスキーを入力]
Default region name [None]: ap-northeast-1 (東京リージョン)
Default output format [None]: [(何も入力せずに)Enterキー押下]
~~~~

【4】 AWS CLIAmazon S3にファイルをアップロード/同期を試す

[4-1] 事前準備をする

EC2にTera TarmなどのSSHクライアントでログインアクセスし、
準備として、以下のコマンドを入力
~~~~
# 作業用ディレクトリ「sample」を作成する
mkdir sample

# 作業用ディレクトリ「sample」に移動
cd sample

# S3にアップロードするファイル「hello.txt」を作成する
echo hello >> hello.txt

# hello.txtがあるか確認する
ls
~~~~

aws s3コマンドでAmazon S3を操作する

S3内のファイルを一覧表示する

# S3内のファイルを一覧表示する(はじめは何もないはず)
aws s3 ls s3://【手順[1-2]のS3のバケット名】

アップロード

# hello.txtをS3内にコピーする(アップロード)
aws s3 cp ./hello.txt s3://【手順[1-2]のS3のバケット名】

# S3内のファイルを一覧表示する(「hello.txt」が表示されるはず)
aws s3 ls s3://【手順[1-2]のS3のバケット名】

同期を試す

事前準備

# helloworld.txt、helloaws.txtを追記
echo HelloWorld > helloworld.txt
echo HelloAWS > helloaws.txt

# hello.txtに「World」を追記
echo World >> hello.txt

# hello.txtの内容を表示する
less hello.txt
------
hello
World
------

同期する

# 同期する(同期後、S3内の「hello.txt」を確認してみると「hello<改行>World」)
aws s3 sync ./ s3://【手順[1-2]のS3のバケット名】

# hello.txtを削除する
rm ./hello.txt

# 同期する
aws s3 sync --delete ./ s3://【手順[1-2]のS3のバケット名】

# S3内のファイルを一覧表示する(何もないはず)
aws s3 ls s3://【手順[1-2]のS3のバケット名】
~~~~

関連記事

Amazon S3 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/03/06/212734