GSP315

Introdução
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.
Este laboratório é recomendado para estudantes que se inscreveram no selo de habilidade Como configurar um ambiente de desenvolvimento de apps no Google Cloud. Tudo pronto para começar o desafio?
Configuração
Antes de clicar no botão Start Lab
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o 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, 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 ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.
- Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Observação: não use seu projeto ou conta do Google Cloud neste laboratório para evitar cobranças extras na sua conta.
Cenário do desafio
Você começou a trabalhar no cargo júnior de engenharia de nuvem na Jooli Inc., onde ajuda as equipes a criar e gerenciar os recursos do Google Cloud.
Seu conhecimento deve ser suficiente para realizar essas tarefas sem guias explicativos.
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 Lembranças. A equipe pede para você definir as configurações iniciais do ambiente de desenvolvimento de aplicativos.
Você recebe o pedido para concluir estas tarefas:
- Criar um bucket para armazenar fotos.
- Criar um tópico do Pub/Sub que será usado pela função do Cloud Run que você criou.
- Criar uma função do Cloud Run.
- Remover o acesso do engenheiro de nuvem anterior ao projeto "Lembranças".
Confira algumas normas da Jooli Inc. que é preciso seguir:
- Crie todos os recursos na região e na zona , 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 e2-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
É preciso criar um bucket com o nome para armazenar as fotos.
Crie o recurso na região e na zona .
Clique em Verificar meu progresso para conferir o objetivo.
Crie 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.
Crie 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 que vai criar 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 chamada
Observação:
é preciso executar a função do Cloud Run toda vez que um objeto for criado no bucket criado na Tarefa 1.
Durante o processo, a função do Cloud Run pode pedir permissão para ativar APIs.
Ative cada uma das APIs obrigatórias, conforme solicitado.
-
Defina o Ponto de entrada (função a ser executada) como . Em seguida, selecione Cloud Storage
em Gatilho.
-
Adicione o código a seguir a index.js
:
const functions = require('@google-cloud/functions-framework');
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");
functions.cloudEvent('{{{ project_0.startup_script.function }}}', cloudEvent => {
const event = cloudEvent.data;
console.log(`Event: ${event}`);
console.log(`Hello ${event.bucket}`);
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64"
const bucket = gcs.bucket(bucketName);
const topicName = "{{{ project_0.startup_script.topic }}}";
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`);
}
});
- 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": "^5.0.0",
"fast-crc32c": "1.0.4",
"imagemagick-stream": "4.1.1"
},
"devDependencies": {},
"engines": {
"node": ">=4.3.2"
}
}
Verifique se a miniatura foi criada corretamente.
Observação: se você receber um erro de permissão negada, aguarde alguns minutos até que todas as permissões necessárias sejam propagadas para o agente de serviço e tente novamente. Verifique se você tem todos os papéis relevantes (Agente de serviço e Receptor de eventos do Eventarc, Criador do token da conta de serviço e Publicador do Pub/Sub) atribuídos às contas de serviço.
Clique em Verificar meu progresso para conferir o objetivo.
Verifique a função do Cloud Run
Tarefa 4: testar a infraestrutura
É necessário fazer upload de uma imagem JPG ou PNG para o bucket.
- Faça o upload de uma imagem JPG ou PNG para o bucket .
Observação: outra alternativa é fazer download da imagem https://storage.googleapis.com/cloud-training/gsp315/map.jpg
no seu computador
e, em seguida, fazer upload no bucket.
- A imagem da miniatura aparece logo depois disso (use a opção ATUALIZAR em "Detalhes do bucket").
Tarefa 5: remover o engenheiro de nuvem anterior
Você perceberá que há dois usuários definidos no projeto:
- um é sua conta ( com o papel de Proprietário);
- o outro é o engenheiro de nuvem anterior ( com o papel de Leitor).
- Remova o acesso do engenheiro de nuvem anterior ao projeto.
Clique em Verificar meu progresso para conferir o objetivo.
Remova o engenheiro de nuvem anterior
Parabéns!

Próximas etapas / Saiba mais
Esse selo de habilidade faz parte dos programas de aprendizado Executar tarefas básicas de infraestrutura no Google Cloud e Cloud Architect do Google. Se você já concluiu os outros cursos do seu programa de aprendizado, consulte o catálogo do Google Cloud Ensina para encontrar outras opções disponíveis.
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 setembro de 2024
Laboratório testado em 10 de setembro de 2024
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.