【AWS】EC2のphpをアップデートする(amazon-linux-extrasコマンド)

10 min

こんにちは。ナミレリです。

この記事では、EC2上で稼働するAmazon Linux 2の特徴的なツール、amazon-linux-extrasについて詳しく解説しますamazon-linux-extrasは、Amazon Linux 2上で追加のソフトウェアパッケージを管理するためのもので、利用者にとって非常に便利な機能です。一方で、その存在自体も知られていないことも多く、この記事ではphpのアップデートを例に、その活用方法を具体的に紹介していきます。実際にphp7.4からphp8.2へアップデートしてみます

amazon-linux-extrasコマンドの基本的な使い方や、amazon-linux-extrasの注意すべきポイント、具体的なphpのアップデート方法など紹介していきます。

この記事はこんな人にオススメ

  • amazon-linux-extrasコマンドを詳しく知りたい方
  • EC2(amazon linux 2)でphpのバージョンアップをしたい方

そもそもamazon-linux-extrasとは?

EC2のOSである、Amazon Linux 2にはamazon-linux-extrasという非常に便利なツールが含まれています。

amazon-linux-extrasは、安定したオペレーティングシステムで新しいバージョンのソフトウェアを利用可能にするAmazon Linux 2のメカニズムで、2025年6月30日までサポートされます。

amazon-linux-extrasはAmazon Linux 2で新規または追加のソフトウェアパッケージを簡単にインストールできるようにするためのもので、基本的にAmazon Linux 2にインストールされており特別な設定無しで利用することができると思います。

例えば、特定のバージョンのphpをインストールするシーンや、新たにDockerを使い始めるために必要なパッケージをインストールするシーンなどに利用します。

参考:Amazon Linux Extras とは何ですか?

amazon-linux-extrasの使い方

amazon-linux-extrasには6個のサブコマンドがあります。詳しくはman amazon-linux-extrasでマニュアルを確認することができます。


man amazon-linux-extras

amazon-linux-extrasのサブコマンド

以下に、amazon-linux-extrasの6個のサブコマンドをまずは記載します。どんなことができるサブコマンドが存在するのか全体像を掴みましょう。

無効化、有効化の動作については、特に注意が必要ですのでこの後に詳しく紹介します。

サブコマンド説明
help使い方を表示する
list利用可能なすべてのパッケージをリスト表示する
info <package-name>インフォメーションを表示する
install <package-name>指定したパッケージをインストールする
disable <package-name>指定したパッケージを無効化する
enable <package-name>指定したパッケージを有効化する

amazon-linux-extras help(使い方を表示)

amazon-linux-extras helpは、使い方を簡単に表示してくれます。


amazon-linux-extras help

  help      See list of commands.
  info      See details of a specific package.
  install   Enables specified topics and installs their packages.
  list      Lists topics in the catalog. Some may be enabled.

Amazon Linux Extras software topics give you access to the most-recent
stable software you specifically choose, without the uncertainty of a
wholly new environment.

Best practice is to enable only one or two topics. More than that, and
you lose the benefits of working in a stable environment.

上のhelpの通り、エクストラライブラリで有効にするパッケージ数については、1つか2つがベストプラクティスです。

amazon-linux-extras list(利用可能なトピックを表示)

amazon-linux-extras listは、エクストラライブラリの利用可能なすべてのパッケージをリスト表示します。

下のように71のパッケージがあることがわかります。


amazon-linux-extras list
(中略)
 65  lustre                   available    [ =stable ]
  _  php8.1                   available    [ =stable ]
 67  awscli1                  available    [ =stable ]
  _  php8.2                   available    [ =stable ]
 69  dnsmasq                  available    [ =stable ]
 70  unbound1.17              available    [ =stable ]
 71  golang1.19               available    [ =stable ]
* Extra topic has reached end of support.

AWS的には、パッケージ群のことをその依存関係も含めてトピックと呼びます。

phpの利用できるバージョンを調べる場合は、下のようにgrepします。


