Elastic Beanstalk Linux アプリケーションを Amazon Linux 2 に移行する - AWS Elastic Beanstalk

Elastic Beanstalk Linux アプリケーションを Amazon Linux 2 に移行する

AWS Elastic Beanstalk は Amazon Linux 2 を Linux プラットフォーム用のオペレーティングシステムとして使用します。Amazon Linux AMI に基づく以前の世代のプラットフォームブランチは、現在、非推奨です。Linux プラットフォームの詳細については、「Elastic Beanstalk Linux プラットフォーム」を参照してください。

Elastic Beanstalk アプリケーションが Amazon Linux AMI プラットフォームブランチに基づいていている場合について、このページでアプリケーションの環境を Amazon Linux 2 に移行する方法を説明します。2 つのプラットフォーム世代は、既存のアプリケーションとの下位互換性があるとは限りません。さらに、アプリケーションコードが新しいプラットフォームバージョンに正常にデプロイされた場合でも、オペレーティングシステムとランタイムの違いにより、動作やパフォーマンスが異なる場合があります。Amazon Linux AMI と Amazon Linux 2 は同じ Linux カーネルを共有しますが、初期化システム、libc バージョン、コンパイラツールチェーン、およびさまざまなパッケージが異なります。また、プラットフォーム固有のバージョンのランタイム、ビルドツール、およびその他の依存関係も更新されました。したがって、時間をかけて開発環境でアプリケーションを徹底的にテストし、必要な調整を行うことをお勧めします。

本番稼働用に移行する準備ができたら、Elastic Beanstalk では、アップグレードを実行するために Blue/Green デプロイが必要です。プラットフォーム更新戦略の詳細については、「Elastic Beanstalk 環境のプラットフォームバージョンの更新」を参照してください。

注記

Elastic Beanstalk コンソールは、非推奨の多くの Amazon Linux AMI プラットフォームブランチについて、プラットフォーム固有の移行のヒントを提供します。この情報は、これらの非推奨のプラットフォームブランチのいずれかを使用する環境のダッシュボードを表示するとき、または新しい環境を作成するときにこれらのブランチのいずれかを選択したときに表示されます。いずれの場合も、コンソールには「情報」リンク付きの警告が表示されます。このプラットフォームの移行情報を表示するには、「情報」を選択してください。ヘルプパネルが開き、関連情報が表示されます。

すべての Linux プラットフォームに関する考慮事項

次の表に、Amazon Linux 2 へのアプリケーションの移行を計画する際に注意すべき考慮事項を示します。これらの考慮事項は、特定のプログラミング言語やアプリケーションサーバーに関係なく、任意の Elastic Beanstalk Linux プラットフォームに適用されます。

エリア 変更と情報

設定ファイル

Amazon Linux 2 プラットフォームでは、以前と同じように設定ファイルを使用でき、すべてのセクションは同じように動作します。ただし、特定の設定は、以前の Amazon Linux AMI プラットフォームと同じように機能しない場合があります。次に例を示します。

  • 設定ファイルを使用してインストールしたソフトウェアパッケージの中には、Amazon Linux 2 で使用できないものや、名前が変更されているものがあります。

  • 一部のプラットフォーム固有の設定オプションは、プラットフォーム固有の名前空間から、プラットフォームに依存しない異なる名前空間に移行しました。

  • .ebextensions/nginx ディレクトリで提供されるプロキシ設定ファイルは、.platform/nginx プラットフォームのフックディレクトリに移動する必要があります。詳細については、Elastic Beanstalk Linux プラットフォームの拡張 の「リバースプロキシの設定」セクションを展開します。

環境インスタンスでカスタムコードを実行するには、プラットフォームフックを使用することをお勧めします。.ebextensions 設定ファイルでコマンドやコンテナコマンドを使用することはできますが、操作は簡単ではありません。たとえば、YAML ファイル内にコマンドスクリプトを記述することは、面倒でテストが難しい場合があります。

.ebextensions リソースへのリファレンスが必要なスクリプトについては、AWS CloudFormation 設定ファイルを使用する必要があります。

プラットフォームフック

