【AWS】Amazon S3 ~ AWS CLI ~

■ はじめに

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

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

目次

【1】S3関連のAWS CLI
 1)サンプル
 2)公式サイト
 3)その他のコマンド
【2】ハンズオン
 1) S3 バケットの作成 
 2) IAMを設定する
 3) EC2に最新の AWS CLIをインストールする
 4) AWS CLI でAmazon S3にファイルをアップロード/同期させる
【3】あれこれ
 例1:aws s3コマンドでAmazon S3を操作する
 例2:同期を試す

【1】S3関連のAWS CLI

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

1)サンプル

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

2)公式サイト

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

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-s3-commands.html

aws s3 sync

* S3データを同期する

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/sync.html
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-sync

3)その他のコマンド

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

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

 【2】ハンズオン

 * 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
~~~~

【3】あれこれ

例1: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のバケット名】

例2:同期を試す

事前準備

# 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
S3権限周りのトラブルシュート
https://dk521123.hatenablog.com/entry/2024/01/04/000000