Amazon EC2(Linux)から直接S3へファイルコピー
AWS環境で何か検証している際にEC2内のデータファイルを別環境へエクスポートしたいことがあるかと思います。(私は結構ありますが皆さんどうなのでしょうね...)
EC2がWindows server OSならブラウザーが使えるのでBox等にUpするとかWebメールに添付してとか色々やりようはあると思いますがLinux OSだとどうしよう(´・ω・`)ってなります。
そこでAWS CLIを使って、EC2から直接S3にアップロードして、S3のコンソール画面から別環境にダウンロードするという方法を検証したいと思います。
実現したいこと
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にアクセスして、「ロール」をクリック
ロールに割り当てるポリシーを選択
ポリシーのフィルターにS3と入力して、表示されるポリシーの中で
今回はS3へのアクセス(アップロード、ダウンロード、閲覧)したいので[AmzzonS3FullAccess] を選択します。
ロールが作成できたらEC2へアタッチ
EC2のコンソール画面で対象インスタンスを選択し、「アクション」-「インスタンスの設定」ー「IAMロールの割り当て/置き換え」
これでEC2がS3へアクセスするロールをアタッチできました。
次にデータのコピー先のS3バケット(test-20200624-folder)を作成します。
S3のコンソール画面へアクセスして、「バケットを作成する」
バケット名に「test-20200624-folder」とリージョン(今回はアジアパシフィック)を入力して、「次へ」
バケットの設定をするのですが、今回は特に設定を変えるところはないのでこのまま「次へ」
ブロックパブリックアクセスにチェックが入っていることを確認して「次へ」
※別に今回は試験環境なので、パブリックアクセスはブロックは不要ですが、デフォルトはブロックなので。
これで「バケットの作成」まで進めてもらえれば、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コンソール画面へアクセスし、対象のバケットを確認すると
test.txtがコピーされていることが確認できました!
あとは「アクション」から「ダウンロード」を選択すれば、別環境へファイルのエクスポート完了です。
最後に
同じ内容の記事が各所ありますが、EC2のロールをアタッチする旨の説明がなかったりで手順通りにしてもエラーになったりしたので、備忘録および初心者の皆さんのお役に立てればと思います。
AWS CLIを利用してEC2からS3へデータコピーだけなく、EC2の特定のディレクトとS3バケットのフォルダを同期させたりと色々と応用ができます。
EC2にルートCA機能を持たせて、作った証明書をエクスポートしたり、検証用のログファイルの送信で利用できれば便利ですねd(`・ω・’)