このBlogを動かしていたAWSのインスタンス。ずっと AL2 を使ってたんだが PHP のバージョンが上がらなくなったのと、AL2 の EOL がそろそろ見えてきたので Amazon Linux 2023 のインスタンスに乗り換え、and ついでにインスタンスタイプも一個上げようと…

したらもう、それは見事に約10日間ハマったさ!

ということで、Amazon Linux 2023 が EOL になったときに慌てないために、Amazon Linux 2 から Amazon Linux 2023 へのWordPress 移設手順を残しておこうと。(先が長いなぁ

1.発端

WordPress の更新しようとしたら「PHP のバージョンが古い!」的なメッセージが出て更新ができなかったところが今回の泥沼の発端。
インスタンス上でOSのアップデートかけても 7.3 までしか上がらず、パッケージのバージョンを明示しても今度はエラー続発でバージョン上げられず。

んで Web 上を徘徊してたら「Amazon Linux 2 が2025年6月でサポート終了」という話を見つけて、「んじゃ GW に時間確保してインスタンスの引っ越しするか」と。

 

2.用意したもの

既存の1ランク上のインスタンス
Amazon Linux 2023 AMI
未使用で放置してたネットワークインターフェース2個
/var/wwwにマウントするEBS

ネットワークインターフェースはセキュリティーグループに紐づけ済、ローカルIP割り当て済だったので、特にハマることもなくインスタンスは起動。

 

3.インスタンス起動直後の騒動 (TeraTermトラップ)

最初のトラップは、インスタンスへのSSH接続。

TeraTerm 起動して、ハッシュ読み込んで、キー読み込ませて…、ログインできない。
ユーザー名とキーファイル指定して「ログイン」ボタン押しても、SSH認証ウィンドウに戻ってくる!

ならば!とEC2 Instance Connectでつなげるべく、VPCでエンドポイント作ってエンドポイント用のセキュリティーグループ作って、ブラウザベースでつなげようとしてもSSHでエラーになる…。なんで?ネットでさんざん調べて設定に間違いないはずなのに。

改めて「Amazon Linux 2023」と「TeraTerm」でネットを深堀していくと、

・OpenSSH 8.8から、SHA-1 (ssh-rsa) アルゴリズムの署名が無効化された (そういえば「暗号割れた」って昔大騒ぎになってた)
・接続キーは、ssh-rsa ではなく rsa-sha2-256 や rsa-sha2-512、ssh-ed25519 で作成される
・TeraTermは、 5.0 beta 1 から rsa-sha2-256 や rsa-sha2-512 をサポート
・それ以前のバージョンでは、OpenSSH 8.8 での接続ができない

で、うちで使ってたのは TeraTerm 2.2!いつのだよ!
まぁ、アプリケーションってプッシュでの通知がないとなかなかアップデートとかしないけどさぁ。

ってことで、TeraTerm を最新版に入れ替えて無事SSH接続成功。次は引っ越し!
エンドポイント経由での接続顛末は後述。

 

4.WordPress 引っ越しトラップ

続いていよいよ本命のWordPress引っ越し。

の前に、ブラウザに表示されるアドレスバーに表示の通りこのサイトはHTTPSに対応している。
AWSだとSSL証明書を乗せたELBを経由することでHTTPSに対応できるため、新しいインスタンスをELBのターゲットに追加しておく。

WordPressのデータベースは、AWS MariaDB RDSを使っているので、「WordPress 再インストール 既存データベース」で検索した結果。
・トップディレクトリの「.htaccess」と「wp-config.php」ファイル
・/var/www/html/wp-content ディレクトリ配下の「uploads」「themes」「plugins」の各ディレクトリ
これらのバックアップを取得しておいて、WordPress 新規インストール後にリストアしてやればいい、と書いてあったのでやってみた。

ダメだった。

何がダメかというと、
・テーマが「Twenty Twenty-Four」で固定されて、さらに過去の記事が表示されない
・管理画面(ログイン画面含む)のレイアウトが崩れていて、正常に動作していない
・「テーマ」のメニューを選択しても、インストール済みテーマが表示されない
・「投稿」メニューを選択しても、過去記事が表示されない

まずは管理画面の正常化!ということで、ネットに書いてあったことは一通り試したが改善の兆しなし。

行き詰ったので、ローカル(自宅)にあるvSphere Hyper-visor 7 上に仮想マシン作って、phpとApacheとMariaDBインストールして、WordPress インストールして、ブラウザからIP直打ちして…、正常に表示されるじゃん?管理画面も正常に動作してるじゃん?なぜ?

 

5.解決編

解決編というか、PHPのバージョンを細かく指定しても、ネットで言及されているファイルのパラメータ設定しても、WordPressのバージョン刻んでみても、煮ても焼いても食えない状態に陥ったので最終手段をとることに。

最終手段、それは/var/www/html ディレクトリの丸ごとコピー。
システム更新でディレクトリ丸ごとコピーってのは、「正直システム屋としてどうなのよ?」と思わなくはないが、今回は精神的に結構追い詰められてたんで精神衛生優先で!

本来ならインスタンス間でSCPすりゃいいんだけど、本当にいろいろ余裕なくてWinSCP使ってコピペ。
だもんだからDown/Upで結構時間喰う。でもUp後にサイトを表示すると正常に表示されてる!管理画面も崩れてない!WordPressのバージョンアップも正常に完了した!

嗚呼、本当にあの10日間は何だったのだろうか…。

 

6.もう一つの解決 (AWS EC2 Instance Connect)

WordPress がひと段落してちょっと余裕ができたので、EC2 Instance Connect がつながらない原因を探ろう、と思って接続画面で表示されている「アラート」をよくよく見ると、エンドポイント?のパブリックIPアドレス?をセキュリティーグループに追加する必要がある?

EC2 Instance Connect の設定方法をネット上で探した限りでは、
・エンドポイント用セキュリティーグループ アウトバウンド IPv4 / SSH / TCP / Port 22 / 0.0.0.0/0
・EC2 側用セキュリティーグループ インバウンド IPv4 / SSH / TCP / Port 22 / エンドポイント用セキュリティーグループ
この2つのセキュリティーグループを作成すればつながるって記事しか見当たらなかったんだが…。

どうやら上記2つのセキュリティーグループのほかに、エンドポイント用のパブリックIPアドレスとSSH関連の設定を、インスタンスがつながっているセキュリティーグループのインバウンドルールに対して追加してやらなければならなかったようで。

この設定を追加したらあら不思議(不思議じゃない)、ブラウザベースでのコンソール接続成功。今までの苦悩は何だったのか!

 

7.今回のキーワード

WordPressを別のマシンに移植(引っ越し)するには
 「/var/www/html」ディレクトリ(WordPressトップディレクトリ)をコピペ!
 ※但し、データベースを外だし(別筐体)している場合に限る


EC2 Instance ConnectがSSHエラーでつながらない場合は
 エンドポイントのパブリックIPアドレスとSSHの設定をサービス用(or管理用)セキュリティーグループのインバウンドルールに追加してみる

あ”~本当に疲れた。