プロジェクトとアプリケーションの設定

基本的な App Engine アプリケーションを設定および構造化し、ローカルでテストして、そのアプリケーションをデプロイします。

このページとサンプルは、ユーザーが投稿をアップロードできる簡単なブログ アプリケーションの学習用サンプルを拡張したものの一部です。Go プログラミング言語と基本的なウェブ開発に精通している方を対象として説明します。この例のすべてのページの概要については、Go を使用したアプリのビルドをご覧ください。

費用

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

始める前に

アプリケーションを作成する前に、次の手順を完了します。

  1. Google Cloud Platform Console を使用して、新しい Google Cloud Platform プロジェクトと App Engine アプリケーションを作成します。

    GCP Console に移動する

    プロンプトが表示されたら、App Engine アプリケーションを配置するリージョンを選択します。アプリケーションが作成されると、App Engine ダッシュボードが表示されます。

  2. Cloud SDK をダウンロードし、インストールしてから、gcloud ツールを初期化します。

    Cloud SDK をダウンロード

  3. Go をインストールします。

  4. 必要な App Engine の外部ライブラリを取得します。

    go get -u google.golang.org/appengine/...
    

App Engine のロケーション

App Engine はリージョナルです。つまり、アプリを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たすことが、アプリを実行するリージョンを選択する際の主な要素になります。一般に、アプリのユーザーに最も近いリージョンを選択できますが、アプリで使用されている他の GCP プロダクトやサービスのロケーションを考慮する必要があります。使用するサービスが複数のロケーションにまたがっていると、アプリのレイテンシだけでなく、料金にも影響します。

App Engine は次のリージョンで利用できます。

  • northamerica-northeast1(モントリオール)
  • us-central(アイオワ)
  • us-west2(ロサンゼルス)
  • us-east1(サウスカロライナ)
  • us-east4(バージニア北部)
  • southamerica-east1(サンパウロ)*
  • europe-west(ベルギー)
  • europe-west2(ロンドン)
  • europe-west3(フランクフルト)
  • asia-northeast1(東京)
  • asia-east2(香港)
  • asia-south1(ムンバイ)
  • australia-southeast1(シドニー)

* サンパウロ リージョンをご利用のお客様には、すべてのリージョナル プロダクト SLA が引き続き有効です。ただし、北米と南米を対象とするマルチリージョン機能およびクロスリージョン機能は、可用性またはパフォーマンスが一時的に低下する可能性があります。

アプリのリージョンを設定した後で変更することはできません。

App Engine アプリケーションがすでに作成済みであれば、gcloud app describe コマンドを実行するか GCP Console の App Engine ダッシュボードを開くことで、リージョンを表示できます。App Engine アプリケーションのリージョンは http://[YOUR_PROJECT_ID].appspot.com に表示されます。

アプリケーション プロジェクトを構造化する

この例では、最終的に以下の構造を持つ go-app という名前のプロジェクトを作成します。

  • go-app/: プロジェクトのルート ディレクトリ。
    • app.yaml: App Engine アプリケーションの構成設定。
    • main.go: アプリケーション コード。

app.yaml ファイルを作成する

app.yaml は、App Engine アプリケーションの基本的な構成を設定するファイルです。

app.yaml ファイルを設定するには:

  1. プロジェクトのルート ディレクトリを作成します。

    mkdir $GOPATH/src/go-app
    
  2. プロジェクトのルート ディレクトリに移動します。

    cd $GOPATH/src/go-app
    
  3. プロジェクトのルート ディレクトリで app.yaml を作成します。

  4. app.yaml に次の行を追加します。

    runtime: go
    api_version: go1
    
    handlers:
    
    # All URLs are handled by the Go application script
    - url: /.*
      script: _go_app
    

    App Engine がアプリケーションのウェブ リクエストを受け取ると、サーバーは、app.yaml で指定されている URL に対応するハンドラ スクリプトを呼び出します。次にハンドラがアプリケーション オブジェクトを呼び出し、リクエストの処理とレスポンスの準備を行うアクションを実行します。このレスポンスは、文字列のリストとして返されます。

    app.yaml で使用できる設定について詳しくは、app.yaml リファレンス ドキュメントをご覧ください。