Amazon Linux 2 プラットフォームは、実行可能ファイルを追加して環境のインスタンス上のディレクトリをフックすることで、環境のプラットフォームを拡張する新しい方法を導入します。以前の Linux プラットフォームバージョンでは、カスタムプラットフォームフックを使用していた可能性があります。これらのフックは、マネージドプラットフォーム用に設計されておらず、サポートされていませんでしたが、場合によっては便利な方法で動作する可能性があります。Amazon Linux 2 プラットフォームバージョンでは、カスタムプラットフォームフックは機能しません。すべてのフックを新しいプラットフォームフックに移行する必要があります。詳細については、Elastic Beanstalk Linux プラットフォームの拡張 の「プラットフォームフック」セクションを展開します。

サポートされているプロキシサーバー

Amazon Linux 2 プラットフォームのバージョンは、Amazon Linux AMI プラットフォームバージョンでサポートされている各プラットフォームと同じリバースプロキシサーバーをサポートします。すべての Amazon Linux 2 プラットフォームのバージョンは、デフォルトのリバースプロキシサーバーとして nginx を使用します。Tomcat、Node.js、PHP、Python のプラットフォームも、代替として Apache HTTPD をサポートします。このセクションの説明の通り、すべてのプラットフォームでプロキシサーバーの設定が一貫して有効にされています。ただし、プロキシサーバーの設定は、Amazon Linux AMI の設定とは少し異なります。すべてのプラットフォームの相違点は次のとおりです。

  • デフォルトは nginx – すべての Amazon Linux 2 プラットフォームバージョンで、デフォルトのプロキシサーバーは nginx です。Tomcat、PHP、Python の Amazon Linux AMI プラットフォームバージョンでは、デフォルトのプロキシサーバーは Apache HTTPD でした。

  • 一貫した名前空間 – すべての Amazon Linux 2 プラットフォームバージョンでは、aws:elasticbeanstalk:environment:proxy 名前空間を使用してプロキシサーバーを設定します。Amazon Linux AMI プラットフォームのバージョンでは、プラットフォームごとの決定となり、Node.js は異なる名前空間を使用していました。

  • 設定ファイルの場所 – プロキシ設定ファイルは、すべての Amazon Linux 2 プラットフォームバージョンの .platform/nginx および .platform/httpd ディレクトリに配置する必要があります。Amazon Linux AMI プラットフォームのバージョンでは、これらの場所はそれぞれ .ebextensions/nginx.ebextensions/httpd でした。

プラットフォーム固有のプロキシ設定の変更については、プラットフォーム固有の考慮事項 を参照してください。Amazon Linux 2 プラットフォームのプロキシ設定の詳細については、Elastic Beanstalk Linux プラットフォームの拡張 の「リバースプロキシ設定」セクションを展開してください。

インスタンスプロファイル

Amazon Linux 2 プラットフォームでは、インスタンスプロファイルを設定する必要があります。インスタンスプロファイルがなくても、環境の作成が一時的に成功する可能性はありますが、インスタンスプロファイルを必要とするアクションが失敗し始めると、作成直後に環境内にエラーが表示されることがあります。詳細については、「Elastic Beanstalk インスタンスプロファイルの管理」を参照してください。

拡張ヘルス

Amazon Linux 2 プラットフォームのバージョンでは、デフォルトで拡張ヘルスが有効になります。これは、環境の作成に Elastic Beanstalk コンソールを使用しない場合、変更されます。コンソールでは、プラットフォームのバージョンに関係なく、可能な限り、デフォルトで拡張ヘルスが有効になります。詳細については、「拡張状態ヘルスレポートおよびモニタリング」を参照してください。

カスタム AMI

環境でカスタム AMI を使用する場合は、Elastic Beanstalk Amazon Linux 2 プラットフォームを使用して、新しい環境用に Amazon Linux 2 に基づく新しい AMI を作成します。

カスタムプラットフォーム

Amazon Linux 2 プラットフォームバージョンのマネージド AMI は、カスタムプラットフォームをサポートしていません。

プラットフォーム固有の考慮事項

このセクションでは、特定の Elastic Beanstalk Linux プラットフォームに固有の移行に関する考慮事項について説明します。

以下の表に、Docker プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

ストレージ

