AWSについて学習したこと<その3>

f:id:endoakak:20200725103727j:plain

ここ数日、UdemyでAWSとネットワークの基礎を学んでいます。

私に1円も入るわけではないので宣伝しても仕方ないのですが、山浦 清透さんのこちらの講座です。とてもわかりやすかったのでこの講座を選んで正解だったと思っています。山浦先生、ありがとうございます。

www.udemy.com

始める前はわかっていなかったのですが、スクールのカリキュラムにあったRailsアプリのデプロイと、この講座でやっていることって随分違うんだなということがようやくわかってきました。

かなり大雑把に、どういうことをしたのかまとめてみたいと思います。たぶん合っているはず。

Udemyの講座で作ったもの

f:id:endoakak:20200902191004p:plain

上の図のようなものを作りました。こういうことをするという説明はもちろんあったのですが、実際に講座を進める中でだんだんと意味がわかってきました。

ざっくり説明していきます。

仮想ネットワーク

AWSクラウド上にVPCという仮想ネットワークを作成しました。そして、インターネットから接続が可能なパブリックサブネットと、接続できないプライベートサブネットを作成しました。

データベースサーバー

プライベートサブネットに、データベースサーバーを配置しました。データベースサーバーの作成には、AWSのRDSというサービスを使いました。データベースを管理するエンジンはMySQLです。

Webサーバー

パブリックサブネット内にはWebサーバーを設置しました。まずは仮想サーバーであるEC2インスタンスを作成し、Apacheをインストールしました。さらにWordpressからデータベースへのアクセスができるようになっています。

パブリックIPアドレス

EC2インスタンスはインターネットによる接続を行う必要があるので、Elastic IPを割り当てました。 Elastic IPは、AWSが提供する、固定されたパブリックIPアドレスです。

Route 53

Route 53はAWSDNSです。独自のドメインを取得したので、そのドメインでアクセスできるように、Route 53を用いて設定を行いました。クライアントからのリクエストはRoute 53に送られ、IPアドレスが返されてWebサーバーへつながります。

その他

そのほかにも、S3に画像をアップできるようにしたり、ELBでWebサーバーを冗長化したりいろいろやりましたが、大まかにはこんな感じ。

Railsアプリのデプロイ

f:id:endoakak:20200902193710p:plain

EC2インスタンスの作成

まずはEC2インスタンスを作成して、必要なツールをインストールしました。Node.jsとかYarnとかrbenvとか諸々です。

データベース

MariaDBをインストールしました。MySQLと同じようなデータベースを管理するものだと思ってます。

アプリケーション

まずはGitHubにアクセスして、デプロイしたいアプリをクローンしました。そしてアプリケーションサーバーとしてUnicornをインストールししました。

Webサーバー

NginXをインストールしました。クライアントからのリクエストはWebサーバーが受け取り、アプリケーションサーバーに送られ、必要があればデータベースとやり取りをし、Webサーバーを通じてレスポンスをクライアントに返す、という流れです。

自動デプロイ

最後に、Capistranoを使って自動デプロイができるようにしました。

スクールのカリキュラムに沿ってデプロイをしたときは、作成したEC2インスタンスのなかにWebサーバー、アプリケーションサーバー、データベースサーバーを全て配置していました。ローカルのPCでやっているのと同じことをEC2でやっているという感じですかね。

全てEC2インスタンスの中に置いているので、VPCで仮想ネットワークを作る必要もないわけです。

まとめ

アプリのデプロイのことだけを考えたら、Udemyの講座は必須ではなかったような気もします。しかしネットワーク周りやAWSについて、以前よりもだいぶ理解出来てきたと思うので、勉強してよかったです。HTTPS通信ができるようにもしたいので、今回学んだことを生かせそうな気がします。