カスタム ランタイムでは、すべてのフレキシブル環境でサポートされている別の言語の実装や、Google から提供されるイメージのカスタマイズを行うことができます。また、受信 HTTP リクエストを処理可能な任意の言語でコードを記述することもできます(例)。カスタム ランタイムを使用すると、フレキシブル環境でインフラストラクチャのスケーリング、モニタリング、ロード バランシングを管理できるため、アプリケーションの構築に集中できます。
カスタム ランタイムを作成するには、次のことが必要です。
- アプリケーションのランタイム構成を記述した
app.yaml
ファイルを App Engine に提供する。 - ランタイム環境を内部で構成する
Dockerfile
を追加する。 - コードが基本的なルールに確実に従うようにする。
app.yaml
ファイルを提供する
app.yaml
構成ファイルには、少なくとも次の設定が含まれている必要があります。
runtime: custom
env: flex
アプリの設定について詳しくは、app.yaml によるアプリの構成をご覧ください。
Dockerfile の作成
Dockerfile の作成に関する包括的なドキュメントは、Docker ウェブサイトで参照できます。カスタム ランタイムを使用している場合は、独自のベースイメージを使用するか、Google のベースイメージを使用するにかかわらず、Dockerfile が必要になります。
ベースイメージを指定する
Dockerfile の最初のコマンドは、通常はベースイメージを指定する FROM
コマンドです。ベースイメージは、コンテナの作成とアプリケーションのビルドに使用されます。独自のベースイメージを作成することも、DockerHub などのコンテナ レジストリからベースイメージを選択することもできます。
Dockerfile を見つける
一般的に、Dockerfile は Dockerfile
という名前で、対応する app.yaml
ファイルと同じディレクトリに配置されます。ただし、ツール環境に応じて要件が異なる場合もあります。たとえば、Maven、Gradle、Eclipse、IntelliJ プラグインなどの Cloud SDK ベースの Java ツールの場合、Dockerfile
を src/main/docker/Dockerfile
に配置し、app.yaml
ファイルを src/main/appengine/app.yaml
に配置する必要があります。詳しくは、ツール環境のドキュメントをご覧ください。
コードの構造
このセクションでは、Google が提供するベースイメージと独自のベースイメージのどちらを使用するかを問わず、コードに実装する必要がある動作を説明します。
ポート 8080 をリッスンする
App Engine のフロントエンドは、受信リクエストをポート 8080 の適切なモジュールにルーティングします。アプリケーション コードが 8080 でリッスンしていることを確認する必要があります。
ライフサイクル イベントを処理する
フレキシブル環境では、特定のライフサイクル イベントがアプリケーションに定期的に送信されます。
アプリケーションのシャットダウン
インスタンスをシャットダウンする必要がある場合、新しい受信リクエストは他のインスタンス(存在する場合)に転送され、現在処理されているリクエストを完了するための時間が与えられます。インスタンスをシャットダウンする場合、フレキシブル環境では通常、STOP
(SIGTERM
)シグナルをアプリコンテナに送信します。アプリがこのイベントに応答する必要はありませんが、これを使用することで、コンテナをシャットダウンする前に必要なクリーンアップ操作を実行できます。通常の状態では、システムはアプリが停止するまで最大 30 秒待機してから、KILL
(SIGKILL
)シグナルを送信し、インスタンスを直ちにシャットダウンします。
まれに、停止によって App Engine が 30 秒のシャットダウン時間を確保できず、インスタンスが終了する前に STOP
シグナルと KILL
シグナルが送信されない可能性があります。この可能性に対応するには、インスタンスの状態を定期的にチェックし、信頼できるデータストアとしてではなく、主にメモリ内キャッシュとして使用するようにします。
ヘルスチェック リクエスト
定期的なヘルスチェック リクエストを使用すると、VM インスタンスが正常にデプロイされたことを確認できます。また、実行中のインスタンスが正常なステータスを維持していることも確認できます。
カスタム ランタイムのビルドとデプロイ
app.yaml
ファイルと DOCKER
ファイルを構成したら、そのコンテナ イメージを App Engine にビルドしてデプロイできます。
また、Artifact Registry に保存されているカスタム ランタイムのビルド済みコンテナ イメージをデプロイすることもできます。たとえば、Cloud Build を使用してイメージを別々にビルドし、それらのイメージを Artifact Registry に格納できます。詳細については、イメージの push と pull をご覧ください。
アプリケーションを Google Cloud と統合する
カスタム ランタイムで動作するアプリケーションは、Google Cloud クライアント ライブラリを使用して Google Cloud サービスにアクセスできます。カスタム ランタイムのアプリケーションでは、標準 API を通じてサードパーティのサービスを利用することもできます。
Google Cloud サービスで認証する
アプリケーションのデフォルト認証情報を使用することで、Google API の認証と呼び出しを簡単に行うことができます。
アプリケーションで Cloud Build を使用して Docker イメージをコンパイルする場合は、cloudbuild
ネットワークにアプリケーションのデフォルト認証情報をホストし、関連付けられた Google Cloud サービスが認証情報を自動的に検索できるようにします。
認証の詳細については、Google での認証をご覧ください。
Logging
App Engine で実行中のアプリケーションにリクエストが送信されると、リクエストとレスポンスの詳細が自動的に記録されます。そのログは、Google Cloud Console のログ エクスプローラで確認できます。
アプリケーションがリクエストを処理するときに、独自のロギング メッセージを stdout
と stderr
に書き込むこともできます。これらのファイルは自動的に収集され、ログ エクスプローラで表示できます。サイズを制限するために、stdout
と stderr
への最新のエントリのみが保持されます。
.log
または .json
で終わるファイルを使用して、/var/log/app_engine/custom_logs
にカスタムログを書き込むこともできます。
アプリケーション コンテナにサードパーティのエージェントを含める場合は、stdout
と stderr
に、またはカスタムログにログを記録するようにエージェントを構成していることを確認します。これにより、これらのエージェントによって生成されたエラーが Cloud Logging で確認できるようになります。
アプリのリクエストログとアプリケーション ログは Cloud Logging エージェントによって収集され、最長 90 日間、最大 1 GB まで保存されます。ログを長期間保存する場合や 1 GB を超えるサイズを保存する場合は、Cloud Storage にログをエクスポートできます。ログをさらに処理するために、BigQuery や Pub/Sub へエクスポートすることもできます。
その他のログも入手できます。デフォルトで構成されているログの一部を以下に挙げます。
ログ名 | ペイロード タイプ | 目的 |
---|---|---|
crash.log |
text | 設定が失敗したときに記録される情報。アプリケーションを実行できなかった場合は、このログを確認してください。 |
monitoring.* |
text | Cloud Monitoring にデータを公開している Docker コンテナから取得した情報。 |
shutdown.log |
text | シャットダウン時に記録された情報。 |
stdout |
テキスト | アプリからの標準出力。 |
stderr |
テキスト | コンテナからの標準エラー。 |
syslog |
テキスト | Docker コンテナ外部の VM システムログ。 |