arrow_back

Crie um app sem servidor que gera arquivos PDF com o Cloud Run

Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Crie um app sem servidor que gera arquivos PDF com o Cloud Run

Lab 1 hora universal_currency_alt 5 créditos show_chart Intermediário
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP644

Laboratórios autoguiados do Google Cloud

Logotipo da Pet Theory

Visão geral

Nos laboratórios da Quest Google Cloud Serverless Workshop: Pet Theory, você terá acesso a um cenário de negócios fictício e vai ajudar os personagens com o plano deles de migração sem servidor.

Há 12 anos, Lilian fundou a rede de clínicas veterinárias Pet Theory. Atualmente, a Pet Theory envia faturas no formato DOCX aos clientes, mas muitos deles têm reclamado que não conseguem abri-las. Para aumentar a satisfação dos clientes, a Lilian pediu ao Pedro, do departamento de TI, que buscasse uma alternativa para resolver esse problema.

A equipe de operações da Pet Theory é composta de apenas uma pessoa, por isso eles querem investir em uma solução econômica que não exija muita manutenção contínua. Depois de analisar várias opções de processamento, Pedro decidiu usar o Cloud Run.

O Cloud Run é um serviço sem servidor. Por isso, ele elimina todo o gerenciamento de infraestrutura e permite que você se concentre na criação do aplicativo, em vez de se preocupar com sobrecargas no sistema. Por ser um produto sem servidor do Google, ele consegue reduzir a escala para zero, ou seja, ele não gera custos quando não é usado. Com ele, você também pode usar pacotes binários personalizados com base em contêineres. Dessa forma, agora é possível criar artefatos isolados consistentes.

Neste laboratório, você vai criar um web app no Cloud Run que converte arquivos armazenados no Cloud Storage automaticamente para PDFs armazenados em pastas separadas.

Arquitetura

Este diagrama mostra uma visão geral dos serviços que você vai usar e como eles se conectam:

Diagrama da arquitetura

Neste curso, você vai:

Neste laboratório, você vai aprender a:

  • converter um aplicativo do Node.js em um contêiner;
  • criar contêineres com o Google Cloud Build;
  • criar um serviço do Cloud Run que converte arquivos em PDF na nuvem;
  • usar o processamento de eventos com o Cloud Storage.

Pré-requisitos

Este é um laboratório de nível fundamental que pressupõe familiaridade com o console e os ambientes shell. Além disso, ter experiência com o Firebase é útil, mas não é obrigatório. Antes de começar o laboratório, recomendamos que você conclua os seguintes laboratórios do Google Cloud Ensina:

Você também precisa saber editar arquivos. Use seu editor de texto favorito (como o nano, o vi etc.) ou inicie o editor de código do Cloud Shell, disponível na barra superior:

Ícone do Editor de código

Quando estiver tudo pronto, role a tela para baixo e siga as etapas para configurar o ambiente do laboratório.

Configuração e requisitos

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.

Como iniciar seu laboratório e fazer login no console do Google Cloud

  1. Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você verá o seguinte:

    • O botão Abrir Console do Cloud
    • Tempo restante
    • As credenciais temporárias que você vai usar neste laboratório
    • Outras informações se forem necessárias
  2. Clique em Abrir Console do Google. O laboratório ativa recursos e depois abre outra guia com a página Fazer login.

    Dica: coloque as guias em janelas separadas lado a lado.

    Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
  3. Caso seja preciso, copie o Nome de usuário no painel Detalhes do laboratório e cole esse nome na caixa de diálogo Fazer login. Clique em Avançar.

  4. Copie a Senha no painel Detalhes do laboratório e a cole na caixa de diálogo Olá. Clique em Avançar.

    Importante: você precisa usar as credenciais do painel à esquerda. Não use suas credenciais do Google Cloud Ensina. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
  5. Acesse as próximas páginas:

    • Aceite os Termos e Condições.
    • Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
    • Não se inscreva em testes gratuitos.

Depois de alguns instantes, o console do GCP vai ser aberto nesta guia.

Observação: para ver uma lista dos produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo. Ícone do menu de navegação

Ativar o Cloud Shell

