Introdução ao Go no Compute Engine

Este tutorial mostra como começar a usar o Compute Engine. Siga este tutorial implementando uma app Web Hello World Go no Compute Engine. Para obter ajuda nos primeiros passos com o App Engine, consulte o ambiente padrão do App Engine.

Objetivos

  • Use o Cloud Shell para transferir e implementar uma app de exemplo Hello World.
  • Use o Cloud Build para criar uma app de exemplo Hello World.
  • Implemente uma app de exemplo Hello World numa única instância do Compute Engine.

Custos

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

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.

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. Enable the Compute Engine and Cloud Build 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

  5. 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

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

  7. Enable the Compute Engine and Cloud Build 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. Na Google Cloud consola, abra a app no Cloud Shell.

    Aceda ao Cloud Shell

    O Cloud Shell dá acesso à linha de comandos aos recursos da nuvem diretamente a partir do navegador.

  9. Se aceitar clonar o repositório, clique em Confirmar para transferir o código de exemplo e mudar para o diretório da app.

  10. No Cloud Shell, configure a CLI gcloud para usar o seu novo Google Cloud projeto:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Executar a app no Cloud Shell

  1. No Cloud Shell, inicie um servidor Web local:

    go build -o app
    ./app
    
  2. 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.

    No navegador de Internet, vê Hello, World!.

  3. Quando tiver tudo pronto para avançar, pare o servidor Web local premindo Control+C no Cloud Shell.

Implementar numa única instância

Esta secção explica como executar uma única instância da sua app no Compute Engine.

Implementação de instância única.

A partir do Cloud Shell, pode implementar numa única máquina virtual (VM) de instância do Compute Engine que executa a sua app.

Use o Cloud Build para criar a app

O Cloud Build é usado para criar a app, comprimi-la num ficheiro TAR e carregar o ficheiro para um contentor do Cloud Storage. Os contentores são os contentores básicos que contêm os seus dados no Cloud Storage.

  1. Na janela do terminal, crie um contentor do Cloud Storage, onde YOUR_BUCKET_NAME representa o nome do seu contentor:

    gcloud storage buckets create gs://YOUR_BUCKET_NAME

    Pode escolher qualquer nome para o seu contentor do Cloud Storage. É uma prática recomendada dar ao seu contentor o mesmo nome que o ID do projeto. Os nomes dos contentores têm de ser exclusivos em todos os Google Cloud, pelo que é possível que não possa usar o ID do projeto como o nome do contentor.

  2. Inicie o processo do Cloud Build:

    gcloud builds submit --substitutions=_DEPLOY_DIR=gs://YOUR_BUCKET_NAME,_DEPLOY_FILENAME=app.tar.gz

    O comando gcloud builds submit usa --substitutions para configurar a localização para a qual o ficheiro TAR resultante é carregado. Posteriormente, o ficheiro TAR é transferido para a instância do Compute Engine.

    O Cloud Build usa um ficheiro de configuração YAML para definir os passos necessários para a compilação.

    steps:
      # Print the Go version being used.
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'version']
      # Make a deploy directory we'll tar after building the app.
      - name: 'debian'
        args: ['mkdir', '-p', 'deploy/etc/systemd/system/', 'deploy/usr/bin']
      # Build the app.
      - name: 'mirror.gcr.io/library/golang'
        env: [
          'GO111MODULE=on',
          'GOPROXY=https://proxy.golang.org,direct',
          'GOOS=linux',
          'GOARCH=amd64'
        ]
        args: ['go', 'build', '-o', 'deploy/usr/bin/app', '.']
      # Copy the systemd service file into the deploy directory.
      - name: 'debian'
        args: ['cp', 'my-app.service', 'deploy/etc/systemd/system/']
      # Compress the deploy directory.
      - name: 'debian'
        args: ['tar', '-czf', '${_DEPLOY_FILENAME}', '-C', './deploy', '.']
    # Upload the tarball to Cloud Storage.
    artifacts:
      objects:
        location: '${_DEPLOY_DIR}'
        paths: ['${_DEPLOY_FILENAME}']

