Go ブログ

App Engine の新しい Go 1.11 ランタイムを発表

Eno Compton と Tyler Bui-Palsulich
2018年10月16日

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 アカウントを使用してマシンをセットアップします。

セットアップが完了したら、1つのコマンドでデプロイできます。

gcloud app deploy

Go 開発者は、App Engine の新しい Go 1.11 ランタイムが、Go アプリケーションを実行するための利用可能なオプションにエキサイティングな追加機能になると考えています。無料枠があります。入門ガイドまたは移行ガイドを確認し、本日新しいランタイムにアプリをデプロイしてください!

次の記事:2018 年 Go ユーザー調査への参加
前の記事:Go Cloud の Wire を使用したコンパイル時依存性注入
ブログインデックス