EC2のマイグレーション作業(AL2 →AL2023)について①

# はじめに
AWSのEC2インスタンスのOSであるAmazon Linux 2(以降AL2とします)が2025年にサービス終了してしまうため、Amazon Linux 2023(以降AL2023とします)に移行を行いました。

https://aws.amazon.com/jp/amazon-linux-2/faqs/

私自身がサーバーインフラについて学び始めた初心者のため
移行にあたって色々と対応に時間がかかりましたので
何回かに分けて実施した手順をまとめたいと思います。
この記事が他の方の参考となれば幸いです。

この記事では
**・mysqlのインストール**
**・PHPのインストール**
**・設定ファイル(confファイル)の移動**
**・PHP.confの修正**
について記載しています。
# EC2の情報
AL2のEC2インスタンスの情報は以下になります。

|項目|内容|
|:--:|:--:|
|OS|Amazon Linux 2 (AL2)|
|Webサーバー|Apache|
|PHPバージョン|PHP 8.1|
|PHP実行方式	|mod_php|
|データベース|MySQL 8.0 (予定含む)|
|セキュリティ接続|.pemキー使用|

この環境を新しいEC2(AL2023)に構築します

# apacheのインストール
こちらは色々と記事があるので省略します。
参考までに自分の記事を載せておきます。

https://qiita.com/tomoya0117/items/a05e30356b9f700431bc
# mysqlのインストール
dsudo dnf install mysql-community-serverコマンドでmysqlをインストールします。
```ruby:コマンド・出力例
sudo dnf install mysql-community-server
Last metadata expiration check: 0:01:04 ago on Tue Nov 11 00:46:13 2024.
Dependencies resolved.
================================================================================================================================================
 Package                                         Architecture            Version                       Repository                          Size
================================================================================================================================================
Installing:
 mysql-community-server                          x86_64                  8.0.40-1.el9                  mysql80-community                   50 M
Installing dependencies:
 mysql-community-client                          x86_64                  8.0.40-1.el9                  mysql80-community                  3.4 M
 mysql-community-client-plugins                  x86_64                  8.0.40-1.el9                  mysql80-community                  1.4 M
 mysql-community-common                          x86_64                  8.0.40-1.el9                  mysql80-community                  555 k
 mysql-community-icu-data-files                  x86_64                  8.0.40-1.el9                  mysql80-community                  2.3 M
 mysql-community-libs                            x86_64                  8.0.40-1.el9                  mysql80-community                  1.5 M

Transaction Summary
================================================================================================================================================
Install  6 Packages
・・・
Complete!
```
もしErrorやFAILEDとなってしまう場合は
```
sudo dnf -y update
```
でパッケージを最新の状態にして再度インストールを試してみてください
mysql -Vでバージョンを確認できればインストール完了です。
```ruby:コマンド・出力例
mysql -V
mysql  Ver 8.0.40 for Linux on x86_64 (MySQL Community Server - GPL)
```

# php8.1のインストール
dnf search phpコマンドでphpに関連するパッケージを調べます。
```ruby:出力例
#  dnf search php
Last metadata expiration check: 3:13:14 ago on Fri Nov 22 05:51:15 2024.
========================================================= Name & Summary Matched: php ==========================================================
php-pear.noarch : PHP Extension and Application Repository framework
php8.1.x86_64 : PHP scripting language for creating dynamic web sites
php8.1-bcmath.x86_64 : A module for PHP 8.1 applications for using the bcmath library
php8.1-cli.x86_64 : Command-line interface for PHP 8.1
php8.1-common.x86_64 : Common files for PHP 8.1
php8.1-dba.x86_64 : A database abstraction layer module for PHP 8.1 applications
・・・
```
今回はphp8.1をインストールしたいので「php8.1.x86_64」をインストールします。
以下のコマンドでphp8.1をインストールします。
```ruby:コマンド
sudo dnf install php8.1.x86_64php8.1.x86_64
```
Complete!が出ていることを確認してください。
php -vでバージョンが確認できればインストール出来ています。
```ruby:出力例
php -v
PHP 8.1.29 (cli) (built: Jun  5 2024 05:51:57) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.29, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.29, Copyright (c), by Zend Technologies
```
# Al2からAL2023へメイン設定ファイル(confファイル)を移動します。
今回はS3を経由してコピーする方法を利用しました。
その他必要なオブジェクト(コンテンツ)もこの方法でAL2023にコピーしました。

