Создание приложения Go в Google Cloud

Создание приложения Go в Google Cloud
Сегодня мы создадим несложное веб-приложение, в котором по списку авторов будет производится поиск их произведений с помощью Google Books API.

Подготовка

Для начала установите утилиту командной строки для Google Cloud SDK.

Создание проекта Google Cloud

С помощью команды gcloud alpha create создадим новый проект. Так как это пока альфа-релиз утилиты, её поведение может измениться в будущем. Другой способ — с помощью веб-сайта https://console.cloud.google.com.

$ gcloud alpha projects create go-serverless
Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/go-serverless].
Waiting for [operations/pc.7509198304344852511] to finish…done.

Если это не первый ваш проект в Google Cloud, есть замечательная команда для просмотра всех ваших проектов:

$ gcloud projects list
PROJECT_ID NAME PROJECT_NUMBER
bespokemirrorapi bespokemirrorapi 811093430365
gdgnoco-fortune gdgnoco-fortune 861018601285
go-serverless go-serverless 49448245715

Выбор проекта по-умолчанию

Все последующие вызовы команды gcloud будут ассоциироваться с определённым проектом, поэтому будет лучше если мы сконфигурируем созданный проект как основной. При создании проекта он автоматически не становится основным.

Выведем все имеющиеся проекты командой gcloud config list и установим нужный командой gcloud set ….

Установим свойство core/project в go-serverless:


$ gcloud config set core/project go-serverless
Updated property [core/project].
$ gcloud config list
[compute]
zone = us-central1-c
[core]
account = ghchinoy@gmail.com
disable_usage_reporting = False
project = go-serverless
Your active configuration is: [default]

Создание локального приложения
  • Создадим папку проекта
  • Создадим файл для деплоя app.yaml

Обычно проекты Go создают в папке $GOPATH\src, в папке, связанной с репозиторием. Здесь я создаю проект, который связан с моим репозиторием github и перехожу в эту папку:

$ mkdir -p $GOPATH/src/github.com/ghchinoy/go-serverless
$ cd $GOPATH/src/github.com/ghchinoy/go-serverless

Добавим файл app.yaml:

runtime: go
env: flex
api_version: 1
skip_files:
- README.md

Добавим код в main.go (полный исходный код лежит здесь):

package main

import (
"fmt"
"html/template"
"io/ioutil"
"log"
"path/filepath"

"net/http"

"github.com/gorilla/mux"
"google.golang.org/appengine"
)

var (
// html templates
booklistTmpl = parseTemplate("list.html")
authordetailTmpl = parseTemplate("detail.html")
)

func main() {
log.Println("bookshelf")

r := mux.NewRouter()
r.Path("/").Methods("GET").Handler(apiHandler(listBooksHandler))
r.Path("/author/{author}").Methods("GET").Handler(apiHandler(showBooksByAuthorHandler))

appengine.Main()

}

func listBooksHandler(w http.ResponseWriter, r *http.Request) *apiError {
authors := struct {
Authors []string
}{
Authors: []string{
"Miguel de Cervantes",
"Charles Dickens",
"Antoine de Saint-Exupéry",
"J. K. Rowling",
},
}
return booklistTmpl.Execute(w, r, authors)
}

func showBooksByAuthorHandler(w http.ResponseWriter, r *http.Request) *apiError {
vars := mux.Vars(r)
authorInfo := struct {
Author string
}{
Author: vars["author"],
}
return authordetailTmpl.Execute(w, r, authorInfo)
}

Тестируем приложение

Запустим приложение и откроем браузер на http://localhost:8080

$ go run main.go template.go
2017/03/30 15:55:21 booklist
127.0.0.1 — — [30/Mar/2017:15:55:24 -0600] “GET / HTTP/1.1” 200 1584 “” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3056.0 Safari/537.36”

Создание приложения Go в Google Cloud

Создание приложения Go в Google Cloud
* оформление страницы опускаем здесь, его можно взять в репозитории.

Деплой

Перейдём в консоль Google Cloud и настроим параметры проекта, для этого откройте https://console.developers.google.com/project/go-serverless/settings, заменив go-serverless на название вашего проекта.

$ gcloud app deploy
You are creating an app for project [go-serverless].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations.
Please choose the region where you want your App Engine application
located:
[1] europe-west (supports standard and flexible)
[2] us-east1 (supports standard and flexible)
[3] us-central (supports standard and flexible)
[4] asia-northeast1 (supports standard and flexible)
[5] cancel
Please enter your numeric choice: 3
Creating App Engine application in project [go-serverless] and region [us-central]….done.
You are about to deploy the following services:
— go-serverless/default/20170330t205543 (from [/Users/ghc/dev/go/src/github.com/ghchinoy/go-serverless/app.yaml])
Deploying to URL: [https://go-serverless.appspot.com]
Do you want to continue (Y/n)? Y
If this is your first deployment, this may take a while…done.
Beginning deployment of service [default]…
Building and pushing image for service [default]
Some files were skipped. Pass ` — verbosity=info` to see which ones

Updating service [default]…done.
Deployed service [default] to [https://go-serverless.appspot.com]
You can stream logs from the command line by running:
$ gcloud app logs tail -s default
To view your application in the web browser run:
$ gcloud app browse

Готово! Мой проект лежит тут: https://go-serverless.appspot.com/

Создание приложения Go в Google Cloud

Подготовлено по материалам «Building a Serverless Go App on Google Cloud»

Leave a Comment