Go 1.14 が一般提供になりました。

App Engine で Go アプリをビルドする

リージョン ID

REGION_ID は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。既存のアプリでは省略可能ですが、まもなく、新しいアプリのすべてにおいて App Engine の URL に REGION_ID.r を含めることが必須となる予定です。

移行がスムーズに行われるように、リージョン ID を使用するよう App Engine を徐々に更新しています。Google Cloud プロジェクトがまだ更新されていない場合、アプリにリージョン ID が表示されません。ID は既存のアプリでは省略可能なため、リージョン ID が既存のアプリで使用可能になったときに、URL の更新や他の変更を行う必要はありません。

詳しくは、リージョン ID をご覧ください。

このガイドは、App Engine を初めて使用する人が Go アプリの開発、デプロイ、管理に習熟するために役立ちます。

アプリをビルドしたら、その他のチュートリアルを読み、他の Google Cloud サービスと統合してアプリに機能を追加する方法を習得することが可能です。

費用

このガイドの実行に伴う費用は発生しません。このサンプルアプリを実行するだけなら、無料の割り当てを超過することはありません。

開発環境を設定する

ローカルマシンで使い慣れているツールを使用できるほか、Cloud Shell を使用することもできます。Cloud Shell には Cloud SDK がインストールされて環境がすでに整っており、さまざまな機能を使用できます。

ローカルマシン

Go をインストールし、開発環境の設定の説明に従って Cloud SDK を設定します。

Cloud Shell

Cloud Shell を起動します。これには、事前にインストールしなければならないツールがすべて備わっています。

Cloud Shell を開く

Cloud プロジェクトの作成

Google Cloud を使用するにはプロジェクトが必要です。すべての Google Cloud サービスを使用するための基礎となります。

  1. 開発環境で次のコマンドを入力して、新しいプロジェクトを作成します。

    gcloud projects create PROJECT_ID

  2. App Engine アプリとその関連リソースを作成します。ロケーションを選択する必要があります。このロケーションは後で変更できません。

    gcloud app create

  3. App Engine にデプロイするアプリで課金が有効になっていることを確認します。このサンプルアプリを実行するだけであれば、無料の割り当てを超過することはありません。

    課金を有効にする方法について

App Engine 用の基本的なウェブサービスを作成する

ウェブサービスを作成し、ランタイム設定を宣言する方法について説明します。

ファイルを構造化する

サービスのファイル構造は次のようになります。

  • go-app/: Go 1.12+ 以降のサービスのディレクトリ。
    • app.yaml: サービスの構成。
    • main.go: アプリケーション コード。

app.yaml ファイルの作成

どの App Engine プロジェクトにも、サービスのランタイム環境の設定を指定する app.yaml 構成ファイルがあります。このファイルがないと、サービスはデプロイされません。

  1. Go 1.12+ のサービス用に go-app という新しいフォルダを作成します。

    mkdir go-app

  2. go-app/ フォルダ内に、app.yaml というファイルを作成し、次のコンテンツを追加します。

    runtime: go114 # or go112 or go113 for the Go 1.12 or Go 1.13 runtime
    

    これは App Engine アプリの最も簡単な構成です。Go 1.12 を使用することを App Engine に指示しています。app.yaml ファイルでは、ネットワーク設定やスケーリング設定などを指定することができます。詳細については、app.yaml リファレンスをご覧ください。

main.go ファイルの作成

このサンプルでは、net/http パッケージを使用して「Hello World」を出力する HTTP サーバーを作成します。

main.go ファイルを設定するには:

  1. go-app/ フォルダに main.go ファイルを作成します。

  2. コードを実行可能なプログラムとして扱うために、package main ステートメントを追加します。

    package main
    

    Go 1.12 以降のランタイムにサービスを正常にデプロイするには、少なくとも 1 つの Go ソースファイルの先頭に、package main ステートメントを定義する必要があります。

  3. 以下のパッケージをインポートします。

    import (
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    )
    
  4. HTTP ハンドラを定義します。

    
    // indexHandler responds to requests with our greeting.
    func indexHandler(w http.ResponseWriter, r *http.Request) {
    	if r.URL.Path != "/" {
    		http.NotFound(w, r)
    		return
    	}
    	fmt.Fprint(w, "Hello, World!")
    }
    

    http.ResponseWriter オブジェクトは、HTTP サーバーのレスポンスを作成します。このオブジェクトに書き込むことで、ブラウザにデータを送信します。http.Request オブジェクトは、受信した HTTP リクエストを表すデータ構造です。

  5. HTTP ハンドラを登録します。

    
    func main() {
    	http.HandleFunc("/", indexHandler)
    
    	port := os.Getenv("PORT")
    	if port == "" {
    		port = "8080"
    		log.Printf("Defaulting to port %s", port)
    	}
    
    	log.Printf("Listening on port %s", port)
    	if err := http.ListenAndServe(":"+port, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    

    main 関数は実行可能プログラムのエントリ ポイントであるため、アプリケーションを起動します。これにより、最初に http.HandleFunc 関数が呼び出され、http パッケージに対し、ウェブルート("/")に対するすべてのリクエストを indexHandler 関数で処理するように指示されます。

    PORT 環境変数が設定されていない場合は、ポート 8080 がデフォルトとして使用されます。アプリが App Engine で実行されるときには、PORT 環境変数は自動的に設定されますが、アプリをローカルでテストするときは PORT を任意の値に設定できます。

ウェブサービスを App Engine にデプロイする

  1. app.yaml ファイルがある go-app ディレクトリで、次のコマンドを使用してウェブサービスを App Engine にデプロイします。

    gcloud app deploy

  2. ブラウザを起動して https://PROJECT_ID.REGION_ID.r.appspot.com でウェブサービスを表示するには、次のコマンドを実行します。

    gcloud app browse

これで、サービスを作成して App Engine にデプロイする作業は終わりです。

サービスとバージョン

アプリケーションに最初にデプロイするサービスがデフォルト サービスになります。 app.yaml ファイルでサービスの名前を指定できますが、名前を省略すると、default として扱われます。デフォルト サービス以外にも複数のサービスをデプロイできます。

gcloud app deploy コマンドを実行すると、いつでもサービスを更新できます。サービスをデプロイするたびに新しいバージョンが作成され、自動的に最新のバージョンにトラフィックがルーティングされます。

サービスの作成とバージョンのデプロイメントを確認するには:

  1. Cloud Console で App Engine サービスを表示します。

    サービスを表示

    default という名前のサービスが 1 つ表示されます。このデフォルトのサービスは、次の URL で公開されています。

    https://PROJECT_ID.REGION_ID.r.appspot.com

  2. バージョンを表示します。

    バージョンを表示

    デプロイメントに対応する、タイムスタンプ付きのバージョンが 1 つ表示されます。

特定のサービスおよびバージョンにリクエストを送信する方法については、リクエストのルーティング方法をご覧ください。

次のステップ

これで、ウェブ アプリケーションを設定して App Engine にデプロイできました。

次は、以下のページを参照して、アプリケーションに他の機能を追加する方法を学びましょう。