日進日歩で日々進捗

非情報系学生による技術の備忘録。進捗出していきたい

CloudFrontとAnsibleで自動でサクッとRuby on Railsの本番環境を作ってみる

CloudFrontとAnsibleで自動でサクッとRuby on Railsの本番環境を作ってみる

タイトルの通りですが、CloudFrontとAnsibleを使ってRuby on Railsの本番環境を作ってみましょう。
なぜ、Ruby onRailsなのかというと、比較的初学者がRailsの学習を行なっていることが多く、本記事の対象読者とマッチしていると考えているからです。
別にDeep Learningの実行基盤であってもいいのですが、ansibleの使い方さえマスターしてしまえば、動かすアプリケーションは関係ないと考えているので、今回はRailsの本番環境での構築を行います。

Ansibleで構築を目指すインフラ構成

オンプレミスでも良いのですが、今回はAWSクラウド環境を使ってRuby on Railsの実行環境を構築します。具体的に使うミドルウェアは下記の通りです。

unicornRailsを動かすRack準拠のアプリケーションサーバ、nginxはアプリケーションサーバー手前に配置するリバースプロキシ、redisは軽量データをメモリ上にキャッシュしておくインメモリストレージとして利用します。

AWSインフタ構成

図はあとで掲載します。
VPCにPublic SubnetとPrivate Subnetを用意し、Public SubnetをAnsible クライアント兼踏み台サーバーとして使います。

なぜAnsibleクライアントをAWSのEC2に配置するのか

初学者のころ、Ansible関係の記事ではほとんどAnsibleを操作するためのサーバーをEC2上に構成している例で、不思議に思ったことがあったのですが、
別にLocal環境であっても構いません。つまり、今この記事をみているMac環境でAnsibileを動かして、EC2のサーバー上に本番環境を構築することもできます。
ただ、これは勉強目的であれば構わないのですが、実際に商用として動かすマシンとしてはセキュリティ的に問題があります。
具体的には、アプリケーションの実行プロセスが動いているマシンは、任意のIPアドレスからアクセスできるようなネットワーク環境におくことは脆弱性に繋がるので、
基本的には外部のリクエストを受け付ける踏み台サーバーを用意し、その踏み台サーバーからのアクセス以外を弾くというようなポリシーでの運用がデファクトとなっているからです。
このあたりの考え方は、踏み台サーバー関係で検索すれば出てくると思います。

Ansibleとは

名前は聞いたことがある人も多いとは思いますが、Chefなどと同様インフラの構成管理ツールになります。
例えばアプリケーションを開発するとき、ミドルウェアやライブラリをインストールする環境構築をまず行うと思いますが、構成管理とはこの環境構築のことを指します。

このAnsibleを導入することの大きなメリットは、これらの作業を自動化できることになります。
では、自動化すると具体的に何が良いことになるのでしょうか。

環境構築くらい、自動化するまでもなく手動でやっても対した負担ではない、と思う方もいらっしゃるかもしれませんが、確かに1台のマシン、自分が普段開発用に使っているマシン1台のインストールでは対して手間は変わらないでしょう。
しかし、それが10台、20台..... 100台、 1000台となったらどうでしょう。
もうお分かりの通り、人間の手作業で行うことは不可能です。
そして、実際このように1000台以上のサーバーに対して同じ構成のミドルウェア・ライブラリをインストールすることは往々にしてあるのです。(大規模なサーバークラスタの構築など)

ansibleは、そのような大規模なインフラの構築をする際に、自動化する機能を提供してくれます。
また、大規模なサーバークラスタの導入以外のシチュエーションとして、新しく加入した開発メンバーの開発環境の構築等もansibleの文法でインフラ構成を記載したマニュフェストファイルを配布することで、簡単に開発環境のインストールを行うことができます。

Ansibleのメリット

Ansibleが提供する自動化のメリットとして、

  • 多くのマシンに同時に同じ環境をインストールすることができる
  • 人間の手が介在しないので、ライブラリのバージョンの間違いなどの人為的ミスが起こらない

などのメリットが挙げられます。


以下の項目は T.B.C

DockerとAnsibleの違いは?

Ansibleのインストール

CloudFrontでのAWS環境構築

Ansible Playbook構築