Help us understand the problem. What is going on with this article?

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

 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

次に「ロールの作成」をクリック
スライド3.PNG

一般的なユースケースで「EC2」を選択
スライド4.PNG

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

スライド5.PNG

必要に応じて、タグ付け(今回はタグは設定してないです)
スライド6.PNG

ロール名を任意に設定して、「作成」
スライド7.PNG

ロールが作成できたらEC2へアタッチ
EC2のコンソール画面で対象インスタンスを選択し、「アクション」-「インスタンスの設定」ー「IAMロールの割り当て/置き換え」
S3_Qiita用.png

対象のインスタンスIDとロールを割り当てして、「適用」
S3_ロール割り当て_Qiita用.png

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

 次にデータのコピー先のS3バケット(test-20200624-folder)を作成します。
S3のコンソール画面へアクセスして、「バケットを作成する」
スライド8.PNG

 バケット名に「test-20200624-folder」とリージョン(今回はアジアパシフィック)を入力して、「次へ」
スライド9.PNG

 バケットの設定をするのですが、今回は特に設定を変えるところはないのでこのまま「次へ」
スライド10.PNG

 ブロックパブリックアクセスにチェックが入っていることを確認して「次へ」
スライド11.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コマンドでインストールする必要はないです
#コマンド実行後の 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

test.txtがコピーされていることが確認できました!
あとは「アクション」から「ダウンロード」を選択すれば、別環境へファイルのエクスポート完了です。

最後に

同じ内容の記事が各所ありますが、EC2のロールをアタッチする旨の説明がなかったりで手順通りにしてもエラーになったりしたので、備忘録および初心者の皆さんのお役に立てればと思います。

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

u-bayashi
【業種】ITインフラのベンダー 【職種】SE(セールスエンジニア&システムエンジニア) 【担当サービス】AWS、Box、Web会議システムなどの何でも屋
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした