Go ランタイム

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

  • バージョン 1.18 以降は Buildpack を使用してビルドされているため、app.yaml ファイルでオペレーティング システムを選択する必要があります。たとえば、Go 1.22 を使用するには、オペレーティング システムとして Ubuntu 22 を指定する必要があります。

  • バージョン 1.15 以前は Docker を使用してビルドされています。

サポートされている Go のバージョンと、それに対応する Ubuntu のバージョンの完全なリストについては、ランタイム サポート スケジュールをご覧ください。

Go のバージョンを選択する

新しいランタイム バージョン

Go ランタイム バージョン 1.18 以降の場合、app.yamlruntime_configoperating_system の設定を含めて、オペレーティング システムを指定する必要があります。

新しいランタイムを使用するには、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.yamlruntime_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 構成ファイルの go1.x 形式を使用して 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

パッケージをインポートする

アプリを App Engine にデプロイすると、コードがコンパイルされます。デプロイ コマンドを実行すると、まず、アプリの依存関係がローカルの GOPATH から収集され、すべてビルドサーバーに送信されます。サードパーティのライブラリなど、依存関係がない場合はビルドに失敗します。

ビルドの失敗を回避し、アプリのすべての依存関係がコードと一緒にデプロイされるようにするには、デプロイ前にアプリをローカルでテストする必要があります。

ランタイムの拡張

Go ランタイムを拡張してカスタマイズする方法については、GitHub の Go ランタイム ビルダーをご覧ください。

メタデータ サーバー

アプリケーションのインスタンスは、ホスト名、外部 IP アドレス、インスタンス ID、カスタム メタデータ、サービス アカウント情報など、インスタンスに関する情報を Compute Engine メタデータ サーバーからを取得します。App Engine では、インスタンスごとにカスタム メタデータを設定することはできませんが、プロジェクト単位のカスタム メタデータを設定して、App Engine インスタンスや Compute Engine インスタンスから読み取ることができます。

cloud.google.com/go/compute/metadata パッケージを使用してメタデータ サーバーにアクセスします。