amazon-linux-extras list | grep php
 42 *php7.4=latest            enabled      [ =stable ]
  _  php8.0                   available    [ =stable ]
  _  php8.1                   available    [ =stable ]
  _  php8.2                   available    [ =stable ]

上の例では、php7.4が有効=enabledになっています。また、php8.0、php8.1、php8.2がavailableで利用可能であることが分かります。

grep enabledをして有効になっているエクストラライブラリのトピックを表示してみます。


amazon-linux-extras list | grep enabled
 20  docker=latest            enabled      \
 42 *php7.4=latest            enabled      [ =stable ]
 55  kernel-5.10=latest       enabled      [ =stable ]

amazon-linux-extras info <package-name>(トピックの情報を表示)

amazon-linux-extras infoは、トピックの情報を表示します。php8.2の情報を表示してみます。

php-cli、php-pdo、php-fpm、php-json、php-mysqlndもインストールされることがわかります。


amazon-linux-extras info php8.2
php8.2 recommends php-cli          # yum install php-cli
php8.2 recommends php-pdo          # yum install php-pdo
php8.2 recommends php-fpm          # yum install php-fpm
php8.2 recommends php-json         # yum install php-json
php8.2 recommends php-mysqlnd      # yum install php-mysqlnd

kernel-5.15のトピック情報も表示してみます。


amazon-linux-extras info kernel-5.15
kernel-5.15 recommends kernel      # yum install kernel

amazon-linux-extras install <package-name>(トピックをインストール)

amazon-linux-extras install <package-name>は、指定したトピックをインストールします。

例えば、php8.2をインストールする場合は下のようにします。


sudo amazon-linux-extras install php8.2

既に別のバージョンのphpがインストールされている場合は、アップグレードするためにはそのバージョンを無効化しアンインストールする必要があります。phpのアップグレードの方法は本記事別のセクションで紹介します。

amazon-linux-extras disable <package-name>(トピックを無効化)

amazon-linux-extras disable <package-name>は、指定したパッケージをエクストラライブラリから無効化します

無効化されたパッケージはyum(パッケージマネージャー)からアクセスできなくなり、そのパッケージのアップデートやインストールができなくなります。(アンインストールされるわけではありません)

重要な点として、amazon-linux-extras disableコマンドはインストール済みのパッケージをアンインストールするわけではなく、あくまで無効化であってリポジトリに対するアクセスを制御するものであり、インストール状態には影響を与えません。

下のコマンド例では、php7.4を無効化しています。php7.4をアンインストールするわけではなく、php7.4のリポジトリへのアクセスを無効にしているだけです。


sudo amazon-linux-extras disable php7.4

amazon-linux-extras enable <package-name>(トピックを有効化)

amazon-linux-extras enable <package-name>は、指定したパッケージをエクストラライブラリから有効化します

このコマンドによりyum(パッケージマネージャー)から、指定されたパッケージにアクセスできるようになります。つまり、そのパッケージのインストールやアップデートが可能になります。

特に、複数のバージョンが存在するソフトウェアパッケージ(例:PHP)の場合、amazon-linux-extras enableコマンドを用いて特定のバージョンを有効化することができます。これにより、バージョンごとに異なるパッケージのバージョンを利用することが可能になります。

下のコマンド例では、php8.2を有効化しています。php8.2をインストールするわけではない点に注意が必要です。


sudo amazon-linux-extras enable php8.2

php7.4からphp8.2へアップデートしてみる

それでは、実際にphp7.4からphp8.2へアップデートしてみます。まずは全体の流れを把握したいと思います。必ずしも下のステップ通りにやる必要はないですが、一番わかりやすいステップだと思います。

以降、各ステップを詳しく紹介していきます。

不足の事態に備え、必要なバックアップはしっかりやっておきましょう。

  1. STEP

    php7.4を無効化し、サーバソフトウェアを停止する

    
    php -v
    sudo amazon-linux-extras disable php7.4
    sudo systemctl stop httpd.service
    sudo systemctl stop php-fpm.service
    
    
  2. STEP

    php7.4をアンインストールする

    
    sudo yum remove php-cli php-pdo php-fpm php-json php-mysqlnd
    
    
  3. STEP

    php8.2を有効化する

    
    sudo amazon-linux-extras enable php8.2
    
    
  4. STEP

    php8.2をインストールする

    
    sudo yum clean metadata
    sudo amazon-linux-extras install php8.2
    php -v
    
    
  5. STEP

    サーバソフトウェアを起動する

    
    sudo systemctl start httpd.service
    sudo systemctl start php-fpm.service
    
    

