ARC100

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 dados júnior. Até agora, você tem ajudado as equipes a criar e gerenciar 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, chamado Recordações. A equipe pede para você definir as configurações iniciais do ambiente de desenvolvimento do aplicativo realizando as seguintes tarefas:
- Criar um bucket para armazenar as fotos
- Criar um tópico do Pub/Sub que será usado pela função do Cloud Run que você irá criar
- Criar uma 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: salvo instrução em contrário, use f1-micro para pequenas VMs do Linux e n1-standard-1 para Windows ou outros aplicativos, como nós do Kubernetes.
Cada tarefa está descrita em detalhes a seguir. Boa sorte!
Tarefa 1: Criar um bucket
Crie um bucket chamado para armazenar as fotos.
Crie o recurso na região .
Clique em Verificar meu progresso para conferir o objetivo.
Criar um bucket com o nome
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 uma função do Cloud Run para gerar miniaturas
Crie uma função do Cloud Run, , que vai gerar uma miniatura a partir de uma imagem adicionada ao bucket .
Verifique se a função do Cloud Run está usando o ambiente Cloud Run functions (2ª geração).
Crie o recurso na região e na zona .
- Crie uma função do Cloud Run (2ª geração) chamada usando o
Node.js 22 e definindo o gatilho como Cloud Storage.
Observação:
é preciso executar a função do Cloud Run toda vez que um objeto for criado no bucket da Tarefa 1.
Durante o processo, a função poderá pedir permissão para ativar APIs ou conceder papéis a contas de serviço.
Ative cada uma das APIs necessárias e conceda os papéis conforme solicitado.
Depois de conceder as permissões, aguarde alguns minutos antes de clicar para criar a função para garantir que as permissões foram atualizadas.
Observação ao usar o console para criar a função: depois de iniciar a criação da função, espere até que a caixa de seleção verde seja marcada para Criação do gatilho do Eventarc (na parte de cima da página, em Criação do serviço) antes de atualizar o código na próxima etapa.
Se você não esperar a caixa de seleção verde em Criação do gatilho do Eventarc, o gatilho pode não ser criado com sucesso e não aparecerá na guia Gatilhos da função.
-
Defina o Ponto de entrada (função a ser executada) como .
-
Adicione o código a seguir a index.js:
const functions = require('@google-cloud/functions-framework');
const { Storage } = require('@google-cloud/storage');
const { PubSub } = require('@google-cloud/pubsub');
const sharp = require('sharp');
functions.cloudEvent('{{{ project_0.startup_script.function }}}', async cloudEvent => {
const event = cloudEvent.data;
console.log(`Event: ${JSON.stringify(event)}`);
console.log(`Hello ${event.bucket}`);
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64";
const bucket = new Storage().bucket(bucketName);
const topicName = "{{{ project_0.startup_script.topic }}}";
const pubsub = new PubSub();
if (fileName.search("64x64_thumbnail") === -1) {
// não tem uma miniatura, extraia a extensão do nome do arquivo
const filename_split = fileName.split('.');
const filename_ext = filename_split[filename_split.length - 1].toLowerCase();
const filename_without_ext = fileName.substring(0, fileName.length - filename_ext.length - 1); // corrija a substring para remover o ponto
if (filename_ext === 'png' || filename_ext === 'jpg' || filename_ext === 'jpeg') {
// por enquanto, só aceita png e jpg
console.log(`Processing Original: gs://${bucketName}/${fileName}`);
const gcsObject = bucket.file(fileName);
const newFilename = `${filename_without_ext}_64x64_thumbnail.${filename_ext}`;
const gcsNewObject = bucket.file(newFilename);
try {
const [buffer] = await gcsObject.download();
const resizedBuffer = await sharp(buffer)
.resize(64, 64, {
fit: 'inside',
withoutEnlargement: true,
})
.toFormat(filename_ext)
.toBuffer();
await gcsNewObject.save(resizedBuffer, {
metadata: {
contentType: `image/${filename_ext}`,
},
});
console.log(`Success: ${fileName} → ${newFilename}`);
await pubsub
.topic(topicName)
.publishMessage({ data: Buffer.from(newFilename) });
console.log(`Message published to ${topicName}`);
} 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`);
}
});
- Adicione o código a seguir a
package.json:
{
"name": "thumbnails",
"version": "1.0.0",
"description": "Create Thumbnail of uploaded image",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0",
"@google-cloud/pubsub": "^2.0.0",
"@google-cloud/storage": "^6.11.0",
"sharp": "^0.32.1"
},
"devDependencies": {},
"engines": {
"node": ">=4.3.2"
}
}
Observação: se você receber um erro de permissão recusada informando que pode levar alguns minutos até que todas as permissões necessárias sejam propagadas para o agente de serviço, aguarde alguns minutos e tente de novo. Verifique se todos os papéis relevantes (Agente de Serviço e Receptor de Eventos do Eventarc, Criador de Tokens da Conta de Serviço e Publicador do Pub/Sub) estão atribuídos às contas de serviço.
Tarefa 4: Testar a infraestrutura
Para testar a função, faça upload de uma imagem JPG ou PNG no bucket.
- Faça o upload de uma imagem JPG ou PNG para o bucket .
Observação: é necessário fazer upload de uma imagem JPG ou PNG para o bucket para verificar se a miniatura foi criada (depois de criar a função com sucesso). Use qualquer imagem JPG/PNG ou esta: https://storage.googleapis.com/cloud-training/arc101/travel.jpg. Faça o download da imagem na sua máquina e envie o arquivo para o bucket.
- A imagem da miniatura aparece logo depois disso (use a opção ATUALIZAR em "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.
Opcional: 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 miniatura foi criada corretamente pela função do Cloud Run
Parabéns!
Parabéns! Neste laboratório, você criou um bucket, um tópico do Pub/Sub e uma função do Cloud Run que gera uma miniatura de uma imagem adicionada ao bucket.

Conquiste seu próximo selo de habilidade
Este laboratório autoguiado faz parte do curso Armazenamento, processamento e gerenciamento de dados no Google Cloud: console. 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 #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 4 de abril de 2025
Laboratório testado em 4 de abril de 2025
Copyright 2025 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.