Elastic Beanstalk は、ストレージドライバを使用して Docker イメージとコンテナデータを保存するように Docker を設定します。Amazon Linux AMI では、Elastic Beanstalk はデバイスマッパーストレージドライバを使用しました。パフォーマンスを向上させるために、Elastic Beanstalk は追加の Amazon EBS ボリュームをプロビジョンしました。Amazon Linux 2 Docker プラットフォームバージョンでは、Elastic Beanstalk は OverlayFS ストレージドライバを使用し、別のボリュームを必要とせずにパフォーマンスを向上させます。

Amazon Linux AMI では、BlockDeviceMappings 名前空間の aws:autoscaling:launchconfiguration オプションを使用して Docker 環境にカスタムストレージボリュームを追加した場合は、Elastic Beanstalk がプロビジョンする /dev/xvdcz Amazon EBS ボリュームも追加することをお勧めします。その後このボリュームを Elastic Beanstalk がプロビジョンすることはないので、設定ファイルから削除する必要があります。詳細については、「(Amazon Linux 2 より前の) Amazon Linux AMI での Docker 設定」を参照してください。

プライベートリポジトリの認証

Docker で生成された認証ファイルを提供してプライベートリポジトリに接続するときに、Amazon Linux AMI Docker プラットフォームバージョンに必要な古い形式に変換する必要がなくなりました。Amazon Linux 2 Docker プラットフォームバージョンは新しい形式をサポートしています。詳細については、「プライベートリポジトリからのイメージの使用」を参照してください。

プロキシサーバー

Amazon Linux 2 Docker プラットフォームバージョンは、プロキシサーバーの背後で実行されないスタンドアロンコンテナをサポートしていません。Amazon Linux AMI Docker プラットフォームバージョンでは、以前は none 名前空間の ProxyServer オプションとして aws:elasticbeanstalk:environment:proxy の値を使用することができました。

以下の表に、Go プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

ポートの受け渡し

Amazon Linux 2 プラットフォームでは、Elastic Beanstalk は PORT 環境変数を使用してアプリケーションプロセスにポート値を渡しません。PORT 環境プロパティを自分で設定することで、プロセスのこの動作をシミュレートできます。ただし、複数のプロセスがあり、Elastic Beanstalk が増分ポート値をプロセス (5000、5100、5200 など) に渡すことを期待している場合は、実装を変更する必要があります。詳細については、「Elastic Beanstalk Linux プラットフォームの拡張」の「リバースプロキシの設定」セクションを展開します。

次の表に、Java SE プラットフォームの Corretto プラットフォームブランチの移行情報を示します。

エリア 変更と情報

Corretto と OpenJDK

Java プラットフォームの Standard Edition (Java SE) を実装するために、Amazon Linux 2 プラットフォームブランチは、Open Java Development Kit (OpenJDK) の AWS ディストリビューションである Amazon Corretto を使用します。以前の Elastic Beanstalk Java SE プラットフォームブランチでは、Amazon Linux AMI に含まれている OpenJDK パッケージを使用しています。

ビルドツール

Amazon Linux 2 プラットフォームには、gradlemavenantの新しいバージョンのビルドツールがあります。

JAR ファイルの処理

Amazon Linux 2 プラットフォームでは、ソースバンドル (ZIP ファイル) に 1 つの JAR ファイルが含まれていて、他のファイルが含まれていない場合、Elastic Beanstalk は JAR ファイルの名前を application.jar に変更しなくなりました。名前変更が行われるのは、ZIP ファイル内ではなく、単独で JAR ファイルを送信した場合のみです。

ポートの受け渡し

Amazon Linux 2 プラットフォームでは、Elastic Beanstalk は PORT 環境変数を使用してアプリケーションプロセスにポート値を渡しません。PORT 環境プロパティを自分で設定することで、プロセスのこの動作をシミュレートできます。ただし、複数のプロセスがあり、Elastic Beanstalk が増分ポート値をプロセス (5000、5100、5200 など) に渡すことを期待している場合は、実装を変更する必要があります。詳細については、「Elastic Beanstalk Linux プラットフォームの拡張」の「リバースプロキシの設定」セクションを展開します。

Java 7

Elastic Beanstalk は、Amazon Linux 2 Java 7 プラットフォームブランチをサポートしていません。Java 7 アプリケーションをお持ちの場合は、Corretto 8 または Corretto 11 に移行してください。

以下の表に、Tomcat プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

設定オプション

