古い参考書ではLAMP環境がサーバー構築のスタンダードとなっていますが、もっといい方法があるんじゃないかと考えているエンジニア達も多いのではないでしょうか。たしかにAWSやGCPなどのクラウドサービスの普及により、時代は変わりつつあります。今回は、本当にLAMP環境が古いのかどうか、AWSで構築してできることは何かについて解説していきます。
1. LAMP環境とは
1.1 LAMP環境は4つのオープンソースの頭文字
LAMP環境とは「Linux」、「Apache」、「MySQL」、「PHP」の4つのオープンソースでWebシステムを開発する環境のことをいいます。
以下で、それぞれのオープンソースの解説をします。
1.1.1 Linux
Linuxは、世界で最も普及している、オープンソースのオペレーティングシステム(OS)です。いわゆるUNIX系OSの一種で、プログラムが公開されており誰でも自由に入手や使用、改変、再配布することができます。オンプレミスだけでなくクラウド環境でも採用される他、家庭用ゲーム機やデジタル家電、スーパーコンピュータまで様々な用途で組み込みシステム開発にも採用されます。
Linuxのメリットは「オープンソース」であり、無料かつ改変可能なことです。WindowsやUNIXは「現状のまま変更不可」で提供されるOSのため、開発中にエラーが発生し、原因がOS起因であることが疑われる場合に、その中身がブラックボックスであることがネックになります。
一方、Linuxはオープンオースのためエラーログを確認後、必要に応じてコードを改変しエラーに対策することができます。OSとして透明性があり、改変自由なため管理しやすく安全性が高いです。また無料のため、コストパフォーマンスに優れる所もメリットです。
1.1.2 Apache
Apacheは、オープンソースのWebサーバーソフトウェア(HTTPサーバー)で、リクエストを処理し、それらを分析し、そして訪問者のブラウザで見えるように対応するドキュメントを渡す役割を担います。Webページをユーザーのブラウザに配信するために使用されます。1995年初版のソフトウェアで、レンタルサーバープランを使用する場合にはあらかじめプランに組み込まれていることも多いです。
1.1.3 MySQL
MySQLは、RDBMS(リレーショナルデータベース)と呼ばれる種類のデータベースソフト。たとえばWordPressでブログを作成する場合、投稿内容・ユーザー情報・プラグイン情報などは全てデータベースで管理されます。情報はデータベースの中で、それぞれ異なるテーブルに保管され、情報同士がキーで関連づけられます。
そしてサイトが、特定の情報を呼び出す必要がある場合、SQLでMySQLデータサーバーにリクエストが送信される仕組みです。
1.1.4 PHP
PHPは、サーバーサイドの開発に採用される主流プログラミング言語の1つです。WordPressのコアソフトウェアの大部分がPHPで開発されている他、国内ではぐるなびにPHPが採用されていることでも有名です。また海外では、facebookが「Hack」を採用しています。HackはPHPをベースに、facebook社内で独自にカスタマイズを行なったプログラミング言語です。
2. AWSにLAMP環境をインストールする方法
続いて、AWSにLAMP環境をインストール方法を図を用いながら、わかりやすく説明していきます。ちなみにAWSとは、アマゾンウェブサービスの略でWebサービスの土台となるものです。自前でサーバーを用いなくても、AWSを使えば環境を構築することができます。
2.1 AWSにEC2インスタンスを作成
まずは以下の手順に従ってEC2インスタンスを作成しましょう。
【1】仮想マシンを起動するをクリック
【2】Amazon Linux AMIを選択
【3】各種の設定はデフォルトのままでOK
セキュリティグループの設定では以下の画像のように設定してください。
設定できたら、確認と作成を押します。
【4】インスタンスの作成では、必ず秘密鍵の設定が必要
新しいキーペアの作成を選択し、キーペア名を適当に「hoge_key」と設定してください。 キーペアのダウンロードを行い、大切に保存してください。 完了したら、インスタンスの作成をクリックして終了です。
2.2 EC2インスタンスにSSHログイン
続いて、EC2インスタンスにSSHログインします。
WindowsとMacの場合でやり方が異なります。
Macの方はこちらの記事を参考にしてください。
参考:【初心者向け】Amazon EC2にSSH接続する【Windows、Macintosh】
Windowsの場合は、SSHのクライアントソフトをインストールする必要があります。
【1】Tera Termの最新版をインストール
こちらからインストールできます。
設定はデフォルトのままで大丈夫です。
【2】ホストの所にグローバルIPかDNS名を入力
【3】「このホストをknown hostsリストに追加する」のチェックを外す
【4】ユーザー名・パスフレーズ・秘密鍵を設定
ユーザー名は「ec2-user」、パスフレーズは空欄に設定し、秘密鍵は先ほど作成したものを設定してください。
【5】接続が出来たら完了
2.3 Apacheをインストール
【1】yum uadateを行う
sudo su
yum update
と入力してyum uadateを行います。
【2】Apacheをインストール
yum install httpd
と入力してApacheをインストールします。
【3】自動起動の設定もオン
service httpd start
chkconfig httpd on
と入力して自動起動の設定をオンにし、完了です。
2.4 PHPをインストール
【1】利用可能なphpのバージョンを表示
yum list | grep php
と入力すると、利用可能なphpのバージョンが表示されます。
【2】今回は例としてPHP7をインストール
yum install php70
と入力して、PHP7をインストールしましょう。
このような画面が出てきたら成功です。
2.5 MySQLをインストール
【1】利用可能なパッケージを確認
yum list | grep mysql
と入力して、利用可能なパッケージを確認します。
【2】今回は例としてMySQL5.6をインストール
yum install mysql56
と入力して、MySQL5.6をインストールしましょう。
このような画面が出てきたら成功です。
2.6 動作確認用のindex.phpをドキュメントルートに設置
【1】動作確認用のindex.phpファイルを作成
cd /var/www/html
touch index.php
と入力して、動作確認用の「index.php」ファイルを作成します。
【2】コマンド入力で編集画面に入る
vim index.php
と入力して、編集画面に入ります。
【3】編集画面に以下の内容を追加
<?php phpinfo();
3. LAMP環境はもう古い?オワコン?
AWSやGCPといったクラウド環境が主流になる中で、LAMP環境は今でもデファクトスタンダードと言えるのか、古い・オワコンたという声もチラホラ囁かれていますが実際はどうなのでしょうか?結論から言えば、大量の同時アクセスへの対応やビッグデータ解析など様々な要件に合わせて「ApacheではなくNginxを選ぶ」「MySQLとBigQueryを併用する」など様々なカスタマイズがされることは当たり前になっています。
ただし基礎的な部分は変わってはいません。また企業でエンジニアとして働く場合、最初のうちは古いシステムの保守運用を任されることもあり、そうしたケースで採用されているのがLAMPということもあります。LAMPの知識があると取り組みやすいということもあり、学んでおいて損はないでしょう。
3.1 【Linux】クラウド環境を支えるOS・開発環境のスタンダード
例えばAWSではAmazon Linuxを提供しており、Cent OSとほぼ同じように使えてなおかつAmazonのサポートも受けられるディストリビューションとして注目を集めています。GCPでもCentOSを使用した仮想マシンのセットアップなども行えます。
Amazon Linux、CentOSのいずれでも使いこなすにはLinuxの正しい知識が必要です。このように事実上、Linuxはクラウド技術の基盤となっている技術であり、クラウドに対応したLinuCも資格としてスタートしました。またパブリッククラウドが広がっているとはいえ既存データセンターや物理サーバを使っている企業も多く、なおかつ置き換え需要もあるため特定のクラウドに依存しないより汎用的な技術としてLinuxを学ぶのも強くおすすめします。
3.2 【Apache】Nginxの導入例が増加傾向
NginxはApacheとは異なる設計思想で生まれたWebサーバーソフトウェアです。ApacheはWebサーバーのスタンダードだが「一度の大量のアクセスがあった際に捌き切れない」という「クライアント1万台問題」とも呼ばれる弱点を持ちます。
同時の大量アクセスを裁くために生まれたのがNginxです。Apacheが重い処理も全て処理するのに対し、Nginxは同時リクエストを処理することに特化しているため、軽量な点がメリットです。一方でPHPの処理機能がないため動的コンテンツに対応できないといった弱点があります。
用途や技術課題に合わせて、ApacheをNginxに移行して高負荷の処理に対応したり、ApacheとNginxを共存させるケースが増えています。
3.3 【MySQL】ビッグデータを扱う業務でBigQueryに移行するケースが増加
企業がアクセスログや過去の販売データのビッグデータを分析する際、レコード数が数億になることがあります。また機械学習と併用したいニーズもあり、大規模データを扱う際にMySQLでは遅く、スケーラビリティが低く、機械学習に不向きなケースがあります。
そうしたケースでBigQueryに移行するケースが出てきています。
例えばマネーフォワードでは、データ分析基盤としてBigQueryを利用しています。数億レコードに対してMySQLだけでは遅く、BigQueryに移行した所分析や調査で高速の検索が可能になりました。
またMySQL環境とBigQueryを同期させて共存させるケースもあります。
例えばメルカリでは、数百GBの膨大なデータをMySQLからBigQueryへ移行させようとしました。しかしながら、BigQueryの更新に制限があり全てアップロードすることはできませんでした。
そこで、差分同期の方法を取ることで共存させるようにしました。
具体的には、同期させたい期間のレコードを定期的に検索して、その結果をBigQueryの作業用テーブルへ上書きし、作業用テーブルとアップロード先のテーブルをマージさせるという方法です。
3.4 【PHP】Ruby・Goなど用途別に言語が多様化
クックパッドはRuby、TalknoteはGoなどITサービスが多様化する中で、用途に合わせて選ぶ言語も多様化しています。
例えば、メディアやブログなどの運営に必須なCMSなどを始めとするWebアプリを作りたいならPHPが圧倒的なシェアを誇りますし、SNSやマッチングアプリなどはRuby on Railsを使うと楽に各種機能を作れるのでRubyが向いていると言えるでしょう。
GoはJavaのように環境に依存されず高いパフォーマンスを誇る言語で、JavaやC++並みの高さを誇ります。そのためネットショッピングの決済処理といったアクセスが多く、素早い処理が求められるシステムの開発に向いています。
4. まとめ
今回は、LAMP環境について、AWSにLAMP環境を構築させる方法、本当にLAMP環境が古いのかについてお話させていただきました。
LAMP環境は次世代環境に比べて古いと言われていますが、基礎的な部分は変わらず、LAMPの知識を持っていると取り組みやすいです。これからは、大量の同時アクセスへの対応やビッグデータ解析など様々な要件に合わせてカスタマイズしていくことで効率的な運用が可能になるでしょう。