COLUMN

RHEL/CentOS7におけるphpのバージョン問題をAmazon Linuxで解決する

日本では業務用の Linux OS として RHEL / CentOS 系が広く利用されています。aws を新規に利用する際、もしくは既存のシステムをawsに移行する際に、これまで通り Redhat や CentOS を使うのか、または amazon aws が提供する Amazon Linux を採用するのか迷うことと思います。今回は、Amazon Linux と RHEL / CentOS との違いや使い分けをお話したいと思います。

Amazon Linux の特徴と RHEL/CentOS との比較 (*RHEL - Redhat Enterprise Linux)

初代 Amazon Linux と Amazon Linux 2 の大きな違い

Redhat/CentOS系の6以前と7以降の違いとして、7系以降は System-V Init の代替として systemd が採用されています。初代の Amazon Linux と Amazon Linux 2 の違いもこの違いと同じく、初代では System-V Init が使われていますが、2 では systemd が採用されています。そのため、コマンドや運用手法も一新されておりますが、昨今は多くのシステムで systemd への移行は進んでいますので、ノウハウが蓄積されていないなどの問題は減少してきているのではないかと思います。

現状では実績のある古いバージョンのソフトウェア使用のため Redhat / CentOS 6系でないと動作しないなどの要件がない限り、Redhat / CentOS 7系 や Amazon Linux 2 を利用すれば良いかと思います。

その他にも、Amazon Linux には aws-cli がデフォルトで組み込まれていたり、細かな違いはありますが、基本的にはRedhat系を使い慣れた方なら初見でも調べながら簡単に使えると思います。

念のため、下に掲載しました通りWEB開発でよく利用される主要なスクリプト言語のバージョンを比較してみました。

開発言語 公式版標準パッケージ比較表

RHEL7 / Centos7 Amazon Linux Amazon Linux 2
perl-5.16.3 perl-5.16.3 perl-5.16.3
php-5.4.16 php-5.3.29 php-5.4.16
ruby-2.0.0 ruby-2.0.0 ruby-2.0.0
python-2.7.5 python-2.7.16 python-2.7.16

フレームワークを導入時の php のバージョン問題は aws と Amazon Linux で解決

RHEL / CentOS は良くも悪くも実績のある枯れた技術がベースとなっており、利用実績が少ない最新のバージョンはフォローされていない場合があり、特に有名なのは php が未だ version 5.4 系がデフォルトのバージョンとなっていることです。

実績のある枯れたパッケージを利用する場合は php 5.4 でも問題ないことも多いのですが、新しい機能を取り込み次々とWEBサービスを開発しているITベンチャー企業やWEBサービス企業の現場では、php 5.6以上 や php 7系を利用できないことが大きな問題となります。また、CMSの導入時などでもこの php のバージョンが問題となる場合がしばしば発生しています。

下記に主要なPHPフレームワークの動作要件をとりまとめましたが、RHEL7系の標準である php5.4 では下にあげたフレームワークが動作しません。

主要なPHPフレームワークと動作要件

cakephp 3.6 php 5.6.0 以上
Zend Framework 3 php 5.6.0 以上
Synphony 3.4 php 5.5.9 以上
Synphony 4.1 php 7.1.3 以上
Phalcon 3.4 php 5.5 以上 [推奨:php 7.0]
Laravel 5.8 php 7.1.3 以上
CodeIgniter 3.1 php 5.6.0 以上

phpのバージョンが古すぎる問題をどう解決するか

ウェブの情報を見ておりますとremiレポジトリを使ってphp7をインストールすると言う記事が多く書かれており、参考にされている方も多いかと思います。しかし、remiレポジトリは個人がメンテナンスしている非公式のレポジトリのため、私は原則としてこの商用サイトには利用しないこととしています。(※原則・・ですので、どうしてもと言われた場合、事前にメリットとデメリットを説明し、リスクを了承を頂いた上でインストールしてきました)

