はじめに
S3を経由してEC2から別のEC2へファイルを移動する機会がありましたので、自分の備忘録を兼ねて記載します。
※本記事は2024年10月ごろの情報を基に作成しています。
実施したいこと
「EC2_A」のファイルをS3経由して「EC2_B」にコピーします。
構成は以下のようになります
前提
・AWSアカウントがあること
・EC2、S3のリソースが既にあること
・EC2、S3の操作権限があること
・EC2にSSHで接続できると
・EC2にAWS CLIがインストールされていること
・ターミナルはTeraTarmを使用
作業内容
①EC2_AとEC2_BにS3のアクセス権限を付与(IAMロールのアタッチ)
②EC2_AらS3へアップロード
③S3からEC2_Bへダウンロード
④EC2_AとEC2_BにS3のアクセス権限を削除(IAMロールのデタッチ)
①EC2_AとEC2_BにS3のアクセス権限を付与(IAMロールのアタッチ)
EC2がS3に対して操作(アップロード/ダウンロード)するための権限をロールを作成し付与します。
本作業はEC2_AとEC2_Bに対して行います。
AWSマネジメントコンソールの検索窓で「IAM」と検索します。
左のメニューから「ロール」を選択して「ロールを作成」を押下します。
信頼されたエンティティタイプでは「AWSサービス」を選択します。
「ユースケース」では「EC2」を選択し次へを押下します。
許可ポリシーで追加したいポリシーを選択します。
※手順ではS3FullAccessを選択していますが、ポリシーを作成して追加することも可能です。
「許可を追加」を押下します。
任意のロール名を記入し、ロールの作成を押下します。
これでロールの作成は完了です。
続いて作成したロールをEC2に付与(アタッチ)を行います。
AWSマネジメントコンソールでEC2と検索します。
対象のEC2を選択し右上の「アクション」→「セキュリティ」→「IAMロールを変更」を押下します。
対象のロールを選択し「IAMロールの更新」を押下するとロールが付与されます。
EC2の詳細画面でもIAMロールが付与(アタッチ)されていることを確認できます。
これでEC2へのアクセス権限の付与作業は完了です。
続いてEC2_AからS3にファイルのアップロードを行います。
②EC2_AからS3へのアップロード
TeraTarmでSSHでEC2_Aにログインします
EC2_Aでアップロードコマンドを入力します。
aws s3 cp ローカルのファイル名 s3://バケット名/フォルダ名
以下はカレントディレクトリからTest.txtをS3のHogeFuga_bucketのTempにコピーした出力サンプルです。
※ローカルのファイルをフルパスで指定することも可能です
aws s3 cp ./Test.txt s3://HogeFuga_bucket/Temp/
upload: ./Test.txt to s3://HogeFuga_bucket/Temp/Test.txt
Test.txtがアップロードできているのが分かります。
カレントディレクトリのすべてのオブジェクトをS3のにコピーする方法は以下になります。
aws s3 cp ローカルのディレクトリ名 s3://バケット名/フォルダ名 --recursive
※--recursiveオプション:フォルダ階層を含むすべてのファイルやサブディレクトリに対してコピーコマンドを適用します。
ここではフォルダ構造をそのままS3にコピーしています。出力サンプルは以下になります。
aws s3 cp ./ s3://HogeFuga_bucket/Temp/ --recursive
upload: ./Test.txt to s3://HogeFuga_bucket/Temp/Test.txt
upload: ./Test_2.txt to s3://HogeFuga_bucket/Temp/Test_2.txt
upload: ./Test_3.txt to s3://HogeFuga_bucket/Temp/Test_3.txt
upload: ./Test_4.txt to s3://HogeFuga_bucket/Temp/Test_4.txt
upload: ./Test_5.txt to s3://HogeFuga_bucket/Temp/Test_5.txt
S3へのアップロード手順はこれで完了です。
続いてS3からEC2_Bにファイルをダウンロードするやり方ります。
③S3からEC2_Bへのダウンロード
TeraTarmでSSHでEC2_Bにログインします
EC2_Bでダウンロードコマンドを入力
aws s3 cp s3://バケット名/フォルダ名/ファイル名 ローカルのディレクトリ名
以下はTest.txtをカレントディレクトリにダウンロードしている出力サンプルです。
aws s3 cp s3://HogeFuga_bucket/Temp/Test.txt ./
download: s3://HogeFuga_bucket/Temp/Test.txt to ./Test.txt
ダウンロードができていることが分かります。
ダウンロード時にも--recursiveオプションをつけることでディレクトリ内のすべてのファイルやサブディレクトリをダウンロードすることも可能です。
すべての作業が完了したら、EC2に付与したロールを削除します。
④EC2_AとEC2_BのS3のアクセス権限を削除(IAMロールのデタッチ)
対象のEC2を選択し、右上のアクション→セキュリティ→IAMロールを変更を押下します。
IAMロールの変更画面で「IAMロールがありません」を選択し「IAMロールの更新」を押下します。
IAMロールをデタッチするか確認されますので入力フィールドに「デタッチ」と入力して
デタッチを押下するとIAMロールがデタッチされます。
EC2の詳細画面でもIAMロールがデタッチされたことを確認できます。
おわりに
使う状況はあまりないかもしれませんが、AWS環境からファイルをローカルに移す必要がないため、使いやすい手順だと思いました。