Comece a usar o Go

Este tutorial destina-se a pessoas que estão a começar a criar apps na nuvem, como engenheiros e programadores Web, que querem aprender os principais conceitos de desenvolvimento de apps à medida que se aplicam ao Google Cloud.

Objetivos

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

As instruções neste documento destinam-se a manter a sua utilização de recursos dentro dos limites do nível Google CloudSempre Gratuito. Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Para criar uma base de dados do Firestore no modo nativo, conclua os seguintes passos:
    1. Na Google Cloud consola, aceda à página Criar base de dados do Firestore.

      Aceda ao Firestore para criar uma base de dados

    2. No ecrã Selecione um modo do Cloud Firestore, clique em Selecionar modo nativo.
    3. Selecione uma localização para a sua base de dados do Firestore. Esta definição de localização é a localização de recursos predefinida Google Cloud para o seu Google Cloud projeto . Esta localização é usada para Google Cloud serviços no seu Google Cloud projeto que requerem uma definição de localização, especificamente, o seu contentor do Cloud Storage predefinido e a sua app do Cloud Run.
    4. Clique em Criar base de dados.
  7. Enable the Artifact Registry, Cloud Run Admin, Cloud Build, Cloud Storage, Cloud Logging, and Error Reporting APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Clone o repositório de exemplo e abra a aplicação de exemplo no Cloud Shell:
    Aceder ao Cloud Shell

    O Cloud Shell oferece acesso à linha de comandos aos seus Google Cloud recursos diretamente a partir do navegador.

  9. Para transferir o código de exemplo e alterar para o diretório da app, clique em Continuar.
  10. No Cloud Shell, configure a ferramenta gcloud para usar o seu novo projeto Google Cloud :

    # Configure gcloud for your project
    gcloud config set project PROJECT_ID

    Substitua PROJECT_ID pelo Google Cloud ID do projeto que criou com a Google Cloud consola.

    A CLI do Google Cloud é a principal forma de interagir com os seus Google Cloud recursos a partir da linha de comandos. Neste tutorial, vai usar a ferramenta gcloud para implementar e monitorizar a sua app.

  11. Execute a sua app

    1. Crie a app, que transfere automaticamente as dependências:
      go build
      
    2. Execute a app:
      GOOGLE_CLOUD_PROJECT=PROJECT_ID ./bookshelf
      
      Substitua PROJECT_ID pelo Google Cloud ID do projeto que criou.
    3. No Cloud Shell, clique em Pré-visualização Web , e selecione Pré-visualizar na porta 8080. Esta ação abre uma nova janela com a app em execução.

Implementar a sua app no Cloud Run

Google Cloud oferece várias opções para executar o seu código. Para este exemplo, usa o Cloud Run para implementar uma app escalável no Google Cloud. O Cloud Run não requer que faça a gestão de servidores e é dimensionado automaticamente para suportar picos de tráfego.

  1. Execute o contentor com o Cloud Run:
    gcloud run deploy bookshelf --region us-central1 --allow-unauthenticated \
    --set-env-vars="GOOGLE_CLOUD_PROJECT=PROJECT_ID" --source .

    A sua app está agora visível no URL apresentado no resultado de gcloud run:

    Service [bookshelf] revision [bookshelf-00001] has been deployed and is serving 100 percent of traffic.
    Service URL: https://bookshelf-swsmmh5s5a-uc.a.run.app
    
  2. Copie o URL para o navegador de Internet para ver a app. Página inicial da app Estante

Para mais informações sobre a implementação no Cloud Run, consulte a documentação do Cloud Run.

Persista os seus dados com o Firestore

Não pode armazenar informações nas suas instâncias do Cloud Run, porque são perdidas se a instância for reiniciada e não existem quando são criadas novas instâncias. Em alternativa, usa uma base de dados a partir da qual todas as suas instâncias leem e na qual escrevem.

Google Cloud oferece várias opções para armazenar os seus dados. Neste exemplo, usa o Firestore para armazenar os dados de cada livro. O Firestore é uma base de dados de documentos NoSQL totalmente gerida e sem servidor que lhe permite armazenar e consultar dados. O Firestore é automaticamente dimensionado para satisfazer as necessidades da sua app e é dimensionado para zero quando não o está a usar. Adicione o seu primeiro livro agora.

  1. Para criar um livro para a sua app implementada, clique em Adicionar livro.

    Adicione um livro à app Bookshelf
  2. No campo Título, introduza Moby Dick.
  3. No campo Autor, introduza Herman Melville.
  4. Clique em Guardar. Agora, existe uma entrada para a app Bookshelf.

    Entrada da app Estante de Moby Dick
  5. Na Google Cloud consola, para atualizar a página do Firestore, clique em Atualizar . Os dados são apresentados no Firestore. A app Bookshelf armazena cada livro como um documento do Firestore com um ID exclusivo, e todos estes documentos são armazenados numa coleção do Firestore. Para efeitos deste tutorial, a coleção chama-se books. Exemplo de um documento do Firestore.

O Firestore armazena os livros através da biblioteca cliente do Firestore. Segue-se um exemplo de obtenção de um documento do Firestore:


// newFirestoreDB creates a new BookDatabase backed by Cloud Firestore.
// See the firestore package for details on creating a suitable
// firestore.Client: https://godoc.org/cloud.google.com/go/firestore.
func newFirestoreDB(client *firestore.Client) (*firestoreDB, error) {
	ctx := context.Background()
	// Verify that we can communicate and authenticate with the Firestore
	// service.
	err := client.RunTransaction(ctx, func(ctx context.Context, t *firestore.Transaction) error {
		return nil
	})
	if err != nil {
		return nil, fmt.Errorf("firestoredb: could not connect: %w", err)
	}
	return &firestoreDB{
		client:     client,
		collection: "books",
	}, nil
}