Amazon Linux 2 プラットフォームバージョンでは、Elastic Beanstalk は aws:elasticbeanstalk:environment:proxy 名前空間内の設定オプションとオプション値のサブセットのみをサポートします。各オプションの移行情報は次のとおりです。

オプション 移行情報

GzipCompression

Amazon Linux 2 プラットフォームバージョンではサポートされていません。

ProxyServer

Amazon Linux 2 Tomcat プラットフォームのバージョンは、nginx と Apache の HTTPD バージョン 2.4 プロキシサーバーの両方をサポートしています。しかし、Apache バージョン 2.2 はサポートされていません。

Amazon Linux AMI プラットフォームのバージョンでは、デフォルトのプロキシは Apache 2.4 でした。デフォルトのプロキシ設定を使用し、カスタムプロキシ設定ファイルを追加した場合、プロキシ設定は Amazon Linux 2 で引き続き動作します。ただし、apache/2.2 オプション値を使用した場合は、プロキシ設定を Apache バージョン 2.4 に移行する必要があります。

XX:MaxPermSize 名前空間の aws:elasticbeanstalk:container:tomcat:jvmoptions オプションは、Amazon Linux 2 プラットフォームバージョンではサポートされていません。永続世代のサイズを変更するためのJVM設定は、Java 7 以前のバージョンにのみ適用されるため、Amazon Linux 2 プラットフォームバージョンには適用されません。

アプリケーションのパス

Amazon Linux 2 プラットフォームでは、環境の Amazon EC2 インスタンス上のアプリケーションのディレクトリへのパスは /var/app/current です。Amazon Linux AMI プラットフォームでは /var/lib/tomcat8/webapps でした。

以下の表に、Node.js プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

インストールされている Node.js のバージョン

Amazon Linux 2 プラットフォームでは、Elastic Beanstalk は複数の Node.js プラットフォームブランチを維持し、各プラットフォームバージョンのプラットフォームブランチに対応する Node.js メジャーバージョンの最新バージョンのみをインストールします。たとえば、Node.js 12 プラットフォームブランチの各プラットフォームバージョンには、デフォルトで Node.js 12.x.y のみがインストールされています。Amazon Linux AMI プラットフォームバージョンでは、各プラットフォームバージョンに複数の Node.js バージョンの複数のバージョンをインストールし、単一のプラットフォームブランチのみを維持しました。

アプリケーションで必要な Node.js メジャーバージョンに対応する Node.js プラットフォームブランチを選択します。

Apache HTTPD ログファイル名

Amazon Linux 2 プラットフォームでは、Apache HTTPD プロキシサーバーを使用する場合、HTTPD ログファイル名は access_log および error_log になります。これは、Apache HTTPD をサポートする他のすべてのプラットフォームと一致します。Amazon Linux AMI プラットフォームのバージョンでは、これらのログファイルはそれぞれ access.logerror.log という名前でした。

すべてのプラットフォームのログファイル名と場所の詳細については、Elastic Beanstalk が CloudWatch Logs を設定する方法 を参照してください。

設定オプション

Amazon Linux 2 プラットフォームでは、Elastic Beanstalk は aws:elasticbeanstalk:container:nodejs 名前空間の設定オプションをサポートしていません。オプションの中には、代替方法があります。各オプションの移行情報は次のとおりです。

オプション 移行情報

NodeCommand

Procfile ファイル内で scripts または package.json キーワードを使用して、スタートスクリプトを指定します。

NodeVersion

engines ファイル内で package.json キーワードを使用して、Node.js のバージョンを指定します。指定できるのは、プラットフォームブランチに対応する Node.js バージョンのみであることに注意してください。たとえば、Node.js 12 プラットフォームブランチを使用している場合は、12.x.y Node.js バージョンのみを指定できます。詳細については、「package.json ファイルを使用した Node.js の依存関係の指定」を参照してください。

GzipCompression

Amazon Linux 2 プラットフォームバージョンではサポートされていません。

ProxyServer

Amazon Linux 2 Node.js プラットフォームバージョンでは、このオプションは aws:elasticbeanstalk:environment:proxy 名前空間に移動しました。nginx (デフォルト) と apache のいずれかを選択できます。

