Go ランタイムは、アプリケーションのコードと依存関係をインストールして、フレキシブル環境でそのアプリケーションを実行する役割を果たすソフトウェア スタックです。
Go のバージョン
Go 1.22 は Buildpack を使用します。サポートされている Go のバージョンと、それに対応する Ubuntu のバージョンの完全なリストについては、ランタイム サポート スケジュールをご覧ください。
サポート対象の Go バージョンを使用するには、次のことを行う必要があります。
gcloud CLI
バージョン 420.0.0 以降をインストールします。CLI ツールを更新するには、gcloud components update
コマンドを実行します。インストールされているバージョンを表示するには、gcloud version
コマンドを実行します。Go では、依存関係の管理に
go.mod
ファイルを使用することをおすすめしています。デプロイ中に依存関係をインストールするには、app.yaml
ファイルと同じフォルダにgo.mod
ファイルを置きます。たとえば、
go.mod
を使用するアプリのフォルダ構造は、次のように表現される必要があります。<application-root>/ --> app.yaml --> go.mod --> Other source files used in your application.
app.yaml
ファイルにruntime_config
とoperating_system
の設定を追加して、オペレーティング システムを指定します。必要に応じて、
app.yaml
にruntime_version
設定を含めると、ランタイム バージョンを指定できます。runtime_version
の設定が指定されていない場合は、デフォルトで最新の Go バージョンが使用されます。
例
Ubuntu 22 で Go 1.22 を指定するには:
runtime: go env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "1.22"
Ubuntu 22 でサポートされている最新の Go バージョンを指定するには、次のようにします。
runtime: go env: flex runtime_config: operating_system: "ubuntu22"
アプリは、app.yaml
ファイルで指定されているバージョンの最新の安定版を使用します。App Engine では、自動で新しいパッチ リビジョンに更新されますが、メジャー バージョンの更新は自動的には行われません。
たとえば、アプリケーションが Go 1.18.10 でデプロイされたとすると、その後、Go 1.18.11 には自動的に更新されますが、自動的にメジャー バージョン Go 1.19 へ更新されることはありません。
app.yaml
ファイルで Go 1.22 を選択すると、Go 1.22 の最新の patch
バージョンが使用可能になります。
runtime: go
env: flex
runtime_config:
operating_system: "ubuntu22"
runtime_version: "1.22"
詳細については、app.yaml
のリファレンスをご覧ください。
以前のランタイム バージョン
Go バージョン 1.15 以前を使用するには、app.yaml
ファイルの runtime
設定にバージョンを go1.x
形式で指定します。例:
runtime: go1.14 env: flex
バージョンが指定されていない場合は、go1.11
のデフォルト バージョンが自動的に選択されます。
アプリは、app.yaml
ファイルで指定されているバージョンの最新の安定版を使用します。App Engine では、自動で新しいパッチ リビジョンに更新されますが、メジャー バージョンの更新は自動的には行われません。
たとえば、アプリケーションが Go 1.14.10 でデプロイされたとすると、その後、Go 1.14.11 には自動的に更新されますが、自動的にメジャー バージョン Go 1.15 へ更新されることはありません。
app.yaml
ファイルで Go ランタイム バージョン go1.15
を選択すると、1.15 の最新バージョン(1.15.15 など)が使用可能になります。
runtime: go1.15 env: flex
他の Go ランタイムのサポート
サポート対象外の Go バージョンを使用する必要がある場合は、カスタム ランタイムを作成し、必要な Go バージョンを含む有効なベースイメージを選択します。
Google 提供のベースイメージまたは Docker Go ベースイメージについては、カスタム ランタイムのビルドをご覧ください。
パッケージをインポートする
アプリを App Engine にデプロイすると、コードがコンパイルされます。デプロイ コマンドを実行すると、まず、アプリの依存関係がローカルの GOPATH
から収集され、すべてビルドサーバーに送信されます。サードパーティのライブラリなど、依存関係がない場合はビルドに失敗します。
ビルドの失敗を回避し、アプリのすべての依存関係がコードと一緒にデプロイされるようにするには、デプロイ前にアプリをローカルでテストする必要があります。
ランタイムの拡張
Go ランタイムを拡張してカスタマイズする方法については、GitHub の Go ランタイム ビルダーをご覧ください。
メタデータ サーバー
アプリケーションのインスタンスは、ホスト名、外部 IP アドレス、インスタンス ID、カスタム メタデータ、サービス アカウント情報など、インスタンスに関する情報を Compute Engine メタデータ サーバーからを取得します。App Engine では、インスタンスごとにカスタム メタデータを設定することはできませんが、プロジェクト単位のカスタム メタデータを設定して、App Engine インスタンスや Compute Engine インスタンスから読み取ることができます。
cloud.google.com/go/compute/metadata
パッケージを使用してメタデータ サーバーにアクセスします。