【STEP1】php7.4を無効化し、サーバソフトウェアを停止する

php7.4を無効化し、apacheやphp-fpmを停止します。まずは、現在のphpのバージョンを確認します。

現在のphpバージョンは7.4.33であることがわかります。


php -v
PHP 7.4.33 (cli) (built: Nov 19 2022 00:22:13) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

次に、念のため、phpの利用できるエクストラライブラリを確認しておきます。

php7.4がenabledで、php8.0、php8.1、php8.2が利用可能であることがわかります。


amazon-linux-extras list | grep php
 42 *php7.4=latest            enabled      [ =stable ]
  _  php8.0                   available    [ =stable ]
  _  php8.1                   available    [ =stable ]
  _  php8.2                   available    [ =stable ]

次に、amazon-linux-extras disableでphp7.4を無効化し、yum(パッケージマネージャー)からアクセスできないようにしておきます。


sudo amazon-linux-extras disable php7.4

次に、念のため、php7.4が無効化されていることを確認します。

php7.4がenabledではなくなっていることがわかります。
php7.4はサポートが終了しているので、リストからも表示されなくなりました。


amazon-linux-extras list | grep php
 51  php8.0                   available    [ =stable ]
 66  php8.1                   available    [ =stable ]
 68  php8.2                   available    [ =stable ]

その後、php8.2へアップグレードする前に、apacheとphp-fpmを停止します。
(停止すると当然ですが、WEBサイトにはアクセスできなくなります)


sudo systemctl stop httpd.service
sudo systemctl stop php-fpm.service

【STEP2】php7.4をアンインストールする

続いて、php7.4をアンインストールします。

STEP1では無効化(=リポジトリへのアクセスをできなくした)のみなので、実際にphp7.4をアンインストールします。


sudo yum remove php-cli php-pdo php-fpm php-json php-mysqlnd

【STEP3】php8.2を有効化する

続いて、amazon-linux-extras enableでphp8.2を有効化し、yum(パッケージマネージャー)からアクセスできるようにします。


sudo amazon-linux-extras enable php8.2

次に、念のため、php8.2が有効化されたことを確認します。

php8.2がenabledになったことがわかります。


amazon-linux-extras list | grep php
  _  php8.0                   available    [ =stable ]
  _  php8.1                   available    [ =stable ]
 68  php8.2=latest            enabled      [ =stable ]

【STEP4】php8.2をインストールする

続いてmetadateをクリアし、amazon-linux-extras installでphp8.2をインストールします。

php-cli、php-fpm、php-pdo、php-common、php-mysqlndがインストールされます。
php-jsonは、php8.1のトピックのようです。


sudo yum clean metadata
sudo amazon-linux-extras install php8.2
(略)
インストール:
 php-cli.x86_64 0:8.2.3-1.amzn2   php-common.x86_64 0:8.2.3-1.amzn2
 php-fpm.x86_64 0:8.2.3-1.amzn2   php-mysqlnd.x86_64 0:8.2.3-1.amzn2
 php-pdo.x86_64 0:8.2.3-1.amzn2

完了しました!

php-json is available in Amazon Linux Extra topic "php8.1"

phpのバージョンを確認します。

phpバージョンは8.2.3が無事にインストールできました。


php -v
PHP 8.2.3 (cli) (built: Mar 15 2023 21:12:07) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.3, Copyright (c) Zend Technologies

ちなみに、インストールされたphp関連のパッケージの説明です。