O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.

  1. Clique em Ativar o Cloud Shell Ícone "Ativar o Cloud Shell" na parte de cima do console do Google Cloud.

Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.

  1. (Opcional) É possível listar o nome da conta ativa usando este comando:
gcloud auth list
  1. Clique em Autorizar.

  2. A saída será parecida com esta:

Saída:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (Opcional) É possível listar o ID do projeto usando este comando:
gcloud config list project

Saída:

[core] project = <project_ID>

Exemplo de saída:

[core] project = qwiklabs-gcp-44776a13dea667a6 Observação: para conferir a documentação completa da gcloud, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.

Tarefa 1: como entender a tarefa

A Pet Theory quer passar a emitir as faturas no formato PDF para que os clientes sejam capazes de abri-las com mais facilidade. A ideia da equipe é realizar essa conversão automaticamente para minimizar a carga de trabalho da Lisa, gerente do escritório.

A Ruby, consultora de informática da Pet Theory, recebe uma mensagem do Pedro, do departamento de TI…

Pedro

Pedro, administrador de TI

Oi, Ruby,

Fiz algumas pesquisas e descobri que o LibreOffice é bom para conversão de formatos diferentes de arquivo em PDF.

Seria possível executar o LibreOffice na nuvem sem precisar manter os servidores?

Pedro

RubyRuby, consultora de software

Olá, Pedro.

Acho que encontrei uma saída para esse tipo de situação.

Acabei de assistir a esse vídeo excelente da Next' 19 sobre o Cloud Run no YouTube. Parece que é possível executar o LibreOffice em um ambiente sem servidor com o Cloud Run. Nenhuma manutenção de servidor é necessária.

Enviarei alguns recursos para ajudar na configuração.

Ruby

Ajude o Pedro a configurar e a implantar o Cloud Run.

Tarefa 2: ativar a API Cloud Run

  1. Abra o menu de navegação (Ícone do menu de navegação) e clique em APIs e serviços > Biblioteca. Na barra de pesquisa, digite "Cloud Run" e selecione API Cloud Run na lista de resultados.

  2. Clique em Ativar e pressione o botão "Voltar" do navegador duas vezes. Seu console será semelhante a este:

Resultado do API Cloud Run

Tarefa 3: implantar um serviço simples do Cloud Run

A Ruby desenvolveu um protótipo no Cloud Run e quer que o Pedro faça a implantação no Google Cloud. Agora você ajudará o Pedro a estabelecer o serviço de PDF do Cloud Run para a Pet Theory.

  1. Abra uma nova sessão do Cloud Shell e execute este comando para clonar o repositório da Pet Theory:
git clone https://github.com/rosera/pet-theory.git
  1. Altere o diretório de trabalho atual para lab03:
cd pet-theory/lab03
  1. Edite o package.json com o editor de código do Cloud Shell ou com seu editor de texto preferido. Na seção "scripts", adicione "start": "node index.js",, como mostrado abaixo:
... "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, ...
  1. Agora execute estes comandos no Cloud Shell para instalar os pacotes que o script de conversão usará:
npm install express npm install body-parser npm install child_process npm install @google-cloud/storage
  1. Abra o arquivo lab03/index.js e revise o código.

O aplicativo será implantado como um serviço do Cloud Run que aceita HTTP POSTs. Se a solicitação POST for uma notificação do Pub/Sub sobre um arquivo enviado, o serviço gravará os detalhes do arquivo no registro. Se não for, o serviço simplesmente retornará a string "OK".

  1. Revise o arquivo chamado lab03/Dockerfile.

O arquivo acima é chamado de manifesto e oferece um roteiro para o comando Docker criar uma imagem. Cada linha começa com um comando que informa ao Docker como processar estas informações:

  • A primeira lista indica que a imagem base precisa usar o nó v12 como modelo para a imagem a ser criada.
  • A última linha indica o comando a ser executado, que nesta instância é "npm start".
  1. Para criar e implantar a API REST, use o Google Cloud Build. Execute este comando para iniciar o processo de build:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter

O comando cria um contêiner com seu código e o coloca no Container Registry do projeto.

  1. Volte ao console do Cloud, abra o menu de navegação e selecione Container Registry > Imagens. Você verá o contêiner hospedado:

Container Registry com pdf-converter listado

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir se você executou a tarefa.

