★悩み★
・POSIXコマンドでAmazon S3にあるファイルを操作できないかな。
・EC2からNFS経由でAmazon S3にあるファイルを操作できないかな。
・NFS経由でAmazon S3のファイルにrmコマンドとかはできるのかな。
こういった「悩み」に答えます。
★本記事の内容★
① AWS Storage Gatewayを使い、EC2からNFSでS3を操作する手順をご紹介
② Amazon S3へのファイル操作を検証【Storage GatewayのNFS経由】
これからご紹介する「EC2からNFSでS3を操作する手順」を実践したことで、筆者は1時間以内でEC2からNFS経由でAmazon S3のファイルを削除できました。
記事の前半では「AWS Storage Gatewayを使い、EC2からNFSでS3を操作する手順」を図を用いて解説しつつ、記事の後半では「Amazon S3へのファイル操作を検証」の結果を記載します。
この記事を読み終えることで、「EC2からNFS経由でS3のファイルを操作する手順」を把握した状態になります。
「AWSとは何か?」や「AWSの基礎的なサービスは何か?」を知りたい方は、以下の記事をご覧ください。
- AWS Storage Gatewayを使い、EC2からNFSでS3を操作する手順
- NFS経由でS3へのファイル操作コマンドを検証
- Storage GatewayのNFSでS3に「cpコマンド」を実行
- Storage GatewayのNFSでS3に「mvコマンド」を実行
- Storage GatewayのNFSでS3に「rmコマンド」を実行
- Storage GatewayのNFSでS3に「lsコマンド」を実行
- Storage GatewayのNFSでS3に「fileコマンド」を実行
- Storage GatewayのNFSでS3に「catコマンド」を実行
- Storage GatewayのNFSでS3に「headコマンド」を実行
- Storage GatewayのNFSでS3に「tailコマンド」を実行
- Storage GatewayのNFSでS3に「grepコマンド」を実行
- Storage GatewayのNFSでS3に「リダイレクト」を実行
- 【まとめ】EC2からNFSでS3のファイルを操作する手順
AWS Storage Gatewayを使い、EC2からNFSでS3を操作する手順
「AWS Storage Gatewayを使い、EC2からNFSでS3を操作する手順」に関してご紹介します。
EC2からNFS経由でAmazon S3のファイルを操作したい場合、「AWS Storage Gateway」を使います。
★AWS Storage Gatewayとは★
Storage Gatewayとは、オンプレミスなどのサーバーからAWSのクラウドストレージに接続ができるAWSサービスです。
参照:Storage Gatewayの公式ページ
AWS Storage Gatewayを使うことで、あるサーバーから(オンプレミスやEC2のサーバなど)NFS経由でAmazon S3にアクセスできます。
今回は、AWS Storage Gatewayを用いて、以下のNFS経由でAmazon S3にアクセスできる環境を作成しましょう。
★Storage Gatewayを使い、EC2からNFSでS3を操作するまでの流れ★
手順1:Amazon VPCでパブリックサブネットを作成
手順2:Amazon VPCにEC2を配備
手順3:Amazon S3にバケットを作成
手順4:AWS Storage Gatewayの作成
手順5:AWS Storage GatewayのNFSを設定
手順6:AWS Storage GatewayのNFS経由でAmazon S3へアクセス
手順7:AWS Storage GatewayのNFSを動作確認
上記の流れで、上記環境を作成できます。
上記の各手順は、以下の日時で動作確認済みです。
動作確認済み日時:2020年10月31日
以降で、上記「Storage Gatewayを使い、EC2からNFSでS3を操作するまでの流れ」の各手順に関してご説明します。
手順1:Amazon VPCでパブリックサブネットを作成
「手順1:Amazon VPCでパブリックサブネットを作成」に関してご説明します。
EC2を配備するためのパブリックサブネットをVPC管理画面から作成しましょう。
「VPCでパブリックサブネットを作成」に関しては、以下の記事をご覧ください。
以上で、「手順1:Amazon VPCでパブリックサブネットを作成」は完了です。
手順2:Amazon VPCにEC2を配備
「手順2:Amazon VPCにEC2を配備」に関してご説明します。
次に、作成したVPCにEC2のインスタンスを配備しましょう。
「EC2インスタンスの配備」に関しては、下記記事の手順6をご覧ください。
以上で、「手順2:Amazon VPCにEC2を配備」は完了です。
手順3:Amazon S3にバケットを作成
「手順3:Amazon S3にバケットを作成」に関してご説明します。
NFSでマウントしたいS3バケットを作成しましょう。
「S3にバケットを作成」に関しては、以下の記事をご覧ください。
以上で、「手順3:Amazon S3にバケットを作成」は完了です。
手順4:AWS Storage Gatewayの作成
「手順4:AWS Storage Gatewayの作成」に関してご説明します。
続いて、「AWS Storage Gateway」の作成を行います。
★AWS Storage Gatewayの作成までの流れ★
手順1:AWSマネジメントコンソールでStorage Gatewayを検索
手順2:ゲートウェイの種類を選択
手順3:ホストプラットフォームの選択
手順4:サービスエンドポイントの選択
手順5:ゲートウェイに接続
手順6:ゲートウェイのアクティブ化
手順7:ローカルディスクの構成
手順8:ログ記録を設定
上記の流れで、「AWS Storage Gatewayの作成」ができます。
上記の各手順は、以下の日時で動作確認済みです。
動作確認済み日時:2020年10月31日
以降で、上記「AWS Storage Gatewayの作成までの流れ」の各手順に関して説明します。
手順1:AWSマネジメントコンソールでStorage Gatewayを検索
AWSマネジメントコンソールでStorage Gatewayを検索する方法をご説明します。
Webブラウザで、AWSマネジメントコンソールへアクセスします。
AWSマネジメントコンソール
「サービスを検索する」直下にあるテキストボックスに「Storage Gateway」と入力します(下図の赤枠)。その後、「ハイブリッドストレージの統合」をクリックしましょう。
以上で、「手順1:AWSマネジメントコンソールでStorage Gatewayを検索」は完了です。
手順2:ゲートウェイの種類を選択
それでは、Storage Gatewayを作成しましょう。
「今すぐ始める」(下図の赤枠)をクリックします。
「ファイルゲートウェイ」(下図の赤枠)をクリックします。
その後、ページ末尾にある「次へ」をクリックします。
以上で、「手順2:ゲートウェイの種類を選択」は完了です。
手順3:ホストプラットフォームの選択
次にStorage Gatewayをホストするプラットフォームを選択します。
今回は、「Amazon EC2」(下図の赤枠)を選択しましょう。その後、「インスタンスの起動」(下図の赤枠)をクリックします。
Storage GatewayをホストするEC2の推奨スペックは「m4.xlarge」以上となります。
そのため、今回は「m4.xlarge」(下図の赤枠)を選択します。その後、ページ末尾にある「次のステップ:インスタンスの詳細の設定」をクリックします。
「ストレージの追加」画面で、「8GBのEBS」(下図の赤枠)を追加しましょう。
「セキュリティグループの設定」画面で、「HTTP」と「NFS」(下図の赤枠)を追加しましょう。その後、「確認と作成」をクリックします。
Storage GatewayをホストするEC2作成後、以下の画面に戻り「次へ」をクリックします。
以上で、「手順3:ホストプラットフォームの選択」は完了です。
手順4:サービスエンドポイントの選択
次に「サービスエンドポインの選択」をします。
エンドポイントタイプは、「パブリック」を選択します。
その後、「次へ」をクリックします。
以上で、「手順4:サービスエンドポイントの選択」は完了です。
手順5:ゲートウェイに接続
続いて、「ゲートウェイに接続」を実施します。
「手順3:ホストプラットフォームの選択」で作成したEC2の「パブリック IPv4 アドレス」をIPアドレス欄に入力します。
その後、「ゲートウェイに接続」をクリックします。
以上で、「手順5:ゲートウェイに接続」は完了です。
手順6:ゲートウェイのアクティブ化
続いて、「ゲートウェイのアクティブ化」に関して説明します。
「ゲートウェイ名」に「filegateway」を入力しましょう。
その後、「ゲートウェイのアクティブ化」ボタンをクリックします。
以上で、「手順6:ゲートウェイのアクティブ化」は完了です。
手順7:ローカルディスクの構成
次に「ローカルディスクの構成」に関してご紹介します。
ディスクID(下図の赤枠)が表示されるまで待機しましょう。
※筆者の環境では、1分ほど待ちました。
その後、「ログ記録を設定」をクリックします。
以上で、「手順7:ローカルディスクの構成」は完了です。
手順8:ログ記録を設定
次に「ログ記録を設定」に関して説明します。
今回は、「ログ記録の無効化」を選択しましょう。
その後、「保存して続行」をクリックします。
以上で、「手順8:ログ記録を設定」は完了です。
以上で、「手順4:AWS Storage Gatewayの作成」は完了です。
手順5:AWS Storage GatewayのNFSを設定
「手順5:AWS Storage GatewayのNFSを設定」に関してご説明します。
次に、Storage Gatewayの設定をします。
「ファイル共有の作成」(下図の赤枠)をクリックします。
「ステップ3:S3にバケットを作成」で作成したバケット名を「Amazon S3バケット名/プレフィックス名」(下図の赤枠)に入力します。
その後、ページ末尾にある「次へ」をクリックします。
「Amazon S3でファイルを保存する方法の設定」画面では、デフォルトのまま「次へ」をクリックします。
「確認」画面では、デフォルトのまま「ファイル共有の作成」をクリックします。
以上で、「手順5:AWS Storage GatewayのNFSを設定」は完了です。
手順6:AWS Storage GatewayのNFS経由でAmazon S3へアクセス
「手順6:AWS Storage GatewayのNFS経由でAmazon S3へアクセス」に関してご説明します。
続いて、EC2からS3バケットをNFSマウントに関してご紹介します。
「手順2:Amazon VPCにEC2を配備」で作成したEC2にSSH接続します。
その後、作成したStorage Gatewayの詳細タブに記載されているマウントコマンド(下図の赤枠)を実行します。
実行コマンドは、下記のようになります。
$ ssh -i XXXX.pem ec2-user@XX.XX.XX.XX
[ec2-user@ip-172-31-19-78 ~]$
[ec2-user@ip-172-31-19-78 ~]$ sudo mkdir /nfs_dir
[ec2-user@ip-172-31-19-78 ~]$ ls /nfs_dir/
[ec2-user@ip-172-31-19-78 ~]$
[ec2-user@ip-172-31-19-78 ~]$ sudo mount -t nfs -o nolock,hard 172.31.1.210:/website-1219 /nfs_dir/
[ec2-user@ip-172-31-19-78 ~]$ cd /nfs_dir/
[ec2-user@ip-172-31-19-78 nfs_dir]$ ls
[ec2-user@ip-172-31-19-78 nfs_dir]$ touch test_from_ec2
[ec2-user@ip-172-31-19-78 nfs_dir]$ ls
test_from_ec2
[ec2-user@ip-172-31-19-78 nfs_dir]$
以上で、「手順6:AWS Storage GatewayのNFS経由でAmazon S3へアクセス」は完了です。
手順7:AWS Storage GatewayのNFSを動作確認
「手順7:AWS Storage GatewayのNFSを動作確認」に関してご説明します。
最後に、NFSの動作確認をしましょう。
S3の管理画面を開きましょう。
S3の管理画面
S3の管理画面にて、NFSマウントしたバケットを選択しましょう。
以下のように「test_from_ec2」(下図の赤枠)が表示されていれば、正常にNFSが動作しています
以上で、「手順7:AWS Storage GatewayのNFSを動作確認」は完了です。
上記の流れで、「AWS Storage Gatewayを使い、EC2からNFSでS3を操作」できます。
NFS経由でS3へのファイル操作コマンドを検証
「NFS経由でS3へのファイル操作コマンドを検証」に関してご紹介します。
NFS経由でS3へのファイル操作を検証しましょう。
★検証するファイル操作コマンド★
・cpコマンド
・mvコマンド
・rmコマンド
・lsコマンド
・fileコマンド
・catコマンド
・headコマンド
・tailコマンド
・grepコマンド
・リダイレクト
上記のコマンドを検証していきます。
Storage GatewayのNFSでS3に「cpコマンド」を実行
Storage GatewayのNFSでS3に「cpコマンド」を実行した結果は、以下となります。
# cpコマンド(同名ファイルなし)→正常動作
[ec2-user@ip-172-31-19-78 ~]$ cd tmp/
[ec2-user@ip-172-31-19-78 tmp]$ ls
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" > test.txt
[ec2-user@ip-172-31-19-78 tmp]$ cat test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ ls /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ cp test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:17 test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
# cpコマンド(同名ファイルあり)→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ cp test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:18 test.txt
[ec2-user@ip-172-31-19-78 tmp]$
# cp -f コマンド(同名ファイルあり)→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ cp -f test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:19 test.txt
[ec2-user@ip-172-31-19-78 tmp]$
strace結果が気になる方は、以下からダウンロードをしてください。
以上が、Storage GatewayのNFSでS3に「cpコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「mvコマンド」を実行
Storage GatewayのNFSでS3に「mvコマンド」を実行した結果は、以下となります。
# mvコマンド(同名ファイルなし)→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ cat test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ mv test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:15 test.txt
[ec2-user@ip-172-31-19-78 tmp]$
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" > test.txt
[ec2-user@ip-172-31-19-78 tmp]$ ls
test.txt
# mvコマンド(同名ファイルあり)→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ mv test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
# mvコマンド(同名ファイルなし)→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:20 test.txt
[ec2-user@ip-172-31-19-78 tmp]$
[ec2-user@ip-172-31-19-78 tmp]$ ls
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" > test.txt
[ec2-user@ip-172-31-19-78 tmp]$ mv -f test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:22 test.txt
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「mvコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「rmコマンド」を実行
Storage GatewayのNFSでS3に「rmコマンド」を実行した結果は、以下となります。
# rmコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:22 test.txt
[ec2-user@ip-172-31-19-78 tmp]$ rm /nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" > test.txt
[ec2-user@ip-172-31-19-78 tmp]$ cp test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:23 test.txt
# rm -f コマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ rm -f /nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 0
[ec2-user@ip-172-31-19-78 tmp]$
[ec2-user@ip-172-31-19-78 tmp]$ mkdir /nfs_dir/a
[ec2-user@ip-172-31-19-78 tmp]$ cp test.txt /nfs_dir/a/
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/a/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:24 test.txt
# rm -rf コマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ rm -rf /nfs_dir/a/
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「rmコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「lsコマンド」を実行
Storage GatewayのNFSでS3に「lsコマンド」を実行した結果は、以下となります。
# lsコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ cp test.txt /nfs_dir/
[ec2-user@ip-172-31-19-78 tmp]$ ls /nfs_dir/
test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
# ls -l コマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ ls -l /nfs_dir/test.txt
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:25 /nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
# lsコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ ls /nfs_dir/test.txt
/nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「lsコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「fileコマンド」を実行
Storage GatewayのNFSでS3に「fileコマンド」を実行した結果は、以下となります。
[ec2-user@ip-172-31-19-78 tmp]$ ll /nfs_dir/
total 1
-rw-rw-r-- 1 ec2-user ec2-user 3 Oct 31 11:25 test.txt
# fileコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ file /nfs_dir/test.txt
/nfs_dir/test.txt: ASCII text
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「fileコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「catコマンド」を実行
Storage GatewayのNFSでS3に「catコマンド」を実行した結果は、以下となります。
# catコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ cat /nfs_dir/test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「catコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「headコマンド」を実行
Storage GatewayのNFSでS3に「headコマンド」を実行した結果は、以下となります。
# fileコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ head /nfs_dir/test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「headコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「tailコマンド」を実行
Storage GatewayのNFSでS3に「tailコマンド」を実行した結果は、以下となります。
# tailコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ tail /nfs_dir/test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「tailコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「grepコマンド」を実行
Storage GatewayのNFSでS3に「grepコマンド」を実行した結果は、以下となります。
# grepコマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ grep "OK" /nfs_dir/test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「grepコマンド」の検証結果となります。
Storage GatewayのNFSでS3に「リダイレクト」を実行
Storage GatewayのNFSでS3に「リダイレクト」を実行した結果は、以下となります。
# echo "OK" > コマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" > /nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ cat /nfs_dir/test.txt
OK
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" >> /nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ cat /nfs_dir/test.txt
OK
OK
# echo "OK" >> コマンド→正常動作
[ec2-user@ip-172-31-19-78 tmp]$ echo "OK" >> /nfs_dir/test.txt
[ec2-user@ip-172-31-19-78 tmp]$ echo $?
0
[ec2-user@ip-172-31-19-78 tmp]$ cat /nfs_dir/test.txt
OK
OK
OK
[ec2-user@ip-172-31-19-78 tmp]$
以上が、Storage GatewayのNFSでS3に「リダイレクト」の検証結果となります。
AWS Storage GatewayのNFSでS3に対して、全てのコマンドを実行した結果、全コマンド正常に終了しました。
【まとめ】EC2からNFSでS3のファイルを操作する手順
今回の記事を通して、「EC2からNFSでS3のファイルを操作する手順」をご紹介することで、以下の悩みを解消しました。
★悩み★
・POSIXコマンドでAmazon S3にあるファイルを操作できないかな。
・EC2からNFS経由でAmazon S3にあるファイルを操作できないかな。
・NFS経由でAmazon S3のファイルにrmコマンドとかはできるのかな。
「AWS Storage Gatewayとは?」と悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント