【AWS入門】AWSでWordPressの環境構築をしてみる_ネットワーク構築編②

前回の記事

この記事は、前回の記事の続きです。

【AWS入門】AWSでWordPressの環境構築をしてみる_サーバー構築編

記事の構成

  1. ネットワーク構築編①(パブリックサブネットの構築とインターネットゲートウェイの設定まで)
  2. サーバー構築編(EC2インスタンスの作成とSSHでの接続、apacheのインストールと公開設定まで)
  3. ネットワーク構築編②(プライベートサブネットの構築とNATゲートウェイの設定、接続まで)
  4. 完成編(mariaDBのインストールとWordpressのインストール、公開設定まで)

今回は「ネットワーク構築編②(プライベートサブネットの構築とNATゲートウェイの設定、接続まで)」を取り上げます。

今回の構築完成図

前回まではパブリックサブネットにサーバーを構築してインターネットからつなげるところまで構築しました。

今回はデータベース用のサーバーを用意するためにプライベートサブネットを作成して、EC2をサブネットの中に置いていきます。

そしてプライベートサブネットはインターネットからは入れないようにしつつ、サーバー側からはインターネットに接続できるような仕組みを作ります。

なぜなら、プライベートサブネットにはデータベースを起きたいのですが、オープンソースのデータベースをインストールするにはインターネットに接続できないとインストールができないですよね。

そのために、NATゲートウェイというツールを使って構築していきます。

前提知識編

プライベートサブネットについて

プライベートサブネットというのは、インターネットから接続できないサブネットであると前々回の記事で紹介いたしました。

インターネットから接続できないようにすることでセキュリティを高めることができ、データベース等の見られたくない情報をおくことができます。

作り方は、パブリックサブネットと同じなので、要は使い方が違うだけだと認識いただければ大丈夫です。

Network Address Translation(NAT)について

NATについて改めて見ていきましょう。

NATの用途としては、プライベートサブネットのようなインターネットからはアクセスできないようにしたいけど、サーバーからはインターネットにアクセスできるようにしたいというニーズが有るときに使います。

仕組みとしては、IPアドレスを置換しているだけで、NATがパブリックIPアドレスとプライベートIPアドレスの両方を保持しています。

プライベートサブネットからNATにアクセスし、NATはそれを読み取り、NATのパブリックIPアドレスを使ってインターネットにアクセスします。

インターネット側はNATがアクセスしてきたという認識をもち、NATに返送します。NATはそれを受け取り、プライベートサブネットに置換して返すといったような仕組みです。

AWSではこのNATの仕組みを「NATゲートウェイ」というツールを使って設定していきます。

それでは実際に構築していきましょう。

実践編

プライベートサブネットの作成

①VPCに入っていただき、「サブネット」を選択し、「サブネットを作成」をクリックします。

②VPCは前回作成した「test-vpc」を選択し、サブネット名は「test-privatesubnet」としましょう。AZは「1a」とし、CIDRブロックは「10.0.2.0/24」で作成します。すべて記載できたら「サブネットを作成」をクリックします。

EC2インスタンスの作成

続けてインスタンスの作成も行ってしまいましょう。

①前回同様EC2からインスタンスの作成をクリックして、同じ設定をしていきます。インスタンスの設定画面でネットワークは「test-vpc」を選択し、サブネットは「test-privatesubnet」を選択します。そして、パブリックIPアドレスは不要なので「無効化」を選択します。プライベートIPアドレスは「10.0.2.10」としました。

②タグの画面で「db-server」という名前で作成します。またセキュリティグループ名は「db-server-sg」とし、ルールの追加でタイプを「MySQL/Aurora」、ポート範囲を「3306」、ソースを「任意の場所」で追加します。これは次章で入れるDBからアクセスできるようにするためです。

あとはデフォルトで作成します。以下のようにパブリックIPアドレスなしで作成されます。

これでプライベートサブネットを作成し、その中にEC2インスタンスをいれることができました。

プライベートサブネットにSSH接続する

ただ一つ疑問点が出るかと思います。このプライベートサブネットにどう入ればいいのだろうと。。。

今まではSSH接続でパブリックIPアドレスを使って入ってましたよね?これがないってことははいれないのではないのかと。

パブリックサブネットと違って直接はいることはできないので、一回パブリックサブネットに入ってから、そこからさらにプライベートサブネットにSSHで接続するという方法ではいることができます。(この入り方を踏み台サーバーといいいます)

実際に入ってみましょう。

①まずローカルに保存してあるSSHキーファイルをパブリックサブネットのサーバーに送ります。

cd ~/.ssh
scp -i test-aws-wp.pem test-aws-wp.pem ec2-user@パブリックIPアドレス:~/

②sshでパブリックサーバーに入り、pemファイルが送られてきているか確認します。

ssh -i ~/.ssh/test-aws-wp.pem ec2-user@パブリックIPアドレス

③test-aws-wp.pemファイルの権限を変更し、先程作成した「db-server」のプライベートIPアドレスでssh接続します。

chmod 400 test-aws-wp.pem
ssh -i test-aws-wp.pem ec2-user@db-serverのプライベートIPアドレス

これで「db-server」のインスタンスにはいることができました。

