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

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

Подготовка

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

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

С помощью команды gcloud alpha create создадим новый проект. Так как это пока альфа-релиз утилиты, её поведение может измениться в будущем. Другой способ — с помощью веб-сайта 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®
	authorInfo := struct {
		Author string
	}{
		Author: vars["author"],
	}
	return authordetailTmpl.Execute(w, r, authorInfo)
}


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

Запустим приложение и откроем браузер на 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 и настроим параметры проекта, для этого откройте 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

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

Разработка: Создание приложения Go в Google Cloud

Подготовлено по материалам «Building a Serverless Go App on Google Cloud»
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.