リタイア予定の Elastic Beanstalk 環境を異なるプラットフォームブランチのバージョンへアップデートする方法

困っていた内容

Elastic Beanstalk でこれまで使っていたプラットフォームブランチに対するリタイアメント(廃止)の通知が来ました。
そのため、サポートされているプラットフォームブランチに移行したいと考えていますが、マネージメントコンソール上で選択できません。
どうすれば良いでしょうか。

例:
リタイアメント予定の Amazon Linux 1 ベースの PHP プラットフォーム
↓
最新バージョンの Amazon Linux 2 ベースの PHP プラットフォーム

どう対応すればいいの?

マネージメントコンソール上の「プラットフォームのバージョンを更新」では、異なるプラットフォームブランチを選択して、アップデートすることはできません。
なお、同一のプラットフォームブランチのバージョンアップは可能です。

異なるプラットフォームブランチへアップデートするには、バージョンアップしたいブランチの新しい環境を作成して、古い環境から新しい環境へ Blue/Green デプロイメントすることで環境移行に伴うバージョンアップが可能です。

方法 2 – Blue/Green デプロイを実行する。この方法は、異なるプラットフォームブランチ (異なるランタイム、ウェブサーバー、アプリケーションサーバー、またはオペレーティングシステムを使用) のプラットフォームバージョンに更新する場合、または異なるメジャープラットフォームバージョンに更新する場合にお勧めします。これは、新しいランタイム機能や最新の Elastic Beanstalk 機能を利用する場合、あるいは非推奨または廃止されたプラットフォームブランチから移行する場合に適しています。

Elastic Beanstalk 環境のプラットフォームバージョンの更新 - AWS Elastic Beanstalk

やってみた

Amazon Linux1 ベースのリタイアメント予定の環境から、最新バージョンの Amazon Linux2 ベースの環境へ移行してみます。

Amazon Linux 1 ベースの環境を作成

Beanstalk のマネージメントコンソールからプラットフォームを作成します。 ここでは、PHP のプラットフォームでリタイアメントが予定されている「PHP 7.3 runnnig on 64bit Amazon Linux」を利用して環境を作成します。

数分後、作成が完了するとヘルスチェックが緑色になっていることを確認します。 また、リタイアメントが予定されているので、プラットフォームが赤色の「Deprecated」になっています。

今回は、Beanstalk が事前に用意している PHP のサンプルアプリケーションを利用したので、作成された環境の URL へアクセスすると以下のような画面が表示されます。

Amazon Linux 2 に更新できないことを確認

環境のプラットフォームの変更画面で、Amazon Linux 1 から Amazon Linux2 のプラットフォームに変更できないことを確認します。

Amazon Linux 2 ベースの環境を作成

次に、最新バージョンのプラットフォームブランチへ移行するために、Amazon Linux2 ベースの環境を新規作成します。 要領としては、Amazon Linux 1 ベースと同様の操作で作成します。

違いとしては、プラットフォームブランチを Amazon Linux 2 ベースの PHP プラットフォームを選択します。

作成すると、同一の Beanstalk アプリケーションに 2 つの環境が作成されたことを確認します。

動作検証

ここで、今回はサンプルアプリケーションなので Beanstalk のヘルスチェックが「Green」になっていますが、実際に運用しているアプリケーションは互換性の違いで不具合が出る可能性があるので、 Blue/Green デプロイメント前にしっかりと動作検証しましょう。

AWS 公式のドキュメントにも以下の様に記載されていますので、考慮事項について入念に確認しましょう。

アプリケーションコードを移行する先の新しい環境を使用します。特に、次のことに注意してください。

・ 開発フェーズで検出できなかったアプリケーションの互換性問題を見つけて修正します。

・ アプリケーションで設定ファイルを使用して行ったすべてのカスタマイズが新しい環境で正しく機能することを確認します。これには、オプション設定、追加でインストールしたパッケージ、カスタムセキュリティポリシー、環境インスタンスにインストールしたスクリプトや設定ファイルが含まれる場合があります。

・ アプリケーションでカスタム Amazon Machine Image (AMI) を使用している場合は、新しいプラットフォームバージョンの AMI に基づいて新しいカスタム AMI を作成します。詳細については、「カスタム Amazon Machine Image (AMI) の使用」を参照してください。特に、これが必要となるのは、アプリケーションで使用している Windows Server プラットフォームに AMI が含まれていて、Windows Server V2 プラットフォームバージョンに移行する場合です。この場合は、「Windows サーバープラットフォームの以前のメジャーバージョンからの移行」も参照してください。

新しい環境でアプリケーションが適切に動作することが確認されるまで、修正のテストとデプロイを繰り返します。

Elastic Beanstalk 環境のプラットフォームバージョンの更新 - AWS Elastic Beanstalk

Blue/Green デプロイメント

動作検証が終わったら、Blue/Green デプロイメントによって環境を移行します。 具体的には、旧環境の CNAME を新環境と入れ替えて、新環境を旧環境の CNAME でアクセスできるようにします。

以下の通り、新環境のマネージメントコンソールを開いて、環境 URL のスワップの画面で旧環境を選択して、スワップを実行します。

しばらくすると、スワップが完了して最新バージョンのプラットフォームブランチである Amazon Linux 2 ベースの環境へ移行されています。

参考資料