Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Cloud Run e Cloud Storage… agora combinam de verdade

By Wayman SmithMay 2, 20243 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Este artigo apresenta a nova funcionalidade do Cloud Run que permite montar um bucket do Cloud Storage como volume de container.

Introdução

Se você quer usar serviços serverless como o Cloud Run para hospedar um site estático, é bem provável que precise de arquivos guardados em um bucket. Um novo recurso do Google Cloud Platform deixou isso mais simples do que nunca. Caso ainda não conheça o Cloud Run, ele é um serviço gerenciado para rodar workloads em containers na infraestrutura escalável do Google. Neste artigo, vamos explorar o caso de um site estático, mas as possibilidades de uso desse recurso são inúmeras.

O problema

Até pouco tempo atrás, para acessar object storage pelo Cloud Run era preciso recorrer a ferramentas de terceiros ou bibliotecas cliente de nuvem dentro da própria aplicação. Funcionava, mas essas alternativas costumavam trazer um peso extra de escalabilidade e gerenciamento ao processo de entrega da aplicação.

Com a recente chegada dos mounts do Cloud Storage no Cloud Run, agora dá para montar buckets do Cloud Storage como volumes dentro dos containers do Cloud Run sem precisar de nenhuma biblioteca adicional.

Agora que já vimos as melhorias e seus benefícios, vamos ao nosso caso de uso: hospedar um site estático usando Cloud Run com mounts de volume do Cloud Storage.

A solução

Comece criando um Project para hospedar a aplicação e o bucket de armazenamento. No seu terminal preferido, defina algumas variáveis de ambiente para facilitar o trabalho e configure o gcloud.

export GCP_PROJECT=my-cloud-run-static-site
export REGION=us-east4
gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT

Depois, habilite as APIs do Cloud Run, Cloud Build e Artifact Registry para poder usar esses serviços.

gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com

Agora é hora de baixar o código do nosso site estático.

git clone https://github.com/waymanls/my-cloud-run-static-site.git

Dando uma olhada no conteúdo do arquivo index.html, você vai notar que as imagens ficam no caminho /images. Vamos usar esse caminho mais à frente no tutorial. Por enquanto, vamos criar o bucket do Cloud Storage que vai guardar os assets estáticos e fazer o upload da nossa imagem JPEG.

gcloud storage buckets create gs://$GCP_PROJECT-bucket --location=$REGION
gcloud storage cp beach.jpeg gs://$GCP_PROJECT-bucket/beach.jpeg

Em seguida, crie o repositório no Artifact Registry.

gcloud artifacts repositories create $GCP_PROJECT-repo \
--repository-format=docker \
--location=$GCP_REGION

Com o repositório do Artifact Registry pronto, vamos fazer o build e o push da imagem do container usando o Cloud Build.

gcloud builds submit --tag $REGION-docker.pkg.dev/$GCP_PROJECT/$GCP_PROJECT-repo/$GCP_PROJECT-svc

Depois que a imagem do container subir para o repositório, podemos usá-la para criar uma aplicação Cloud Run de Segunda Geração.

gcloud run deploy $GCP_PROJECT-svc --image $REGION-docker.pkg.dev/$GCP_PROJECT/$GCP_PROJECT-repo/$GCP_PROJECT-svc \
--execution-environment=gen2 --allow-unauthenticated

Chegamos à etapa final do nosso exemplo: anexar o bucket do Cloud Storage como volume do container. Isso é feito por meio de um "update" no nosso serviço do Cloud Run. Apesar de os valores de configuração serem passados como flags no comando gcloud, também é possível defini-los em um arquivo YAML de Service. Como dá para ver no comando abaixo, usamos o caminho "images" que definimos antes no index.html como caminho base e nome do volume do container.

gcloud run services update $GCP_PROJECT-svc \
--execution-environment=gen2 \
--add-volume=name=images,type=cloud-storage,bucket=$GCP_PROJECT-bucket \
--add-volume-mount=volume=images,mount-path=/usr/share/nginx/html/images

Ao final desses passos, você terá uma aplicação Cloud Run que monta um bucket do Cloud Storage como volume dentro do seu serviço Cloud Run e consegue acessar um objeto a partir desse volume.

Limpando o ambiente

Ao terminar, é recomendável excluir o projeto com o comando abaixo.

gcloud projects delete $GCP_PROJECT

Entre as vantagens dessa abordagem está a possibilidade de conectar de forma nativa seus workloads serverless do Cloud Run aos assets estáticos em backends de Object store, dispensando as antigas bibliotecas cliente de nuvem e serviços de terceiros.