Skip to content

jeffotoni/gcloudrun

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gcloudrun User

Testando Google Cloud Run, testando com configurar e subir uma aplicação Go no serviço Cloud Run. O objetivo é testar e levantar as possibilidades quando utilziamos este serviço.

Antes de iniciar lembra-lo que para fucionar precisaremos autenticar no google cloud com o seguinte comando.

O exemplo abaixo é fazendo push e build direto de sua máquina local e enviando para Registry. Logo abaixo iremos fazer também utilizando Code Build + github.

Registry + Docker

Auth Login

$ gcloud auth login

Artifacts Registry

Este é a nova versão do Registry no Google Cloud, nos iremos utiliza-lo como Registry para armazenar nossas imagens. Para inicia-lo é preciso reinicia-lo com o link Ativar Artifacts

$ gcloud artifacts repositories create go2 --repository-format=docker \
--location=us-central1 --description="Docker repository Go"

List Repo

gcloud artifacts repositories list

Auth Repo

gcloud auth configure-docker us-central1-docker.pkg.dev

Clear Repo

gcloud artifacts repositories delete go2 --location=us-central1

Docker Build

Criamos um arquivo deploy.gcloud.sh, ele só irá funcionar se vocẽ tiver logado em seu ambiente do Google Cloud e ativado o Regitry.

Docker Build

Fizemos um arquivo bash o deploy.gcloud.sh, porém foi criado o Markefile para que execute tudo de forma simples.

$ make deploy

Foi contruída uma API simples de exemplo para testarmos Google Cloud Run. Abaixo como executar localmente e testar para ver se está tudo ok.

API USER - DOCKER BUILD - LOCAL

$ docker docker build -f Dockerfile -t jeffotoni/gcloudrun.user .

Agora vamos subir nosso serviço usando docker.

$ docker run --rm --name gcloudrun.user -it -p 8080:8080 jeffotoni/gcloudrun.user:latest
┌───────────────────────────────────────────────────┐ 
│                   Fiber v2.21.0                   │ 
│               http://127.0.0.1:8080               │ 
│       (bound on host 0.0.0.0 and port 8080)       │ 
│                                                   │ 
│ Handlers ............. 3  Processes ........... 1 │ 
│ Prefork ....... Disabled  PID ................. 1 │ 
└───────────────────────────────────────────────────┘ 

API USER - [GET] /api/v1/ping

Agoa para testar vamos executar nossos endpoints e testar nossa api.

$ curl -i -XGET -H "Content-type:application/json" \
localhost:8080//api/v1/ping

API USER - [POST] /api/v1/user

$ curl -i -XGET -H "Content-type:application/json" \
localhost:8080//api/v1/user -d '{"name":"jefferson","cpf":"23232323", "year":2021}'

K6 Test de Stress

Foi criado test de stress utilizando K6, você poderá rodar ele utilizando docker ou instalar em sua máquina e rodar.

$ cd k6
$ k6 run -e HOST=http://localhost:8080 --vus 100 --duration 30s script.post.js
running (0m30.0s), 000/100 VUs, 1103723 complete and 0 interrupted iterations
default ✓ [======================================] 100 VUs  30s

     data_received..............: 227 MB  7.6 MB/s
     data_sent..................: 400 MB  13 MB/s
     http_req_blocked...........: avg=3.96µs  min=671ns    med=1.5µs   max=36.49ms p(95)=2.71µs  p(99)=7.08µs   p(99.99)=5.91ms   count=1103723
     http_req_connecting........: avg=432ns   min=0s       med=0s      max=26.12ms p(95)=0s      p(99)=0s       p(99.99)=0s       count=1103723
   ✓ http_req_duration..........: avg=2.29ms  min=40.61µs  med=1.38ms  max=45.86ms p(95)=7.41ms  p(99)=14.55ms  p(99.99)=33.12ms  count=1103723
     http_req_failed............: 100.00% ✓ 1103723      ✗ 0    
     http_req_receiving.........: avg=58.24µs min=4.46µs   med=14.92µs max=31.07ms p(95)=71.64µs p(99)=391.59µs p(99.99)=16.12ms  count=1103723
     http_req_sending...........: avg=20.12µs min=3.91µs   med=8.84µs  max=31.15ms p(95)=19.8µs  p(99)=132.44µs p(99.99)=13.62ms  count=1103723
     http_req_tls_handshaking...: avg=0s      min=0s       med=0s      max=0s      p(95)=0s      p(99)=0s       p(99.99)=0s       count=1103723
     http_req_waiting...........: avg=2.21ms  min=23.78µs  med=1.34ms  max=43.41ms p(95)=7.25ms  p(99)=13.69ms  p(99.99)=27.43ms  count=1103723
     http_reqs..................: 1103723 36783.164776/s
     iteration_duration.........: avg=2.69ms  min=114.41µs med=1.6ms   max=132.9ms p(95)=8.48ms  p(99)=16.6ms   p(99.99)=118.67ms count=1103723
     iterations.................: 1103723 36783.164776/s
     vus........................: 100     min=100        max=100
     vus_max....................: 100     min=100        max=100

Cloud Run

Antes de iniciar ative as APIs Cloud Build, Cloud Run, Container Registry, e Resource Manager.

Existe a possibilidade de criar, listar, deletar o serviço Cloud Run sem precisar ir na interface web. Outro ponto legal é quando utiliza o Code Build, você poderá configura-lo manualmente ou na interface Web, integrando com seu github, gitbucket e Resource Manager.

Outro ponto legal é que manualmente vc tem como criar seu deploy criando um arquivo cloudbuild.yaml.

Exemplo:

 steps:
 # Build the container image
 - name: 'gcr.io/cloud-builders/docker'
   args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
 # Push the container image to Container Registry
 - name: 'gcr.io/cloud-builders/docker'
   args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
 # Deploy container image to Cloud Run
 - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
   entrypoint: gcloud
   args:
   - 'run'
   - 'deploy'
   - 'SERVICE-NAME'
   - '--image'
   - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
   - '--region'
   - 'REGION'
 images:
 - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'

Para executar nosso exemplo basta rodar o exemplo logo abaixo.

$  gcloud builds submit
$ gcloud run deploy --help
$ gcloud run deploy <service-name> --image <image_name>

Browser