
AWSのEC2とS3を組み合わせて構築・運用する手順を解説!
目次
はじめに
AWSには実に多くのサービスが存在し、それが魅力であると同時にユーザーに選択を迷わせる部分でもあります。そしてAWSのサービスを利用して開発等を行う際は、これらのサービスを単体で利用するケースは稀で、複数のサービスを組み合わせて使うことになります。
この記事では、代表的なAWSのサービスの組み合わせとして、仮想サーバーサービスのEC2にオンラインストレージサービスのS3をマウントして、ファイルサーバーとして使用するケースについて、その手順を説明していきます。
AWSのストレージサービス
本題に入る前に、AWSが提供している主なストレージサービスについて簡単にご紹介します。AWSのストレージサービスは、オブジェクトストレージのS3、ファイルストレージのEFSやFSx、ブロックストレージのEBSに大別されます。
オブジェクトストレージとは、データを「オブジェクト」と呼ばれる可変長単位で記録するストレージ方式で、非常に高い可用性と耐久性を持つ一方、データの反映に一定のタイムラグが生じるといった特徴があります。
ファイルストレージとは、データを「ファイル」と呼ばれる可変長単位で記録するストレージ方式です。ディレクトリ構造という管理方式を採用しており、複数のEC2インスタンスから同時アクセスが可能で、大規模なコンテンツリポジトリなどにマッチします。
ブロックストレージとは、データを「ブロック」と呼ばれる固定長単位で記録するストレージ方式で、EC2に直接アタッチして活用され、低レイテンシーが求められるケースに最適です。
S3とは?
Amazon S3は、AWSが提供するオブジェクトストレージ形式のストレージサービスで、データ容量が無制限であり、ほぼデータの損失が起こらないという特性からバックアップや大容量のアーカイブに向いています。
実を言うと、S3はデータの管理単位がファイル単位ではないため、それ単体では仮想サーバーにマウントし、ファイルサーバーとして利用することはできません。ファイルサーバーとして構築するのであれば、ファイルストレージのEFSなどの方が適しているのです。
では何故S3をファイルサーバーとして構築するのかというと、S3の特長である高い可用性と耐久性が、バックエンドのファイルサーバーに適しているからです。
EC2からS3への接続
ここからは、EC2にS3をマウントしてファイルサーバーとして活用する手順をご説明します。
S3をEC2のファイルサーバーとして利用するには?
前のセクションでも触れましたが、S3は直接EC2にマウントしてファイルサーバーとして使用することはできません。
S3をEC2のファイルサーバーとして利用するには、AWS Storage Gatewayというサービスを使います。AWS Storage Gatewayとは、オンプレミス環境からAWSのクラウドストレージへのアクセスを可能とするサービスです。
それでは、実際にAWS Storage Gatewayを経由して、EC2にS3をマウントする手順を見ていきましょう。
VPCの作成
まずは、仮想ネットワークのVPCの作成・設定について説明していきます。
VPCを作成する
VPCを作成するため、Amazon VPCコンソールを開きます。
左のメニューバーより[VPC]をクリックし、[VPCを作成]をクリックします。
[名前タグ]に任意のVPC名を入力し、[IPv4 CIDR ブロック]に作成するIPv4アドレスの範囲を設定して[VPCを作成]をクリックします。サブネットを作成する
VPCに新たにサブネットを作成します。
Amazon VPCコンソールの左メニューバーより[サブネット]をクリックし、「サブネットを作成]をクリックします。
まず、[VPC ID]から先ほど作成したVPC IDを選択します。
[サブネット名]に任意のサブネット名を入力し、[アベイラビリティーゾーン]でサブネットが属するゾーンもしくは「指定なし」を選択します。[IPv4 CIDR ブロック]に範囲内のIPv4 CIDRブロックを指定します。最後に「サブネットを作成」をクリックします。インターネットゲートウェイの作成
インターネットゲートウェイを作成し、VPCにアタッチします。
Amazon VPCコンソールの左メニューバーより[インターネットゲートウェイ]を選択し、[インターネットゲートウェイの作成]をクリックします。
[名前タグ]に任意のゲートウェイ名を入力し、[インターネットゲートウェイの作成]をクリックします。インターネットゲートウェイ一覧画面に遷移するので、右上に表示される[VPCにアタッチ]をクリックします。[使用可能なVPC]から、今回作成したVPC IDを選択して[インターネットゲートウェイのアタッチ]をクリックすれば完了です。
ルートテーブルの作成
サブネットからのネットワークトラフィックの経路を判断するため、ルートテーブルを作成します。
Amazon VPCコンソールの左メニューバーより[ルートテーブル]を選択し、[ルートテーブルの作成]をクリックします。
[名前タグ]に任意のルートテーブル名を入力し、[VPC]から今回作成したVPC IDを選択して[作成]をクリックします。作成完了画面で[閉じる]をクリックすると、ルートテーブル一覧画面に遷移します。一覧画面で作成したルートテーブルにチェックを入れて、[アクション]から「ルートの編集」を選択し、編集画面で[ルートの追加]をクリックします。
[送信先]にCIDRブロックを入力し(デフォルトの「0.0.0.0/0」で構いません)、[ターゲット]から作成したインターネットゲートウェイIDを選択して、[ルートの保存]を選択します。一覧画面に戻るので、[アクション]から「サブネットの関連付けの編集」を選択し、[関連付けられたサブネット]から関連付けるサブネットにチェックを入れて[保存]をクリックします。
セキュリティグループの作成
セキュリティグループを作成し、インスタンスに到達するインバウンドトラフィックを制御します。
Amazon VPCコンソールの左メニューバーより[セキュリティグループ]を選択し、「セキュリティグループを作成]をクリックします。
[セキュリティグループ名]に任意の名前を入力し、[VPC]から今回作成したVPC IDを選択します。[インバウンドルールを追加]をクリックし、[タイプ]から[SSH]を選択、[ソース]からカスタムの[0.0.0.0/0]を選択して、[セキュリティグループを作成]をクリックします。作成後、セキュリティグループ詳細画面に遷移するので、[インバウンドルールを編集]をクリックします。
[タイプ]から[RDP」を選択、[ソース]から作成したセキュリティグループIDを選択してRDP(リモートデスクトッププロトコル)のポートを開放します。S3バケットの作成
このセクションでは、S3における管理単位オブジェクトを格納しておくための入れ物である、バケットを作成します。
Amazon S3コンソールを開き、[バケットを作成する]をクリックします。
[名前とリージョン]セクションでは、[バケット名]に任意の名前を入力し、[リージョン]は接続するEC2インスタンスがあるリージョンを選択します。 [オプションの設定]セクションは、デフォルトのままで次へ進みます。 [アクセス許可の設定]セクションでは、デフォルトで[パブリックアクセスをすべてブロック]にチェックが入っているので(入っていない場合はチェックして)、そのまま次へ進みます。 [確認]セクションで、[パケットを作成]をクリックして完了です。AWS Storage Gatewayのセットアップ
AWS Storage Gatewayには、ファイルベース、ボリュームベース、テープベースの3つのストレージソリューションがありますが、今回はファイルサーバーとして使用するのでファイルベースを選択します。
ファイルストレージの作成
AWS Storage Gatewayコンソールより、コンソールを作成するAWSリージョンを選択して、[今すぐ始める]をクリックします。
[ゲートウェイの種類を選択] から「ファイルゲートウェイ」 を選択して[次へ] をクリックします。[ホストプラットフォームの選択]から「Amazon EC2」を選択して[インスタンスを起動]をクリックします。 [ステップ 2: インスタンスタイプの選択]で、AWS Storage Gatewayが正しく機能する最小要件を満たしている「m4.xlarge」を選択して、[次のステップ: インスタンスの詳細の設定]をクリックします。 [ステップ 3: インスタンスの詳細の設定]で、[ネットワーク]から作成したVPC ID、[サブネット]から作成したサブネット名、[自動割り当てパブリックIP]から「有効」をそれぞれ選択して、[次のステップ: ストレージの追加]をクリックします。 [ステップ 4: ストレージの追加]で、[新しいボリュームの追加]をクリックして、[サイズ]にはファイルゲートウェイの推奨サイズである「150」を入力して、[次のステップ: タグの追加]をクリックします。 [ステップ 5: タグの追加]で、[キー]に任意の名前、[キー]にEC2インスタンスの名前を入力して、[次のステップ: セキュリティグループの設定]をクリックします。 [ステップ 6: セキュリティグループの設定]で、「新しいセキュリティグループを作成する」を選択して、[タイプ]が「HTTP」、[ソース]が「マイIP」のものと、[タイプ]が「NFS」、[ソース]が「任意の場所」のものを作成して、「確認と作成」をクリックします。 [ステップ 7: インスタンス作成の確認]で、設定内容を確認して[起動]をクリックするとダイアログポップアップが表示されるので、「新しいキーペアの作成」を選択して[キーペア名]に任意の名前を入力したら、[キーペアのダウンロード]をクリックします。プライベートキーファイルのダウンロード終了後、[インスタンスの作成]をクリックします。作成までは少し時間を要し、インスタンス一覧画面で[ステータスチェック]欄が「2/2のチェックに合格しました」に変われば完了です。
サービスエンドポイントの選択
ゲートウェイがパブリックインターネット経由でAWSストレージと通信できるようにするため、サービスエンドポイントを設定します。
ゲートウェイの作成画面に戻り、[次へ]をクリックすると[サービスエンドポイント]画面に遷移するので、[エンドポイントタイプ]から「パブリック」を選択し[次へ]をクリックします。
[IPアドレス]に、今回作成したEC2インスタンスのパブリックIPアドレスを入力して、[ゲートウェイに接続]をクリックします。因みに、EC2インスタンスのIPアドレスは、EC2インスタンス一覧画面で該当インスタンスを選択すると[説明]タブに表示されます。 [ゲートウェイのアクティブ化]画面で、[ゲートウェイのタイムゾーン]から「GMT +9:00 東京、ソウル」を選択、[ゲートウェイ名]に任意の名称を入力します。 [タグの追加]セクションで、[キー]に任意の名前、[値]にゲートウェイ名を入力して、[ゲートウェイのアクティブ化]をクリックします。 [ローカルディスクの構成]画面に遷移するので、「ローカルディスクを準備中」という表示が[ディスクID]、[容量]、[割り当て済み]の表示に変わったら、[ログ記録を設定]をクリックします。 [ゲートウェイのヘルスロググループ]画面は、何も変更せずに[保存して続行]をクリックすると、「次のステップはファイル共有の作成です。」と表示されるので、これをクリックしてファイル共有のステップへと進みます。ファイル共有の作成
ファイル共有プロトコルは、Unix系のNFSとWindows系のSMBの2種類ありますが、今回はNFSのケースでご説明します。
[ファイル共有の作成]セクションで、[Amazon S3バケット名]に先ほど作成したS3パケットの名前を入力し、[オブジェクトへのアクセス(次を使用)]で「ネットワークファイルシステム(NFS)」を選択して、[次へ]をクリックします。 [ストレージ]セクションで、[新しいオブジェクトのストレージクラス]からデフォルトの「S3 Intelligent-Tiering」もしくは「S3スタンダード」を選択して、[次へ]をクリックします。 [確認]セクションで、設定内容を確認して[ファイル共有の作成]をクリックすると、[ファイル共有一覧]画面に遷移するので、作成したファイル共有のステータスが「利用可能」になれば完了です。EC2インスタンスの作成
ファイルサーバーのS3を接続するEC2インスタンスを作成します。Amazon EC2コンソールを開いて、[インスタンスの起動]をクリックします。
[ステップ 1: Amazon マシンイメージ(AMI)]で、「Amazon Linux 2 AMI(HVM), SSD Volume Type」を選択します。 [ステップ 2: インスタンスタイプの選択]で、「m5.large」を選択して[次のステップ: インスタンスの詳細の設定]をクリックします。 [ステップ 3: インスタンスの詳細の設定]で、[ネットワーク]から作成したVPC ID、[サブネット]から作成したサブネット名、[自動割り当てパブリックIP]から「有効」を選択して、[次のステップ:ストレージの追加]をクリックします。 [ステップ 4: ストレージの追加]では何も変更せず[次のステップ: タグの追加]をクリックし、[ステップ 5: タグの追加]で[キー]に任意の名前、[値]にEC2インスタンスの名称を入力して、[次のステップ: セキュリティグループの設定]をクリックします。 [ステップ 6: セキュリティグループの設定]で、一覧から作成したセキュリティグループ名を選択して、[確認と作成]をクリックします。 [ステップ 7: インスタンス作成の確認]で、設定内容を確認して[起動]をクリックします。ダイアログポップアップが表示されるので、「既存のキーペア」と先ほど作成したキーペアを選択して、[インスタンスの作成]をクリックします。インスタンス一覧画面で、作成したインスタンスのステータスが「2/2のチェックに合格しました」になれば完了です。
S3のマウント
EC2インスタンスにNFSファイル共有をマウントし、S3バケットをマッピングします。
先ほど作成したEC2インスタンスにSSH接続し、ホームディレクトリ上にマウント用のディレクトリを作成します。
1
|
mkdir 【任意のディレクトリ名】
|
「mount」コマンドで、S3バケットにマウントします。
1
|
sudo mount -t nfs -o nolock,hard 【VMのIPアドレス】:/【S3バケット名】 【マウント用ディレクトリのパス】
|
共有化のテストとして、マウント用ディレクトリに「touch」コマンドでテストファイルを作成します。
1
|
touch 【マウント用ディレクトリのパス】/【テストファイル名】
|
S3バケットの中にテストファイルが保存されていれば成功です。なお、反映には1分程度のタイムラグがあります。
まとめ
今回は、ファイルサーバーとして構成したAmazon S3を、AWS Storage Gatewayを介してEC2インスタンスにマウントする手順について解説しました。
Amazon S3は、ファイルの反映にタイムラグが生じることからも分かるように、Amazon EFSなど他のAWSのストレージサービスに比べてパフォーマンスが低く、ファイルサーバーとしてのベストチョイスとは言い切れない面はあります。
ただ、拡張性や耐久性に優れ、利用コストも格段に低く抑えられるというメリットも大きいため、パフォーマンスよりコスト面を重視する場合は、Amazon S3の利用を検討してみては如何でしょうか。