以下はカレントディレクトリからTest.txtをS3のHogeFuga_bucketのTempにコピーする場合のサンプルです。
※事前にS3にバケット(HogeFuga_bucket)を作成しています。
```ruby:コマンド・出力例
aws s3 cp ./Test.txt s3://HogeFuga_bucket/Temp/
upload: ./Test.txt to s3://HogeFuga_bucket/Temp/Test.txt
```

# phpのパッケージ差分について(AL2とAl2023) 
既存環境ではphpの実行方式をmod_phpを使用していましたが
AL2023のPHP8.1のパッケージにはmod_phpがない様子。

```ruby:コマンド・出力例
dnf search php
Last metadata expiration check: 10:27:55 ago on Tue Oct 29 14:02:50 2024.
========================================================= Name & Summary Matched: php ==========================================================
php-pear.noarch : PHP Extension and Application Repository framework
php8.1.x86_64 : PHP scripting language for creating dynamic web sites
php8.1-bcmath.x86_64 : A module for PHP 8.1 applications for using the bcmath library
php8.1-cli.x86_64 : Command-line interface for PHP 8.1
php8.1-common.x86_64 : Common files for PHP 8.1
php8.1-dba.x86_64 : A database abstraction layer module for PHP 8.1 applications
php8.1-dbg.x86_64 : The interactive PHP 8.1 debugger
php8.1-devel.x86_64 : Files needed for building PHP 8.1 extensions
php8.1-embedded.x86_64 : PHP 8.1 library for embedding in applications
php8.1-enchant.x86_64 : Enchant spelling extension for PHP 8.1 applications
php8.1-fpm.x86_64 : PHP 8.1 FastCGI Process Manager
php8.1-gd.x86_64 : A module for PHP 8.1 applications for using the gd graphics library
php8.1-gmp.x86_64 : A module for PHP 8.1 applications for using the GNU MP library
php8.1-intl.x86_64 : Internationalization extension for PHP 8.1 applications
php8.1-ldap.x86_64 : A module for PHP 8.1 applications that use LDAP
php8.1-mbstring.x86_64 : A module for PHP 8.1 applications which need multi-byte string handling
php8.1-mysqlnd.x86_64 : A module for PHP 8.1 applications that use MySQL databases
php8.1-odbc.x86_64 : A module for PHP 8.1 applications that use ODBC databases
php8.1-pdo.x86_64 : A database access abstraction module for PHP 8.1 applications
php8.1-pgsql.x86_64 : A PostgreSQL database module for PHP 8.1
php8.1-process.x86_64 : Modules for PHP 8.1 script using system process interfaces
php8.1-pspell.x86_64 : A module for PHP 8.1 applications for using pspell interfaces
php8.1-snmp.x86_64 : A module for PHP 8.1 applications that query SNMP-managed devices
php8.1-soap.x86_64 : A module for PHP 8.1 applications that use the SOAP protocol
php8.1-tidy.x86_64 : Standard PHP 8.1 module provides tidy library support
php8.1-xml.x86_64 : A module for PHP 8.1 applications which use XML
～省略～
php8.3-modphp.x86_64 : PHP 8.3 module for Apache HTTP Server
```
※ちなみにphp8.3にはmodphpのパッケージがありました。

公式のリリースノートではphp8.1のmod_phpについて明確な記載は見当たりませんでした。
https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20241001.html#major-updates-2023.5.20241001
## php.confの修正
mod_phpが使えないようであるため、php-fpmで動作するようにphp.confを修正する必要があると考えました。
mod_phpではなくphp-fpmで動作するためにphp.confの以下の箇所を修正しました。
修正前のphp.conf
```ruby:例
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
```
修正後のphp.conf
```ruby:例
<IfModule proxy_module>
    # .phpファイルに対してPHP-FPMを使う
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/app/public/$1
</IfModule>
```

以上が
**・mysqlのインストール**
**・PHPのインストール**
**・設定ファイル(confファイル)の移動**
**・PHP.confの修正**
についての記事になります。

# ここまでの感想
初心者のため、ここまででもわからないことが多く時間がかかりました。

# 次回は続きの作業を記載します。