Go ブログ
App Engine の新しい Go 1.11 ランタイムを発表
App Engine は 2011 年に Go の実験的なサポート を開始しました。その後数年で、Go コミュニティは大幅に成長し、クラウドベースのアプリケーションのための慣習的なパターンが確立されました。本日、Google Cloud は App Engine の新しい Go 1.11 ランタイムを発表 しました。これは、使用量に応じた課金、自動スケーリング、マネージドインフラストラクチャなど、App Engine のすべての機能を提供しながら、慣習的な Go をサポートします。
Go 1.11 以降、App Engine 上の Go には、アプリケーション構造、サポートされるパッケージ、context.Context
値、または HTTP クライアントに関する制限はありません。お好みの方法で Go アプリケーションを作成し、app.yaml
ファイルを追加するだけで、App Engine にデプロイできます。依存関係の指定 では、新しいランタイムが依存関係管理のベンダーディレクトリとモジュール(実験段階)をどのようにサポートするかについて説明しています。
Go の Cloud Functions のサポート (これについては今後の投稿で詳しく説明します)と合わせて、App Engine は、基盤となるインフラストラクチャを気にすることなく、Google Cloud Platform (GCP) で Go コードを実行するための魅力的な方法を提供します。
App Engine の小さなアプリケーションの作成を見てみましょう。ここでは、Go モジュールが実験的にサポートされているものの、GOPATH
ベースのワークフローを前提としています。
最初に、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 アプリケーションを実行するための利用可能なオプションにエキサイティングな追加機能になると考えています。無料枠があります。入門ガイドまたは移行ガイドを確認し、本日新しいランタイムにアプリをデプロイしてください!