リージョン ID
REGION_ID
は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。2020 年 2 月以降に作成されたアプリの場合、REGION_ID.r
は App Engine の URL に含まれています。この日付より前に作成されたアプリの場合、URL のリージョン ID は省略可能です。
詳しくは、リージョン ID をご覧ください。
このガイドは、App Engine の使用を開始して、Go アプリの開発、デプロイ、管理に習熟するうえで有用です。
アプリをビルドしたら、その他のチュートリアルを読み、他の Google Cloud サービスと統合してアプリに機能を追加する方法を確認できます。
費用
このガイドの実行に伴う費用はありません。このサンプルアプリを実行するだけなら、無料の割り当てを超過することはありません。
開発環境を設定する
ローカルマシンで使い慣れているツールを使用できるほか、Cloud Shell を使用することもできます。Cloud Shell には Google Cloud CLI がすでにインストールされ、環境が設定済みであり、その他の多くの機能を使用できます。
ローカルマシン
Go をインストールし、開発環境の設定の説明に沿って gcloud CLI を設定します。
Cloud Shell
Cloud Shell を起動します。これには、事前にインストールしなければならないツールがすべて備わっています。
Google Cloud プロジェクトを作成する
Google Cloud を使用するにはプロジェクトが必要です。プロジェクトは、すべての Google Cloud サービスを使用するための基礎となります。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- App Engine アプリとその関連リソースを作成します。ロケーションを選択する必要があります。このロケーションを後で変更することはできません。
gcloud app create
App Engine 用の基本的なウェブサービスを作成する
ウェブサービスを作成し、ランタイム設定を宣言する方法について説明します。
ファイルを構造化する
サービスのファイル構造は次のようになります。
go-app/
: Go 1.12 以降のサービスのディレクトリ。app.yaml
: サービスの構成。main.go
: アプリケーション コード。
app.yaml
ファイルの作成
どの App Engine プロジェクトにも、サービスのランタイム環境の設定を指定する app.yaml
構成ファイルがあります。このファイルがないと、サービスはデプロイされません。
Go 1.12 以降のサービス用に
go-app
という新しいフォルダを作成します。mkdir go-app
go-app/
フォルダ内に、app.yaml
というファイルを作成し、次の内容を追加します。runtime: go115 # or another supported version
これは App Engine アプリの最も簡単な構成です。Go を使用していることを App Engine に示しています。
app.yaml
ファイルでは、他の Go バージョン、ネットワーク設定、スケーリング設定などを指定できます。詳細については、app.yaml
リファレンスをご覧ください。
main.go
ファイルの作成
このサンプルでは、net/http
パッケージを使用して「Hello World」を出力する HTTP サーバーを作成します。
main.go
ファイルを設定するには:
go-app/
フォルダにmain.go
ファイルを作成します。コードを実行可能なプログラムとして扱うために、
package main
ステートメントを追加します。package main
Go 1.12 以降のランタイムにサービスを正常にデプロイするには、少なくとも 1 つの Go ソースファイルの先頭に、
package main
ステートメントを定義する必要があります。以下のパッケージをインポートします。
HTTP ハンドラを定義します。
http.ResponseWriter
オブジェクトは、HTTP サーバーのレスポンスを収集します。この値に書き込むことで、ブラウザにデータを送信します。http.Request
オブジェクトは、受信した HTTP リクエストを表すデータ構造です。HTTP ハンドラを登録します。
main
関数は実行可能プログラムのエントリ ポイントであるため、アプリケーションを起動します。これにより、最初にhttp.HandleFunc
関数が呼び出され、http
パッケージに対し、ウェブルート("/"
)に対するすべてのリクエストをindexHandler
関数で処理するように指示されます。PORT
環境変数が設定されていない場合は、ポート8080
がデフォルトとして使用されます。アプリが App Engine で実行されるときには、PORT
環境変数は自動的に設定されますが、アプリをローカルでテストするときはPORT
を任意の値に設定できます。
ウェブサービスを App Engine にデプロイする
app.yaml
ファイルがあるgo-app
ディレクトリで、次のコマンドを使用してウェブサービスを App Engine にデプロイします。gcloud app deploy
ブラウザを起動して
https://PROJECT_ID.REGION_ID.r.appspot.com
でウェブサービスを表示するには、次のコマンドを実行します。gcloud app browse
これで完了です。サービスを作成して App Engine にデプロイする作業は終わりです。
サービスとバージョン
アプリケーションに最初にデプロイするサービスがデフォルト サービスになります。app.yaml
ファイルでサービスの名前を指定できますが、名前を省略すると、default
として扱われます。デフォルト サービス以外にも複数のサービスをデプロイできます。
gcloud app deploy
コマンドを実行すると、いつでもサービスを更新できます。サービスをデプロイするたびに新しいバージョンが作成され、最新のバージョンに自動的にトラフィックがルーティングされます。
サービスの作成とバージョンのデプロイメントを確認するには:
Google Cloud コンソールで App Engine サービスを表示します。
default
という名前のサービスが 1 つ表示されます。このデフォルトのサービスは、次の URL で公開されています。https://PROJECT_ID.REGION_ID.r.appspot.com
バージョンを表示します。
デプロイに対応する、タイムスタンプ付きのバージョンが 1 つ表示されます。
特定のサービスおよびバージョンにリクエストを送信する方法については、リクエストのルーティング方法をご覧ください。
次のステップ
これで、ウェブ アプリケーションを設定して App Engine にデプロイできました。
次は、以下のページを参照して、アプリケーションに他の機能を追加する方法を学びましょう。
- アプリケーション ログの読み取りと書き込みで、アプリケーション ログの作成方法とシステムログの解釈方法を学習する。
- Go ランタイム環境で、App Engine の機能を詳しく学習する。
- リクエストの処理とリクエストのルーティングについて確認する。