RPM がないなら php をソースから自前でビルドするという手もあります。これはできないことはありませんが、各種のライブラリ、モジュールまで含め問題なくビルドを終え、さらにモジュールまで含めたすべての機能が正常に動作することをテストするとなるとインフラ構築の工程が膨大に膨れ上がり、よほどの予算と人員とノウハウがあるプロジェクトでないと現実的ではありません。また昨今はRPMやAPTなどでビルド済みのパッケージをインストールすることが主流ですので、ソースコードからビルドを行ったことのあるエンジニアも若い人を中心に減ってきています。昨今の小さく初めて育てていくスモールスタートでは、予算、人員、スピード感からそこにそれだけの工数と予算をつぎ込むのは厳しいことが多いと思います。使い慣れた RHEL7系でかつ公式にメンテナンスされている新しいphpを使う方法はないのでしょうか。

PHPのバージョン問題はこれで解決

PHP7系の公式パッケージで新しいphpを利用する方法としては下記の3パターンとなります。

  • [1] - Redhat Enterprise Linux 7 の Red Hat Software Collections 3.3 を利用する (php5.6~php7.2)
  • [2] - Redhat Enterprise Linux 8 または CentOS 8 の php7.2 を利用する
  • [3] - Amazon Linux 2を利用する

上記の方法のうち[1]はプロジェクトでRHELのライセンスを購入する費用がある場合はこちらが確実です。しかし、昨今のスモールスタートの小さなプロジェクトで、予算がつかない場合は、別の方法を検討する必要があります。

続いて[2]を検討してみましょう。 2019年5月7日にRHELの最新版である 8.0 がリリースされました。RHEL 7系からさらに進化いますが、機能面の変更点も多く、インフラSE、サーバエンジニア、さらに運用部門から見て、まだノウハウやナレッジが蓄積されていないため、いきなりの本格導入は厳しいかと思います。これから少しずつ導入が進んでいくと思いますが、いきなり本番に投入というところはまだまだ少ないのではないでしょうか。

ライセンス費用の問題でRHEL7を見送ったプロジェクトの場合、[2]のRHEL8も同様の費用面の問題から選択肢から除外されますので、CentOS8のリリースを待つこととなります。現在、RHEL8ベースのCentOS8も開発が進んでおり、2019年8月以降にリリースの見込みと噂されています。また、AWSで公式イメージが登場するのはもう少し先の話になりそうです。

RHEL8系が広く普及するであろう2~3年に後はこのPHPの問題は解決していると考えられますが、直近のプロジェクトですぐにPHP5.6以降、もしくはPHP7系を使いたいという場合、[3]のAmazon Linux 2の導入を検討されてはいかがでしょうか。Amazon Linux 2では、Amazon によって公式にメンテナンスされている Amazon Linux Extras と呼ばれるパッケージ群を利用することが可能です。

php7をインストールする

さっそくAmazon Linux 2に php7 をインストールしてみましょう。

[root@amazon2 ~]# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

⇒ Amazon Linux ver2 です。

[root@amazon2 ~]# php --version
PHP 5.4.16 (cli) (built: Sep  1 2018 05:47:37)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

⇒ php は 5.4.16 です。実績のあるパッケージで安定稼動が期待できます。

[root@amazon2 ~]# amazon-linux-extras list
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1  =1.5.16 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19 ]
 16  php7.1                   available    \
        [ =7.1.22  =7.1.25  =7.1.27  =7.1.28  =7.1.30 ]

~省略 ~

 31  php7.3                   available    \

~省略 ~

⇒ Amazon aws によりメンテナンスされた新しいバージョンのスクリプト言語やサービスの一覧が表示されます。
phpは 7.1 ~ 7.3 まで用意されていますね。他にも ansible 2.4 や docker 18 など使ってみたいサービスがいくつかあってたいへん気になりますね。

php 7 をインストールしてみましょう!

[root@amazon2 ~]# amazon-linux-extras install php7.1
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-php7.1

~省略 ~

[root@amazon2 ~]#

⇒ 無事インストールが終了しました。パッケージ間の依存問題も自動修正されました。

[root@amazon2 ~]# php --version
PHP 7.1.30 (cli) (built: Jun 12 2019 20:33:42) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

⇒ php のバージョンが7に上がりました。

[root@amazon2 ~]# which php
/usr/bin/php