// Close closes the database.
func (db *firestoreDB) Close(context.Context) error {
	return db.client.Close()
}

// Book retrieves a book by its ID.
func (db *firestoreDB) GetBook(ctx context.Context, id string) (*Book, error) {
	ds, err := db.client.Collection(db.collection).Doc(id).Get(ctx)
	if err != nil {
		return nil, fmt.Errorf("firestoredb: Get: %w", err)
	}
	b := &Book{}
	ds.DataTo(b)
	return b, nil
}

Para mais informações sobre a utilização do Firestore, consulte o artigo Adicionar dados ao Firestore.

Armazene carregamentos de ficheiros no Cloud Storage

Agora que adicionou um livro, está na altura de adicionar a imagem da capa do livro. Não pode armazenar ficheiros nas suas instâncias. Uma base de dados não é a escolha certa para ficheiros de imagem. Em alternativa, use o Cloud Storage.

O Cloud Storage é o armazenamento de objetos binários principal para o Google Cloud. Pode usar o Cloud Storage para alojar recursos de apps que quer partilhar em várias plataformas Google Cloud. Para usar o Cloud Storage, tem de criar um contentor do Cloud Storage, um contentor básico para armazenar os seus dados.

  1. Na Google Cloud consola, aceda à página Navegador do Cloud Storage.

    Aceda à página do navegador do armazenamento na nuvem

  2. Clique em Criar contentor.
  3. Na caixa de diálogo Criar contentor, introduza um nome para o contentor anexando o Google Cloud ID do projeto à string _bucket para que o nome se assemelhe a YOUR_PROJECT_ID_bucket. Este nome está sujeito aos requisitos do nome do contentor. Todos os outros campos podem permanecer com os respetivos valores predefinidos.
  4. Clique em Criar.
  5. Depois de criar o contentor, os objetos têm de ser tornados acessíveis publicamente para serem vistos pelos utilizadores. Para tornar os seus objetos acessíveis publicamente, consulte o artigo Tornar os dados públicos.
  6. Clique em Editar livro e selecione uma imagem para carregar como capa do livro. Por exemplo, pode usar esta imagem de domínio público:
    Capa do livro Moby Dick
  7. Clique em Guardar. É feito o redirecionamento para a página inicial, onde existe uma entrada para a app Bookshelf.
    Entrada da app Moby Dick Bookshelf

A app de livros envia ficheiros carregados para o Cloud Storage através da biblioteca cliente do Cloud Storage.


// uploadFileFromForm uploads a file if it's present in the "image" form field.
func (b *Bookshelf) uploadFileFromForm(ctx context.Context, r *http.Request) (url string, err error) {
	f, fh, err := r.FormFile("image")
	if err == http.ErrMissingFile {
		return "", nil
	}
	if err != nil {
		return "", err
	}

	if b.StorageBucket == nil {
		return "", errors.New("storage bucket is missing: check bookshelf.go")
	}
	if _, err := b.StorageBucket.Attrs(ctx); err != nil {
		if err == storage.ErrBucketNotExist {
			return "", fmt.Errorf("bucket %q does not exist: check bookshelf.go", b.StorageBucketName)
		}
		return "", fmt.Errorf("could not get bucket: %w", err)
	}

	// random filename, retaining existing extension.
	name := uuid.Must(uuid.NewV4()).String() + path.Ext(fh.Filename)

	w := b.StorageBucket.Object(name).NewWriter(ctx)

	// Warning: storage.AllUsers gives public read access to anyone.
	w.ACL = []storage.ACLRule{{Entity: storage.AllUsers, Role: storage.RoleReader}}
	w.ContentType = fh.Header.Get("Content-Type")

	// Entries are immutable, be aggressive about caching (1 day).
	w.CacheControl = "public, max-age=86400"

	if _, err := io.Copy(w, f); err != nil {
		return "", err
	}
	if err := w.Close(); err != nil {
		return "", err
	}

	const publicURL = "https://storage.googleapis.com/%s/%s"
	return fmt.Sprintf(publicURL, b.StorageBucketName, name), nil
}

Para mais informações sobre a utilização do Cloud Storage, consulte a introdução ao Cloud Storage.

Monitorize a sua app com a Google Cloud Observability

Implementou a sua app e criou e modificou livros. Para monitorizar estes eventos para os seus utilizadores, use a gestão do desempenho das aplicações.

Monitorize registos com o Cloud Logging

  1. No Google Cloud, aceda ao Explorador de registos

    Aceda ao Explorador de registos

    Pode monitorizar a sua app em tempo real. Se tiver problemas com a sua app, este é um dos primeiros locais a consultar.

    Visualizador de registos do Stackdriver
  2. Na lista pendente Recurso, selecione Revisão do Cloud Run, estante.

Monitorize erros com o Error Reporting

  1. Na Google Cloud consola, aceda à página Relatórios de erros.
    Aceda à página Relatório de erros
    O Relatório de erros realça erros e exceções na sua app e permite-lhe configurar alertas em torno dos mesmos.
  2. No navegador, aceda ao /errorsURL na sua app.
    YOUR_CLOUD_RUN_URL/errors

    Isto gera uma nova exceção de teste e envia-a para o Google Cloud Observability.

  3. Na Google Cloud consola, regresse à página Relatório de erros e, dentro de alguns momentos, o novo erro fica visível. Clique em Atualizar automaticamente para não ter de atualizar a página manualmente.

    Mensagem de erro do Relatório de erros.

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

O que se segue?