ARC101
Visão geral
Nos laboratórios com desafio, apresentamos uma situação e um conjunto de tarefas. Para concluí-las, em vez de seguir instruções detalhadas, você usará o que aprendeu nos laboratórios do curso. Um sistema automático de pontuação (mostrado nesta página) vai avaliar seu desempenho.
Nos laboratórios com desafio, não ensinamos novos conceitos do Google Cloud. O objetivo dessas tarefas é aprimorar aquilo que você já aprendeu, como a alteração de valores padrão ou a leitura e pesquisa de mensagens para corrigir seus próprios erros.
Para alcançar a pontuação de 100%, você precisa concluir todas as tarefas no tempo definido.
Configuração
Antes de clicar no botão Começar o Laboratório
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é ativado quando você clica em Iniciar laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, e não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome).
Observação: para executar este laboratório, use o modo de navegação anônima (recomendado) ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e de estudante, o que poderia causar cobranças extras na sua conta pessoal.
- Tempo para concluir o laboratório: não se esqueça que, depois de começar, não será possível pausar o laboratório.
Observação: use apenas a conta de estudante neste laboratório. Se usar outra conta do Google Cloud, você poderá receber cobranças nela.
Cenário do desafio
Você começou a trabalhar como engenheiro de nuvem júnior. Até agora, você tem ajudado as equipes na criação e no gerenciamento de recursos do Google Cloud.
Seu conhecimento precisa ser suficiente para realizar essas tarefas.
Seu desafio
Você precisa ajudar uma equipe de desenvolvimento recém-criada com as tarefas iniciais de um projeto novo de armazenamento e organização de fotos de viagem, chamado Viagem. A equipe pede para você definir as configurações iniciais do ambiente de desenvolvimento de aplicativos.
Você vai precisar fazer o seguinte:
- Criar um bucket do Cloud Storage e compartilhar com um segundo usuário.
- Criar um tópico do Pub/Sub para que a função do Cloud Run envie mensagens.
- Criar uma função do Cloud Run que será executada sempre que um novo objeto for criado no bucket do Cloud Storage.
- Criar uma política de alertas para enviar um e-mail de notificação sobre o número de instâncias ativas na função do Cloud Run.
Você precisa seguir estes padrões:
- Crie todos os recursos na região , a menos que haja uma instrução diferente.
- Use as VPCs do projeto.
- Os nomes têm o formato equipe-recurso. Por exemplo, o nome de uma instância pode ser kraken-webserver1.
- Economize recursos. Como os projetos são monitorados, o uso excessivo de recursos pode levar ao encerramento desse projeto (e talvez da sua função). Por isso, tenha cuidado. Esta é a orientação da equipe de monitoramento: a menos que haja uma instrução diferente, use f1-micro para pequenas VMs do Linux e e2-medium para Windows ou outros aplicativos, como nós do Kubernetes.
Essas tarefas são descritas em detalhes a seguir. Boa sorte!
Tarefa 1: criar um bucket
-
Crie um bucket com o nome na região para armazenar as fotos.
-
Conceda o papel Leitor de objetos do Storage a no projeto que contém esse novo bucket.
Clique em Verificar meu progresso para conferir o objetivo.
Crie um bucket chamado e conceda acesso a .
Tarefa 2: criar um tópico do Pub/Sub
- Crie um tópico do Pub/Sub com o nome para que a função do Cloud Run envie mensagens.
Clique em Verificar meu progresso para conferir o objetivo.
Criar um tópico do Pub/Sub com o nome .
Tarefa 3: criar a miniatura da função do Cloud Run
-
Crie uma função do Cloud Run (2ª geração) com o nome (usando o Node.js 22) que será executada sempre que um objeto for criado no bucket gerado na tarefa 1.
-
Defina o Ponto de entrada (função a ser executada) como thumbnail. Em seguida, selecione Cloud Storage em Gatilho.
-
Na linha 15 do index.js substitua o texto REPLACE_WITH_YOUR_TOPIC ID pelo criado na tarefa 2.
index.js:
/* globals exports, require */
//jshint strict: false
//jshint esversion: 6
"use strict";
const crc32 = require("fast-crc32c");
const { Storage } = require('@google-cloud/storage');
const gcs = new Storage();
const { PubSub } = require('@google-cloud/pubsub');
const imagemagick = require("imagemagick-stream");
exports.thumbnail = (event, context) => {
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64"
const bucket = gcs.bucket(bucketName);
const topicName = "REPLACE_WITH_YOUR_TOPIC ID";
const pubsub = new PubSub();
if ( fileName.search("64x64_thumbnail") == -1 ){
// doesn't have a thumbnail, get the filename extension
var filename_split = fileName.split('.');
var filename_ext = filename_split[filename_split.length - 1];
var filename_without_ext = fileName.substring(0, fileName.length - filename_ext.length );
if (filename_ext.toLowerCase() == 'png' || filename_ext.toLowerCase() == 'jpg'){
// only support png and jpg at this point
console.log(`Processing Original: gs://${bucketName}/${fileName}`);
const gcsObject = bucket.file(fileName);
let newFilename = filename_without_ext + size + '_thumbnail.' + filename_ext;
let gcsNewObject = bucket.file(newFilename);
let srcStream = gcsObject.createReadStream();
let dstStream = gcsNewObject.createWriteStream();
let resize = imagemagick().resize(size).quality(90);
srcStream.pipe(resize).pipe(dstStream);
return new Promise((resolve, reject) => {
dstStream
.on("error", (err) => {
console.log(`Error: ${err}`);
reject(err);
})
.on("finish", () => {
console.log(`Success: ${fileName} → ${newFilename}`);
// set the content-type
gcsNewObject.setMetadata(
{
contentType: 'image/'+ filename_ext.toLowerCase()
}, function(err, apiResponse) {});
pubsub
.topic(topicName)
.publisher()
.publish(Buffer.from(newFilename))
.then(messageId => {
console.log(`Message ${messageId} published.`);
})
.catch(err => {
console.error('ERROR:', err);
});
});
});
}
else {
console.log(`gs://${bucketName}/${fileName} is not an image I can handle`);
}
}
else {
console.log(`gs://${bucketName}/${fileName} already has a thumbnail`);
}
};
package.json:
{
"name": "thumbnails",
"version": "1.0.0",
"description": "Create Thumbnail of uploaded image",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@google-cloud/pubsub": "^2.0.0",
"@google-cloud/storage": "^5.0.0",
"fast-crc32c": "1.0.4",
"imagemagick-stream": "4.1.1"
},
"devDependencies": {},
"engines": {
"node": ">=4.3.2"
}
}
Observação:
faça upload de uma imagem JPG ou PNG no bucket para verificar se a miniatura foi criada (depois de criar a função). Use esta imagem: https://storage.googleapis.com/cloud-training/arc101/travel.jpg. Baixe a imagem no seu dispositivo e envie o arquivo para o bucket.
A imagem da miniatura vai aparecer logo em seguida (use a opção ATUALIZAR na página de detalhes do bucket).
Após enviar o arquivo de imagem, clique abaixo para conferir seu progresso. Não é necessário esperar a criação da miniatura.
Observação: se a função for implantada e você não encontrar a miniatura no bucket, verifique se a guia Gatilhos mostra as informações do gatilho que você forneceu anteriormente para a função. Se houver erros anteriores, talvez a função não tenha sido salva corretamente.
Se o gatilho do Cloud Storage não estiver na guia Gatilhos da função, recrie-o (consulte a página de documentação Criar um gatilho para serviços) e envie um novo arquivo para testar outra vez (atualize a página depois de adicionar um novo arquivo).
Clique em Verificar meu progresso para conferir o objetivo.
Verificar se a função do Cloud Run funciona.
Tarefa 4: criar uma política de alertas
-
Crie uma política de alertas com o nome Active Cloud Run Function Instances que notifica sua conta de e-mail pessoal quando o número de instâncias ativas do Cloud Run Function for maior que zero (0).
-
Para a métrica, selecione Função do Cloud > Função > Instâncias ativas.
Clique em Verificar meu progresso para conferir o objetivo.
Verificar se um alerta de função do Cloud Run foi criado.
Parabéns!

Conquiste seu próximo selo de habilidade
Este laboratório autoguiado faz parte do curso com selo de habilidade Monitorar e gerenciar recursos de dados no Google Cloud. Ao concluir o curso, você ganha o selo acima como reconhecimento pela sua conquista. Compartilhe o selo no seu currículo e nas redes sociais e use a hashtag #GoogleCloudBadge para anunciar sua conquista.
Treinamento e certificação do Google Cloud
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 10 de março de 2025
Laboratório testado em 10 de março de 2025
Copyright 2026 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.