⇒ 別PATHへの新規インストールではなく、上書きインストールのようです。
先ほどの古い php は使えなくなりますのでその点はご注意下さい。

Amazon Linux 2 は手元の開発環境で無料で利用可能です

最後に Amazon Linux 2 は aws だけではなく、公式にイメージが公開されており、Hyper-V KVM vmware VirtualBox などの仮想マシンがサポートされ、これらがあれば手元の開発環境でも動作します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html別ウィンドウで開きます

うまくDEV環境を構築することができれば、従量課金が発生しない手元の開発環境で開発を行って、ステージングと本番環境へ作成したコードをデプロイすることも可能ですよ。開発会社のインフラエンジニア、サーバエンジニアの皆様はこのような構成も検討されてはいかがでしょうか。

以上、Amazon Linux 2のメリットと特徴、phpのバージョン問題の解決案をご紹介致しました。

24時間365日対応可能なクラウド監視・運用代行で、あなたをシステム運用から解放します!

ページ上部へ戻る

無料ダウンロード

自社のクラウド導入に必要な知識、ポイントを
このに総まとめ!

あなたはクラウド化の
何の情報を知りたいですか?

  • そもそも自社は本当にクラウド化すべき?オンプレとクラウドの違いは?
  • 【AWS・Azure・Google Cloud】
    どれが自社に最もマッチするの?
  • 情シス担当者の負荷を減らしてコストを軽減するクラウド化のポイントは?
  • 自社のクラウド導入を実現するまでの具体的な流れ・検討する順番は?

初めての自社クラウド導入、
わからないことが多く困ってしまいますよね。

NTT東日本では
そんなあなたにクラウド導入に必要な情報を

1冊の冊子にまとめました!

クラウド化のポイントを知らずに導入を進めると、以下のような事になってしまうことも・・・

  • システムインフラの維持にかかるトータルコストがあまり変わらない。。
  • 情シス担当者の負担が減らない。。
  • セキュリティ性・速度など、クラウド期待する効果を十分に享受できない。。
理想的なクラウド環境を実現するためにも、
最低限の4つのポイントを
抑えておきたいところです。
  • そもそも”クラウド化”とは?
    その本質的なメリット・デメリット
  • 自社にとって
    最適なクラウド環境構築のポイント
  • コストを抑えるため
    具体的なコツ
  • 既存環境からスムーズにクラウド化
    実現するためのロードマップ

など、この1冊だけで自社のクラウド化のポイントが簡単に理解できます。
またNTT東日本でクラウド化を実現し
問題を解決した事例や、
導入サポートサービスも掲載しているので、
ぜひダウンロードして読んでみてください。

クラウドのわからない・
面倒でお困りのあなたへ

クラウドのご相談できます!
無料オンライン相談窓口

NTT東日本なら貴社のクラウド導入設計から
ネットワーク環境構築・セキュリティ・運用まで
”ワンストップ支援”が可能です!

NTT東日本が選ばれる5つの理由

  • クラウド導入を
    0からワンストップでサポート可能!
  • 全体最適におけるコスト効率・業務効率の改善
    中立的にご提案
  • クラウド環境に問題がないか、
    第3者目線でチェック
    してもらいたい
  • 安心の24時間・365日の対応・保守
  • NTT東日本が保有する豊富なサービスの組み合わせで
    ”課題解決”と”コスト軽減”を両立

特に以下に当てはまる方はお気軽に
ご相談ください。

  • さまざまな種類やクラウド提供事業者があってどれが自社に適切かわからない
  • オンプレミスのままがよいのか、クラウド移行すべきなのか、迷っている
  • オンプレミスとクラウド移行した際のコスト比較を行いたい
  • AWSとAzure、どちらのクラウドが自社に適切かわからない
  • クラウド環境に問題がないか、第3者目線でチェックしてもらいたい
  • クラウド利用中、ネットワークの速度が遅くて業務に支障がでている

クラウドを熟知するプロが、クラウド導入におけるお客さまのLAN 環境や接続ネットワーク、
クラウドサービスまでトータルにお客さまのお悩みや課題の解決をサポートします。

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。