Criar uma API REST simples
  1. Retorne à guia do editor de código e, no Cloud Shell, execute este comando para implantar o aplicativo:
gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Region }}} \ --no-allow-unauthenticated \ --max-instances=1
  1. Quando a implantação estiver concluída, você vai receber uma mensagem como esta:
O serviço [pdf-converter], revisão [pdf-converter-00001], foi implantado e está disponibilizando 100 por cento do tráfego em https://pdf-converter-[hash].a.run.app
  1. Crie a variável de ambiente $SERVICE_URL do app para acessá-lo facilmente:
SERVICE_URL=$(gcloud beta run services describe pdf-converter --platform managed --region {{{ project_0.default_region | Lab Region }}} --format="value(status.url)") echo $SERVICE_URL

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir se você executou a tarefa.

Crie uma revisão para o Cloud Run
  1. Faça uma solicitação POST anônima para seu novo serviço:
curl -X POST $SERVICE_URL

Isso gera a mensagem de erro "Your client does not have permission to get the URL", o que é bom, já que o ideal é que usuários anônimos não consigam chamar o serviço.

  1. Agora tente chamar o serviço como um usuário autorizado:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL

Se receber a resposta "OK", isso significa que o serviço do Cloud Run foi implantado. Parabéns!

Tarefa 4: acionar o serviço do Cloud Run quando um novo arquivo é enviado

Agora que o serviço do Cloud Run foi implantado com sucesso, a Ruby gostaria que o Pedro criasse uma área de preparo para a conversão dos dados. O bucket do Cloud Storage usará um gatilho de eventos para notificar o aplicativo quando um arquivo for enviado e tiver que ser processado.

  1. Execute este comando para criar um bucket no Cloud Storage para os documentos enviados:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-upload
  1. E crie outro bucket para os PDFs processados:
gsutil mb gs://$GOOGLE_CLOUD_PROJECT-processed
  1. Agora retorne para a guia do console do Cloud, abra o menu de navegação e selecione Cloud Storage. Verifique se os buckets foram criados. Também haverá outros buckets que serão usados pela plataforma.

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir se você executou a tarefa.

Crie dois buckets do Cloud Storage
  1. No Cloud Shell, execute o comando a seguir para instruir o Cloud Storage a enviar uma notificação do Pub/Sub sempre que o upload de um novo arquivo for concluído no bucket de documentos:
gsutil notification create -t new-doc -f json -e OBJECT_FINALIZE gs://$GOOGLE_CLOUD_PROJECT-upload

As notificações serão marcadas com o tópico "new-doc".

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir se você executou a tarefa.

Crie um tópico do Pub/Sub para lidar com as notificações do bucket de armazenamento
  1. Agora crie uma nova conta de serviço que o Pub/Sub usará para acionar os serviços do Cloud Run:
gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"
  1. Conceda permissão à nova conta de serviço para invocar o serviço de conversão de PDF:
gcloud beta run services add-iam-policy-binding pdf-converter --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com --role=roles/run.invoker --platform managed --region {{{ project_0.default_region | Lab Region }}}
  1. Execute este comando para encontrar o número do seu projeto:
gcloud projects list

Procure o projeto que tem nome iniciado por "qwiklabs-gcp-". Você usará o valor do número do projeto no próximo comando.

O número do projeto fica destacado na saída

  1. Crie uma variável de ambiente PROJECT_NUMBER, substituindo [project number] pelo Número do projeto do último comando:
PROJECT_NUMBER=[project number]
  1. Em seguida, ative seu projeto para criar tokens de autenticação do Cloud Pub/Sub:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com --role=roles/iam.serviceAccountTokenCreator Observação: se você receber uma mensagem de erro do tipo service account does not exist, ao executar o comando acima, ative a API Cloud Pub/Sub e se ela já estiver ativada, tente primeiro desativar e depois ativar de novo. Em seguida, execute o comando acima novamente.
  1. Por fim, crie uma assinatura do Pub/Sub para que o conversor de PDF possa ser executado sempre que uma mensagem for publicada no tópico "new-doc".
gcloud beta pubsub subscriptions create pdf-conv-sub --topic new-doc --push-endpoint=$SERVICE_URL --push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir se você executou a tarefa.