NATゲートウェイの構築

それでは、NATゲートウェイを構築して「db-server」インスタンスからインターネットに接続できるように設定していきます。

①VPCへ移動していただき、「NATゲートウェイ」を選択し、「NATゲートウェイを作成」をクリックします。

②名前を「test-ngw」とし、サブネットは「test-publicsubnet」を選択します。NATはインターネットに接続できるパブリックサブネット上に置きます。

IPアドレスを固定するために「Elastic IPアドレスの割り当て」をクリックして、IPアドレスを割り当てます。

すべて記載できたら「NATゲートウェイを作成」をクリックします。

③VPCのデフォルトルートテーブルにNATゲートウェイを割り当てます。「ルートテーブル」を選択し、デフォルトで作成されているルートテーブルをチェックします。「ルート」タブの「ルートを編集」をクリックします。

④「ルートの追加」をクリックし、送信先を「0.0.0.0/0」のフルオープン指定で、ターゲットを先程作成したNATを選択し、「変更を保存」をクリックします。

以上で「db-server」インスタンスからインターネットに接続できるようになりました。

アクセス確認

最後に、ちゃんとインターネットにアクセスできるかサーバーに入って確認してみましょう。

「db-server」インスタンスに入っていただき、以下のコマンドでインターネットにアクセスできるか確認してみましょう。

curl https://marketingengineercareer.com/

以下のようにHTMLテキストが帰ってきたら問題なくアクセスできています。

~
データマート
 データレイク
 データ整備人
 データ設計
 個人開発
 前向きデータ整備人
 広告
 書籍
 
 自動化
 設計
 読書
 開発
                     
             </div>             </div>         </div>
      
                         <div id="footer-top" class="cf">                 <div class="inner wrap">                                         </div>             </div>         <footer id="footer" class="footer" role="contentinfo">             <div id="inner-footer" class="wrap cf">                 <div class="m-all t-3of5 d-4of7">                     <nav role="navigation">                         <div class="footer-links cf"><ul id="menu-%e3%83%95%e3%83%83%e3%82%bf%e3%83%bc" class="footer-nav cf"><li id="menu-item-51" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-51"><a href="https://marketingengineercareer.com" aria-current="page">ホーム</a></li>
 
CONTACT

 プライバシーポリシー

                         
                     
                                              ©Copyright2021 凡人データエンジニア.All Rights Reserved.                     

                 
         </footer>     </div>
 /* <![CDATA[ */ var wpcf7 = {"apiSettings":{"root":"https:\/\/marketingengineercareer.com\/wp-json\/contact-form-7\/v1","namespace":"contact-form-7\/v1"}}; /* ]]> */ 
 
 /* <![CDATA[ */ var tocplus = {"smooth_scroll":"1","visibility_show":"show","visibility_hide":"hide","width":"Auto"}; /* ]]> */ 
 
 
 
 
 
 
 
 ( function( sitekey, actions ) {     document.addEventListener( 'DOMContentLoaded', function( event ) {         var wpcf7recaptcha = {             execute: function( action ) {                 grecaptcha.execute(                     sitekey,                     { action: action }                 ).then( function( token ) {                     var event = new CustomEvent( 'wpcf7grecaptchaexecuted', {                         detail: {                             action: action,                             token: token,                         },                     } );                     document.dispatchEvent( event );                 } );             },             executeOnHomepage: function() {                 wpcf7recaptcha.execute( actions[ 'homepage' ] );             },             executeOnContactform: function() {                 wpcf7recaptcha.execute( actions[ 'contactform' ] );             },         };         grecaptcha.ready(             wpcf7recaptcha.executeOnHomepage         );         document.addEventListener( 'change',             wpcf7recaptcha.executeOnContactform, false         );         document.addEventListener( 'wpcf7submit',             wpcf7recaptcha.executeOnHomepage, false         );     } );     document.addEventListener( 'wpcf7grecaptchaexecuted', function( event ) {         var fields = document.querySelectorAll(             "form.wpcf7-form input[name='g-recaptcha-response']"         );         for ( var i = 0; i < fields.length; i++ ) {             var field = fields[ i ];             field.setAttribute( 'value', event.detail.token );         }     } ); } )(     '6Lf_LzMaAAAAAAnlZGQxacG457QQb4mk5MkPT7iA',     {"homepage":"homepage","contactform":"contactform"} ); 
 </body>

【まとめ】現状の構築図と次回実施事項

以上でプライベートサブネットを作成し、NATゲートウェイ経由でインターネットにアクセスするところまで完了しました。

現状の構築図を再度確認してみましょう。

次回で最後です。

今回作成したプライベートサブネットにDBをインストールしていきます。そしてパブリックサブネットの方にはWordPressをインストールして、DBとの連携設定をし、WordPressの初期設定をしたら完成です!

完成構成図です。

次回の記事は以下より。

【AWS入門】AWSでWordPressの環境構築をしてみる_完成編

 

ABOUTこの記事をかいた人

株式会社メンバーズ データアドベンチャー所属 データエンジニアとしてデータ基盤の構築から運用を行っております。 得意なことは、データ活用推進です。 日々の学びをアウトプットしていきます。