Use um script de arranque para inicializar uma instância

Precisa de uma forma de dar instruções à sua instância para transferir e executar o seu código. Uma instância pode ter um script de arranque que é executado sempre que a instância é iniciada ou reiniciada.

Um script de arranque é executado quando uma instância é iniciada pela primeira vez.

set -ex

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" --output google-fluentd-install.sh
checksum=$(sha256sum google-fluentd-install.sh | awk '{print $1;}')
if [ "$checksum" != "ec78e9067f45f6653a6749cf922dbc9d79f80027d098c90da02f71532b5cc967" ]; then
    echo "Checksum does not match"
    exit 1
fi
chmod +x google-fluentd-install.sh && ./google-fluentd-install.sh
service google-fluentd restart &

APP_LOCATION=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/app-location" -H "Metadata-Flavor: Google")
gsutil cp "$APP_LOCATION" app.tar.gz
tar -xzf app.tar.gz

# Start the service included in app.tar.gz.
service my-app start

O script de arranque realiza estas tarefas:

  • Instala o agente do Cloud Logging e configura-o para monitorizar os registos da app.

  • Transfere e extrai o ficheiro TAR de implementação.

  • Inicia um serviço systemd para executar a app.

Crie e configure uma instância do Compute Engine

  1. Crie uma instância do Compute Engine:

    Linux/macOS

    gcloud compute instances create my-app-instance \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --machine-type=g1-small \
    --scopes userinfo-email,cloud-platform \
    --metadata-from-file startup-script=startup-script.sh \
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" \
    --zone YOUR_ZONE \
    --tags http-server

    Substitua YOUR_ZONE por uma zona de desenvolvimento, por exemplo, us-central1-a. Para mais informações sobre regiões e zonas, consulte o artigo Geografia e regiões.

    A flag --metadata app-location indica ao script de arranque onde transferir o ficheiro TAR da app.

    Windows

    gcloud compute instances create my-app-instance ^
    --image-family=debian-10 ^
    --image-project=debian-cloud ^
    --machine-type=g1-small ^
    --scopes userinfo-email,cloud-platform ^
    --metadata-from-file startup-script=startup-script.sh ^
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" ^
    --zone YOUR_ZONE ^
    --tags http-server

    Substitua YOUR_ZONE por uma zona de desenvolvimento, por exemplo, us-central1-a. Para mais informações sobre regiões e zonas, consulte o artigo Geografia e regiões.

    A flag --metadata app-location indica ao script de arranque onde transferir o ficheiro TAR da app.

    Esta ação cria uma nova instância, permite-lhe aceder aos serviços Google Cloud e executa o script de arranque. O nome da instância é my-app-instance.

  2. Verifique o progresso da criação da instância:

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    Quando o script de arranque estiver concluído, é apresentada a seguinte mensagem:

    startup-script: INFO Finished running startup scripts.
    
  3. Crie uma regra de firewall para permitir o tráfego para a sua instância:

    gcloud compute firewall-rules create default-allow-http-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

  4. Obtenha o endereço IP externo da sua instância:

    gcloud compute instances list
    
  5. Para ver a sua app em execução, introduza este URL no navegador:

    http://YOUR_INSTANCE_IP
    

    Substitua YOUR_INSTANCE_IP pelo endereço IP externo da sua instância.

Faça a gestão e a monitorização de uma instância

Pode usar a Google Cloud consola para monitorizar e gerir a sua instância.

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
  3. Para ver todos os registos gerados pelos seus recursos do Compute Engine, aceda à página do Explorador de registos.

    Aceda ao Explorador de registos

    O Cloud Logging está configurado automaticamente para recolher registos de vários serviços comuns, incluindo o syslog.

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.

Elimine os recursos individuais

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-80

O que se segue?