Criar uma assinatura no Pub/Sub 0.

Tarefa 5: verificar se o serviço do Cloud Run é acionado quando os arquivos são enviados ao Cloud Storage

Para verificar se o aplicativo está funcionando conforme esperado, Ruby pede a Pedro para fazer upload de alguns dados de teste no bucket de armazenamento nomeado e verificar o Cloud Logging.

  1. Copie alguns arquivos de teste no bucket de upload:
gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Depois que o upload for concluído, retorne à guia do console do Cloud, abra o menu de navegação e selecione Logging na seção Operações.

  2. No menu suspenso Recurso, filtre os resultados para Revisão do Cloud Run e clique em Aplicar. Em seguida, clique em Executar consulta.

  3. Em Resultados da consulta, procure uma entrada de registro que comece com file: e clique nela. Ela mostra um despejo dos dados do arquivo que o Pub/Sub envia para o serviço do Cloud Run quando é feito o upload de um novo arquivo.

  4. Você consegue encontrar o nome do arquivo que enviou neste objeto?

Resultados da consulta

Observação: se você não vir nenhuma entrada de registro que comece com "file", clique no botão "Carregar registros mais recentes" na parte de baixo da página.
  1. Retorne à guia do editor de código e execute o comando abaixo no Cloud Shell para limpar o diretório upload, excluindo os arquivos ali presentes:
gsutil -m rm gs://$GOOGLE_CLOUD_PROJECT-upload/*

Tarefa 6: contêineres do Docker

Pedro precisa converter um backlog de faturas no formato PDF para que todos os clientes possam abri-las. Ele envia um e-mail a Ruby pedindo ajuda…

Pedro

Pedro, administrador de TI

Oi, Ruby,

Com base nas suas descobertas, acredito que podemos automatizar esse processo e também passar a usar o PDF como formato de fatura.

Ontem eu escrevi o código de uma solução e criei um script de Node.js. para fazer o que precisamos. Você poderia dar uma olhada?

Pedro

Pedro envia a Ruby o fragmento de código que ele escreveu para gerar um PDF de um arquivo:

const {promisify} = require('util'); const exec = promisify(require('child_process').exec); const cmd = 'libreoffice --headless --convert-to pdf --outdir ' + `/tmp "/tmp/${fileName}"`; const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; }

Ruby responde a Pedro…

Ruby

Ruby, consultora de software

Oi, Pedro,

O Cloud Run usa contêineres, por isso, precisamos fornecer o aplicativo nesse formato. Para a próxima etapa, precisamos criar um manifesto do Dockerfile para o aplicativo.

Seu código usa o LibreOffice. Pode me enviar o comando para instalar esse software? Vou precisar incluí-lo no contêiner.

Ruby

Pedro

Pedro, administrador de TI

Oi, Ruby,

Ótimo. Veja como eu costumo instalar o LibreOffice nos servidores do escritório:

apt-get update -y && apt-get install -y libreoffice && apt-get clean

Entre em contato se precisar de mais informações.

Pedro

A criação do contêiner exigirá a integração de vários componentes:

Componentes: index.js, OfficeLibre, Express, body-parser, child_process, e @google-cloud/storage

Atualize o contêiner do Docker

Com todos os arquivos identificados, agora é possível criar o Dockerfile. Ajude Ruby a configurar e implantar o contêiner.

O pacote do LibreOffice não foi incluído no contêiner antes, então é necessário adicioná-lo. Pedro já forneceu os comandos que ele usa para criar o aplicativo, e Ruby os adicionará como um comando RUN no Dockerfile.

  • Abra o manifesto do Dockerfile e adicione a linha de comando RUN apt-get update -y && apt-get install -y libreoffice && apt-get clean conforme mostrado abaixo:
FROM node:16 RUN apt-get update -y \ && apt-get install -y libreoffice \ && apt-get clean WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

Implante a nova versão do serviço pdf-conversion

  1. Abra o arquivo index.js e adicione estes requisitos de pacote na parte de cima do arquivo:
const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage();
  1. Substitua app.post('/', async (req, res) por este código:
app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); })
  1. Na parte de baixo do arquivo, adicione este código que processa os documentos do LibreOffice:
async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  1. Verifique se o arquivo index.js se parece com o seguinte:
Observação: para evitar erros de formatação, recomendamos a substituição de todo o código no seu arquivo index.js com esse código de exemplo. const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage(); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); }) function decodeBase64Json(data) { return JSON.parse(Buffer.from(data, 'base64').toString()); } async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  • A lógica principal está nestas funções:
const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name);

Sempre que é feito o upload de um arquivo, esse serviço é acionado. Ele executa estas tarefas, uma por linha do código acima:

  • Extrai os detalhes do arquivo da notificação do Pub/Sub.
  • Faz o download do arquivo do Cloud Storage para o disco rígido local. Na verdade, não é um disco físico, mas uma seção da memória virtual que se comporta como um disco.
  • Converte o arquivo baixado em PDF.
  • Faz o upload do arquivo PDF no Cloud Storage. A variável de ambiente process.env.PDF_BUCKET contém o nome do bucket do Cloud Storage em que os PDFs são salvos. Você atribuirá um valor a essa variável ao implantar o serviço abaixo.
  • Exclui o arquivo original do Cloud Storage.

O restante do index.js implementa as funções chamadas por esse código de nível superior.

Chegou a hora de implantar o serviço e definir a variável de ambiente PDF_BUCKET. É recomendável ter 2 GB of RAM livres para usar o LibreOffice. Veja a linha com a opção --memory.

  1. Execute este comando para criar o contêiner:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir se você executou a tarefa.

Crie outra versão para a API REST
  1. Agora implante a versão mais recente do aplicativo:
gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Lab Region }}} \ --memory=2Gi \ --no-allow-unauthenticated \ --max-instances=1 \ --set-env-vars PDF_BUCKET=$GOOGLE_CLOUD_PROJECT-processed

Por causa da parte do LibreOffice do contêiner, essa build levará mais tempo que a anterior. Este é um bom momento para se levantar e se alongar por alguns minutos.

Clique em Verificar meu progresso para conferir o objetivo.

Crie uma nova revisão

Tarefa 7: como testar o serviço pdf-conversion

  1. Depois que a execução dos comandos de implantação for concluída, execute este comando para verificar se o serviço foi implantado corretamente:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL
  1. Se receber a resposta "OK", o serviço atualizado do Cloud Run foi implantado com sucesso. O LibreOffice converte vários tipos de arquivo em PDF: DOCX, XLSX, JPG, PNG, GIF etc.

  2. Execute este comando para fazer upload de alguns arquivos de exemplo:

gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  1. Retorne ao console do Cloud, abra o menu de navegação e selecione Cloud Storage. Abra o bucket -upload e clique no botão Atualizar algumas vezes para conferir como os arquivos são excluídos, um por um, à medida que são convertidos para o formato PDF.

  2. Em seguida, clique em Buckets no menu à esquerda e selecione o bucket com nome terminado em "-processed". Ele contém as versões em PDF de todos os arquivos. Abra os arquivos PDF para garantir que eles foram convertidos corretamente:

Observação: execute o comando novamente se não vir todos os arquivos PDF convertidos no bucket-processed.

Parabéns!

Agora a Pet Theory tem um sistema para converter arquivos antigos no formato PDF. Basta fazer o upload dos arquivos antigos para o bucket "upload", e o serviço pdf-converter converte e grava esses arquivos no formato PDF no bucket "processed".

Termine a Quest

Este laboratório autoguiado faz parte da Quest Serverless Cloud Run Development. Uma Quest é uma série de laboratórios relacionados que formam um programa de aprendizado. Ao concluir uma Quest, você ganha um selo como reconhecimento da sua conquista. É possível publicar os selos e incluir um link para eles no seu currículo on-line ou nas redes sociais. Inscreva-se nesta Quest e receba crédito de conclusão imediatamente. Consulte o catálogo do Google Cloud Ensina para ver todas as Quests disponíveis.

Comece o próximo laboratório

Continue aprendendo com o próximo laboratório da série: Criar um sistema resiliente e assíncrono com o Cloud Run e o Pub/Sub.

Próximas etapas/Saiba mais

Saiba mais sobre contêineres sem servidor: vídeo da Next' 19 no YouTube

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 26 de outubro de 2023

Laboratório testado em 27 de outubro de 2023

Copyright 2024 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.