パッケージ説明
php-cliPHP Command Line Interface (CLI)は、
コマンドラインからPHPスクリプトを実行するためのツール。
php-fpmPHP FastCGI Process Manager (FPM)は、PHPをFastCGIとして実行するためのもの。
WEBサーバと組み合わせて使用され、動的なWebコンテンツを効率的に
提供することができる。
php-pdoPHP Data Objects (PDO)は、PHPでデータベースとやり取りするための
統一的なインターフェースを提供する。
php-common一般的なPHPアプリケーションが必要とする
共通のファイルとユーティリティを提供する。
php-mysqlndmysqlnd (MySQL Native Driver)は、PHPとMySQLデータベースとの間で
効率的な通信を行うためのドライバー。

【STEP5】サーバソフトウェアを起動する

下のように、apacheとphp-fpmを起動します。


sudo systemctl start httpd.service
sudo systemctl start php-fpm.service

MFA(多要素認証)を有効にする

AWSで必ずやっておきたい多要素認証の設定方法を紹介します。

AWSではセキュリティ強化のために必ずMFA(多要素認証)を設定しましょう。AWSアカウントのルートユーザーとIAMユーザーでMFAを設定することができます。設定も簡単です。

ざっくりMFAとは?

MFAとは、一般的なログイン認証情報であるユーザー名とパスワードに加えて、もう1つ(1つ以上)の認証要素を加え、ユーザに対してこの2つ以上の認証要素を要求し認証する方法です。

今回は追加の認証要素としてワンタイムパスワード(OTP)を追加します。ワンタイムパスワードは6桁の数字となり、受信方法はSMSやメールといったケースも多いですが、私は1Password8で保存してワンタイムパスワードを管理しています。

2FAとの違いは?

ちなみに、2FAという単語もよく見かけますが2FAとは「2要素認証」です。2FAは2つの要素で認証する方法ですが、MFAは2つ以上の要素を設定し認証する方式です。

それではAWSのMFAを有効にしましょう。

AWSでワンタイムパスワードを追加する手順

以下のAWS公式ドキュメントを参考にMFAを有効にします。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa_checking-status.html

  1. STEP

    IAM コンソールにアクセス

    AWS Management Console にサインインし、IAM コンソールにアクセスします。

    IAMコンソール:https://console.aws.amazon.com/iam/

  2. STEP

    セキュリティ認証情報をクリック

    右上のナビゲーションバーでユーザー名を選択し、セキュリティ認証情報をクリックします。

  3. STEP

    MFAが有効か無効かを確認

    MFAが有効でない場合は下の画像のようにアラートが出ています。

  4. STEP

    MFAを割り当てる

    では実際にMFAを割り当て設定します。

  5. STEP

    MFAデバイスを選択

    今回は1Password8でワンタイムパスワードを管理するので「Authenticator app」を選択します。デバイス名にはわかりやすい名前をつけます。(なんでも構いません)

  6. STEP

    デバイスの設定

    QRコードを表示して、1Password8でスキャンします。

    1Password8では、ワンタイムパスワードの項目を追加して下の画像のようにスキャンします。

  7. STEP

    MFAコードを2つ入力しMFAを追加する

    1Password8の追加したワンタイムパスワードの項目に表示された6桁のコードを入力し、最大30秒後に新しいコードが生成されるのでそれを入力します。

    これでMFAを追加することができました。

最後に

最後まで読んでいただきありがとうございます。今回のEC2のphpをアップデートする(amazon-linux-extrasコマンド)はいかがでしたでしょうか。

amazon-linux-extrasコマンドの基本的な使い方や、mazon-linux-extrasの注意すべきポイント、具体的なphpのアップデート方法など紹介しました。amazon-linux-extrasで、EC2上のAmazon Linux 2でのパッケージ管理が大幅に効率化され、さまざまなソフトウェアパッケージのインストールやアップデートが簡単になります。

一方で、特定のphpのアップデートなどは他のパッケージやシステム全体に影響を与えることがあるため、常に注意深く行う必要があります。パッケージのバージョン管理や依存関係もしっかり理解し、管理することが重要です。

AWSの初学者、全体像を理解したい方にオススメ

AWSの基本・仕組み・重要用語が全部わかる教科書

MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。

Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。

初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。

カテゴリー:
関連記事