main.go ファイルを作成する

この簡単なサンプルでは、net/http パッケージを使用して、アプリケーションのタイトル「Gopher Network」を出力する HTTP サーバーを作成します。

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

  1. プロジェクトのルート ディレクトリで main.go を作成します。

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

    package main
    
  3. 次のパッケージを main.go にインポートします。

    import (
    	"fmt"
    	"net/http"
    
    	"google.golang.org/appengine" // Required external App Engine library
    )
    

    google.golang.org/appengine パッケージは、App Engine アプリケーションの基本的な機能を提供します。

    net/http パッケージは、さまざまな HTTP リクエストへのレスポンスに使用する HandlerFuncを提供します。

  4. main.go で HTTP ハンドラを定義します。

    func indexHandler(w http.ResponseWriter, r *http.Request) {
    	// if statement redirects all invalid URLs to the root homepage.
    	// Ex: if URL is http://[YOUR_PROJECT_ID].appspot.com/FOO, it will be
    	// redirected to http://[YOUR_PROJECT_ID].appspot.com.
    	if r.URL.Path != "/" {
    		http.Redirect(w, r, "/", http.StatusFound)
    		return
    	}
    
    	fmt.Fprintln(w, "Hello, Gopher Network!")
    }
    

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

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

    func main() {
    	http.HandleFunc("/", indexHandler)
    	appengine.Main() // Starts the server to receive requests
    }
    

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

アプリケーションをローカルで実行する

Cloud SDK に含まれているローカル開発用サーバー(dev_appserver.py)でアプリケーションを実行し、テストします。

  1. 次のコマンドを使用して、アプリケーションの app.yaml が配置されているプロジェクトのルート ディレクトリから、ローカルの開発用サーバーを起動します。

    dev_appserver.py app.yaml
    

    ローカルの開発用サーバーが起動し、ポート 8080 でリクエストを待機します。問題が発生する場合は、ここをクリックしてください。

  2. ウェブブラウザで http://localhost:8080/ にアクセスしてアプリを表示します。

ローカル開発サーバー(dev_appserver.py)の実行

ローカルの開発用サーバーを実行するには、ディレクトリをフルパスで指定して dev_appserver.py を実行するか、PATH 環境変数に dev_appserver.py を追加します。

  • 元の App Engine SDK をインストールした場合、ツールは次の場所に配置されています。

    [PATH_TO_APP_ENGINE_SDK]/dev_appserver.py
    
  • Google Cloud SDK をインストールした場合、ツールは次の場所に配置されています。

    [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
    

    ヒント: Google Cloud SDK ツールを PATH 環境変数に追加し、シェルでコマンドの補完を有効にするには、次のコマンドを実行します。

    [PATH_TO_CLOUD_SDK]/google-cloud-sdk/install.sh
    

ポート番号の変更方法など、ローカルの開発用サーバーの実行について詳しくは、ローカルの開発用サーバーのリファレンスをご覧ください。

コードを変更する

ローカルの開発用サーバーはプロジェクト ファイルの変更を監視しており、コードに変更を加えるとアプリケーションを再コンパイルして再起動します。

  1. では試してみましょう。ローカルの開発用サーバーを起動したまま main.go を編集して「Gopher Network」を別の語句に変更します。

  2. http://localhost:8080/ を再読み込みして変更を確認します。

アプリケーションをデプロイする

app.yaml が配置されているプロジェクトのルート ディレクトリから以下のコマンドを実行して、App Engine にアプリケーションをデプロイします。

gcloud app deploy

アプリケーションを表示する

ブラウザを起動して http://[YOUR_PROJECT_ID].appspot.com でアプリケーションを表示するには、次のコマンドを実行します。

gcloud app browse

次のステップ

ここでは、単にウェブ アプリケーションを設定して App Engine にデプロイしただけです。

この後は、HTML ページや CSS ファイル、画像などの静的コンテンツをアプリケーションから安全に提供する方法を学習しましょう。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境