Amazon Linux 2 Node.js プラットフォームバージョンは、プロキシサーバーの背後で実行されないスタンドアロンアプリケーションをサポートしていません。Amazon Linux AMI Node.js プラットフォームバージョンでは、以前は none 名前空間の ProxyServer オプションとして aws:elasticbeanstalk:container:nodejs の値を使用することができました。環境がスタンドアロンアプリケーションを実行している場合は、プロキシサーバー (nginx または Apache) がトラフィックを転送するポートをリッスンするようにコードを更新します。

var port = process.env.PORT || 8080; app.listen(port, function() { console.log('Server running at http://127.0.0.1:%s', port); });

以下の表に、PHP プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

PHP ファイル処理

Amazon Linux 2 プラットフォームでは、PHP ファイルは PHP-FPM (CGI プロセスマネージャ) を使用して処理されます。Amazon Linux AMIプラットフォームでは、mod_php (Apache モジュール) を使用しました。

プロキシサーバー

Amazon Linux 2 PHP プラットフォームのバージョンは、nginx と Apache HTTPD プロキシサーバーの両方をサポートします。デフォルトは nginx です。

Amazon Linux AMI PHP プラットフォームのバージョンは、Apache HTTPD のみをサポートします。カスタム Apache 設定ファイルを追加した場合は、ProxyServer 名前空間の aws:elasticbeanstalk:environment:proxy オプションを apache に設定できます。

以下の表に、Python プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

WSGI サーバー

Amazon Linux 2 プラットフォームでは、Gunicorn がデフォルトの WSGI サーバーです。デフォルトでは、Gunicorn はポート 8000 でリッスンします。このポートは、アプリケーションが Amazon Linux AMI プラットフォームで使用したものとは異なる場合があります。WSGIPath 名前空間の aws:elasticbeanstalk:container:python オプションを設定する場合は、値を Gunicorn の構文に置き換えます。詳細については、「Python 設定の名前空間」を参照してください。

または、Procfile を使用して WSGI サーバーを指定および設定することもできます。詳細については、「Procfile を使用した WSGI サーバーの設定」を参照してください。

アプリケーションのパス

Amazon Linux 2 プラットフォームでは、環境の Amazon EC2 インスタンス上のアプリケーションのディレクトリへのパスは /var/app/current です。Amazon Linux AMI プラットフォームでは /opt/python/current/app でした。

プロキシサーバー

Amazon Linux 2 Python プラットフォームのバージョンは、nginx と Apache HTTPD プロキシサーバーの両方をサポートします。デフォルトは nginx です。

Amazon Linux AMI Python プラットフォームのバージョンは、Apache HTTPD のみをサポートします。カスタム Apache 設定ファイルを追加した場合は、ProxyServer 名前空間の aws:elasticbeanstalk:environment:proxy オプションを apache に設定できます。

以下の表に、Ruby プラットフォームの Amazon Linux 2 プラットフォームバージョンの移行情報を示します。

エリア 変更と情報

インストールされている Ruby バージョン

Amazon Linux 2 プラットフォームでは、Elastic Beanstalk は、各プラットフォームバージョンに、プラットフォームブランチに対応する単一の Ruby バージョンの最新バージョンのみをインストールします。たとえば、Ruby 2.6 プラットフォームブランチの各プラットフォームバージョンには Ruby 2.6.x のみインストールされています。Amazon Linux AMI プラットフォームのバージョンでは、複数の Ruby バージョンの最新バージョン (2.4.x、2.5.x、2.6.x など) がインストールされています。

使用しているプラットフォームブランチに対応していない Ruby バージョンをアプリケーションで使用している場合は、アプリケーションに適した Ruby バージョンのプラットフォームブランチに切り替えることをお勧めします。

アプリケーションサーバー

Amazon Linux 2 プラットフォームでは、Elastic Beanstalk は、すべての Ruby プラットフォームバージョンに対して Puma アプリケーションサーバーのみをインストールします。Procfile を使用して別のアプリケーションサーバーを起動し、Gemfile を使用してインストールできます。

Amazon Linux AMI プラットフォームでは、Ruby バージョンごとに 2 種類のプラットフォームブランチをサポートしていました。1 つは Puma アプリケーションサーバーで、もう 1 つは Passenger アプリケーションサーバーです。アプリケーションで Passenger を使用している場合は、Passenger をインストールして使用するように Ruby 環境を設定できます。

詳細な説明と例については、「Elastic Beanstalk Ruby プラットフォームを使用する」を参照してください。