Amazon EC2(Amazon linux)から直接S3へのファイルコピー

# Amazon EC2(Linux)から直接S3へファイルコピー
　AWS環境で何か検証している際にEC2内のデータファイルを別環境へエクスポートしたいことがあるかと思います。（私は結構ありますが皆さんどうなのでしょうね...）
　EC2がWindows server OSならブラウザーが使えるのでBox等にUpするとかWebメールに添付してとか色々やりようはあると思いますがLinux OSだとどうしよう（´・ω・｀）ってなります。
　そこでAWS CLIを使って、EC2から直接S3にアップロードして、S3のコンソール画面から別環境にダウンロードするという方法を検証したいと思います。

# 実現したいこと
![やりたいこと.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/a7db0419-e383-2b35-3bd5-328e1497d9c8.png)

　EC2(Linux)内のデータファイルをS3へエクスポートして、S3コンソール画面からDLできるようにしたい

# 手順
　1. EC2をデプロイ
　2. EC2内にディレクトリとファイルを作成
　3. EC2にS3アップロードのためのロールをアタッチ
　4. コピー先のS3バケットを作成
　5. AWS CLIでS3へデータコピー
　
# やってみた
　まずEC2をデプロイして、SSHでログインします。そしてディレクトリを作成して、S3へコピーするテストファイルを作成します。
　※EC2のデプロイ手順は各所で色々情報が出ておりますので、ここでは割愛します

    #root にユーザ切替
    　sudo su root　
    #情報を最新にアップロードします
    　yum -y update
    #/home にディレクト(/test-share)を作成
    　cd /home
    　mkdir /test-share
    　cd /test-share
    #テストファイル(test.txt)を作成
    　touch test.txt
    #ファイルが作成されたか確認
    　ls

　これで、S3へコピーするテストファイルの準備はOKです。

　デプロイしたEC2ですが、今の状態はS3へアクセスする権限（ロール）をもっていないのでロールをアタッチする必要があります。

　ロールの作り方は
　AWS コンソール画面からIAMにアクセスして、「ロール」をクリック
　![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/8968df44-a6fd-c944-0cb7-04599d2ab242.png)

次に「ロールの作成」をクリック
![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/bb4b2bf3-c226-f7a2-f8dc-30b5f76a84ca.png)

一般的なユースケースで「EC2」を選択
![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/b2eda0bb-1393-7667-d55f-8534eac177de.png)

ロールに割り当てるポリシーを選択
ポリシーのフィルターにS3と入力して、表示されるポリシーの中で
今回はS3へのアクセス（アップロード、ダウンロード、閲覧）したいので[AmzzonS3FullAccess] を選択します。

![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/d9ed87d8-3989-feb9-1481-4099db18724f.png)

必要に応じて、タグ付け（今回はタグは設定してないです）
![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/d4b737fa-0452-d6de-4640-ca610d4719a3.png)

ロール名を任意に設定して、「作成」
![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/496ee7cc-de6a-3d3d-7050-30c55483b534.png)


ロールが作成できたらEC2へアタッチ
EC2のコンソール画面で対象インスタンスを選択し、「アクション」－「インスタンスの設定」ー「IAMロールの割り当て／置き換え」
![S3_Qiita用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/082e928d-5bbe-35a7-7954-ceb11deff019.png)

対象のインスタンスIDとロールを割り当てして、「適用」
![S3_ロール割り当て_Qiita用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/b8f7010f-e756-5777-e4ab-9801d54f46f6.png)

　これでEC2がS3へアクセスするロールをアタッチできました。




　次にデータのコピー先のS3バケット（test-20200624-folder）を作成します。
S3のコンソール画面へアクセスして、「バケットを作成する」
![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/c8a0c293-af1d-10a4-2d67-a6919b10dd87.png)

　バケット名に「test-20200624-folder」とリージョン（今回はアジアパシフィック）を入力して、「次へ」
![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/92a0e451-5e37-9632-6dd8-4bd20e3eaaee.png)

　バケットの設定をするのですが、今回は特に設定を変えるところはないのでこのまま「次へ」
![スライド10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/aa755565-9d6d-f882-ce8a-cd92b1fa8eed.png)

　ブロックパブリックアクセスにチェックが入っていることを確認して「次へ」
![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/55b0a926-9830-94af-904e-f3ae435ec8d7.png)

　※別に今回は試験環境なので、パブリックアクセスはブロックは不要ですが、デフォルトはブロックなので。
　
これで「バケットの作成」まで進めてもらえれば、S3側の準備もOKです。


　ロールをアタッチできたら、AWS CLIでS3へデータコピーするコマンドを入力します。

    #再度EC2へSSHでログインして、root に切替えます
    　sudo su root
    #テストファイルがあるディレクトリまで移動
    　cd /home /test-share
    #aws cli でS3へデータコピー
    　aws s3 cp ./test.txt s3://test-20200624-folder
    ※EC2にはaws cliが標準でインストールされているので、yumコマンドでインストールする必要はないです
    ※ローカルフォルダのパス「/test.txt s3」の前に"."を入れるのをお忘れなく。

    #コマンド実行後にupload: ./test.txt to s3://test-0624-folder/test.txt と表示されればOKです
    #S3にデータがあるかを確認
    aws s3 ls s3://test-20200624-folder
    #2020-06-24 06:59:35          0 test.txt のように表示ささればOKです



最後にS3コンソール画面から「test.txt」をDLできるか確認していきます。
S3コンソール画面へアクセスし、対象のバケットを確認すると
![S3_コンソールQiita用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/41edf949-8d68-37f3-5f25-1d96fe93821a.png)

test.txtがコピーされていることが確認できました！
あとは「アクション」から「ダウンロード」を選択すれば、別環境へファイルのエクスポート完了です。
# 最後に
同じ内容の記事が各所ありますが、EC2のロールをアタッチする旨の説明がなかったりで手順通りにしてもエラーになったりしたので、備忘録および初心者の皆さんのお役に立てればと思います。

AWS CLIを利用してEC2からS3へデータコピーだけなく、EC2の特定のディレクトとS3バケットのフォルダを同期させたりと色々と応用ができます。
EC2にルートCA機能を持たせて、作った証明書をエクスポートしたり、検証用のログファイルの送信で利用できれば便利ですねd(`・ω・’)