A projecthez tartozó GitHub Repository itt található

Regisztráció a GCP-re

Regisztálj be a Google Cloud Platformra ezen a linken

A regisztráció során el fogja kérni a bankkártya adataidat, de jelenleg (2021 májusában) oda van írva, hogy ennek az oka az, hogy meggyőződjenek róla, hogy nem vagy robot. 2021 májusában (nézd meg, hogy még mindig így van-e, amikor olvasod ezt a dokumentációt) a Google ad $300 ingyenes creditet, ezzel bátorítva az új felhasználókat, hogy kipróbáljanak különböző szolgáltatásokat a GCP-ben.

Mi ebben a dokumentációban csak olyan dolgokat fogunk használni, amik 2021 májusában INGYENESEN elérhetőek. Például minden hónapban 2 millió API call a szervereidhez ingyenes. Mi deployolni fogjuk a microservice-t a Cloud Runba, és ha csak nem érzel égető vágyat arra, hogy 2 milliószor meghívd a /test endpointot, nem fogjuk teljesen kihasználni az ingyenes szolgáltatásokat.

Pinneld a fontos menüket bal felül

Amikor ráviszed az egeret egy menüpontra bal oldalon, megjelenik egy pin icon, amire ha rákattintasz, felül megjelenik a gyorsmenün.

Érdemes az alábbi menüket kikeresned és pinnelned, hogy gyorsan elérd őket:

  • IAM & Admin
  • Cloud Run
  • Container Registry
  • Billing

Project átnevezése

Átnevezheted a GCP által létrehozott “My First Project”-et, arra, hogy “Penguin Project”.

  • Bal felül kattints a project nevére (“My First Project”)

  • A megnyíló popup ablakban kattints a mappára, benne a fogaskerékkel

    Project átnevezése

  • Az új oldalon válaszd ki a projectet, és kattints a három pontra a sor jobb oldalán, majd Settings

    Project átnevezése folytatás

  • Írd át a project nevét “Penguin Project”-re.

Project ID kimásolása

Győződj meg róla, hogy a GCP által generált Project ID-t kimásolod valahova, mert nemsokára használni fogjuk. Ezt az ID-t ne oszd meg másokkal.

Container Registry engedélyezése

A Docker Image repository segítségével a létrehozott Docker Image-t fel tudjuk tölteni a saját, privát Container Registrynkbe. Ehhez viszont először engedélyeznünk kell.

  • Kattints a Container Registry menüpontra

  • Kattints a gombra, amely azt írja: Enabling Container Registry API

    GCR engedélyezése

A GCP SDK telepítése

Részletes leírást itt találsz.

Makefile szerkesztése

Most már, hogy tudunk interaktálni a GCP-vel a saját terminálunkról, hozzáadhatunk egy pár új targetet a Makefile-hoz.

Az első egy docker beállítás specifikus target, amit mi csak egyszer fogunk futtatni, de a GitHub Actions fog használni minden futáskor, ezért tesszük bele a Makefile-ba.

A második target majdnem mindenben megegyezik a lokális docker build-del, de ezesetben már nem feltétlenül a dev taget adjuk át az image-nek, és nem nem is a localhost-ra készítjük az image-t, hanem a Google Container Registrybe.

A harmadik target futtatásával az összeépített image-t felpusholjuk a GCR-ra, így onnantól fogva, hogy ez a parancs lefutott, már a Google Cloud Platform - Container Registryben is meg fog jelenni a docker image. (nem publikusan, csak neked)

Végül pedig az utolsó target meghívásával létrehozunk egy Cloud Run példányt, ami egy serverless környezetben fog élni, és csak akkor fog bekapcsolni, ha valaki meghívja az endpoint-ot rajta. A backslash () a sorok végén jelzik a parancsnak, hogy a következő sorban folytatódik. A régióval meghatározhatod, hogy hova deployolja az alkalmazásodat. Az image paraméter megmondja neki, hogy melyik docker image-t kell használnia. A port paraméter megmondja a GCP-nek, hogy melyik porton kell hallgatnia a service-re. Mivel nem adunk át külön paramétert a címre és a portra, ezért az alapértelmezett 0.0.0.0 és 80 kerül használatra, ahogyan azt megírtuk a Go alkalmazásunkban.

# GCloud-specific targets
gcloud-docker-init:
	gcloud auth configure-docker

gcloud-docker-build:
	docker build -t eu.gcr.io/$(GCP_PROJECT_ID)/$(APP):$(ENVIRONMENT) .

gcloud-docker-push:
	docker push eu.gcr.io/$(GCP_PROJECT_ID)/$(APP):$(ENVIRONMENT)

gcloud-run-deploy:
	gcloud run deploy $(APP)-$(ENVIRONMENT) \
	--region europe-west2 \
	--image gcr.io/$(GCP_PROJECT_ID)/$(APP):$(ENVIRONMENT) \
	--port 80 \
	--project $(GCP_PROJECT_ID) \
	--max-instances 1 \
	--platform managed \
	--labels environment=$(ENVIRONMENT) \
	--allow-unauthenticated 

Látható, hogy van két változó (A GCP_PROJECT_ID és az ENVIRONMENT), ami nem szerepel a Makefile tetején. Ez azért van, mert ezeket nem akarjuk belevinni a Makefile-ba, mert nem való a GitHubra szenzitív adat.

Ehelyett, a terminálodon exportálhatod ezeket a változókat, és utána meg meghívhatod az új targeteket.

export GCP_PROJECT_ID=[A_te_projected_id-ja]
export ENVIRONMENT=staging

# ezt csak egyszer kell lefuttatnod, utána többet nincs rá szükséged, viszont benne hagyjuk a Makefile-ban a GitHub Actions-nek
make gcloud-docker-init  

make gcloud-docker-build
make gcloud-docker-push
make gcloud-run-deploy

Ellenőrzés

Ha minden jól ment, láthatod az új Docker Image-t a GCP console-on a Container Registry menüpont alatt

GCR

valamint láthatod a Cloud Run példányt a Cloud Run menüpont alatt.

Cloud Run

Visszaküldés a repositoryba

Végül pedig állítsd össze a módosításaidat és commitold őket GitHubra.

git status  # Információt ad vissza a git repo aktuális állapotáról
git add .   # a stage-re helyezi a módosított/hozzáadott fájlokat
git commit -m "Making our service deployable to GCP Cloud Run from local" # A stage tartalmát commitolja a lokális repositoryba
git push origin main # Felpusholja a commitodat a GitHub repositoryba, aminek a UI-on is megnézheted a tartalmát