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

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

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

費用

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

始める前に

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

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

    GCP Console に移動する

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

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

    Cloud SDK をダウンロード

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

  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(フランクフルト)
  • europe-west6(チューリッヒ)
  • asia-northeast1(東京)
  • asia-northeast2(大阪)
  • asia-east2(香港)
  • asia-south1(ムンバイ)
  • australia-southeast1(シドニー)

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

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 に、次の行を追加します。

    # Copyright 2019 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     https://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    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 環境変数に を追加できます。

  • 元の 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 スタンダード環境