Go ランタイム

Go ランタイムは、アプリケーションのコードと依存関係をインストールして、フレキシブル環境でそのアプリケーションを実行する役割を果たすソフトウェア スタックです。

Go のバージョン

Go 1.23(プレビュー版)は buildpacks を使用します。サポートされている 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_configoperating_system の設定を追加して、オペレーティング システムを指定します。

  • 必要に応じて、app.yamlruntime_version 設定を含めると、ランタイム バージョンを指定できます。runtime_version の設定が指定されていない場合は、デフォルトで最新の Go バージョンが使用されます。

  • Ubuntu 22 で Go 1.23(プレビュー版)を指定するには、次のようにします。

    runtime: go
    env: flex
    
    runtime_config:
        operating_system: "ubuntu22"
        runtime_version: "1.23"
    
  • 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.23(プレビュー版)を選択すると、Go 1.23(プレビュー版)の最新の patch バージョンが使用可能になります。

  runtime: go
  env: flex

  runtime_config:
      operating_system: "ubuntu22"
      runtime_version: "1.23"

詳細については、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 パッケージを使用してメタデータ サーバーにアクセスします。