The Go Blog
App Engine の新しい Go 1.11 ランタイムを発表
App Engine は、2011 年に Go の実験的なサポートを開始しました。その後数年間で、Go コミュニティは大きく成長し、クラウドベースのアプリケーション向けに慣用的なパターンが定着しました。本日、Google Cloud は、慣用的な Go をサポートしながら、使用した分だけ支払う、自動スケーリング、マネージド インフラストラクチャといった App Engine のすべての機能を備えた App Engine スタンダード環境向けの新しい Go 1.11 ランタイムを発表しました。
Go 1.11 以降、App Engine の Go には、アプリケーション構造、サポートされるパッケージ、context.Context の値、または HTTP クライアントに制限はありません。好みの方法で Go アプリケーションを作成し、app.yaml ファイルを追加するだけで、アプリを App Engine にデプロイする準備が整います。依存関係の指定では、新しいランタイムが依存関係管理のためにベンダー化とモジュール(実験的)をどのようにサポートするかを説明しています。
Cloud Functions の Go サポート(詳細は今後の投稿で)と合わせて、App Engine は、基盤となるインフラストラクチャを気にすることなく、Google Cloud Platform(GCP)で Go コードを実行する魅力的な方法を提供します。
App Engine 用の小さなアプリケーションを作成してみましょう。ここでの例では、GOPATH ベースのワークフローを想定していますが、Go モジュールも実験的なサポートを受けています。
まず、GOPATH にアプリケーションを作成します。
// This server can run on App Engine.
package main
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
http.HandleFunc("/", hello)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
func hello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, 世界"))
}
コードには、「Hello, 世界」と応答する小さな HTTP サーバーの慣用的なセットアップが含まれています。以前 App Engine を使用した経験がある場合は、appengine.Main() への呼び出しがないことに気付くでしょう。これは完全にオプションになりました。さらに、アプリケーション コードは完全にポータブルであり、アプリケーションがデプロイされるインフラストラクチャへの依存関係はありません。
外部依存関係を使用する必要がある場合は、それらの依存関係を vendor ディレクトリまたは go.mod ファイルに追加できます。新しいランタイムはどちらもサポートしています。
アプリケーション コードが完成したら、ランタイムを指定するための app.yaml ファイルを作成します。
runtime: go111
最後に、マシンを Google Cloud Platform アカウントに設定します。
- GCP でアカウントを作成します。
- プロジェクトを作成します。.
- システムにCloud SDK をインストールします。
すべての設定が完了したら、1 つのコマンドでデプロイできます。
gcloud app deploy
Go 開発者は、App Engine の新しい Go 1.11 ランタイムが Go アプリケーションを実行するための利用可能なオプションに刺激的な追加になると考えています。無料枠があります。スタートガイドまたは移行ガイドをチェックして、今日、新しいランタイムにアプリをデプロイしてください!