Skip to main content

Cloud Run

Deployment

Nu we een Docker container hebben in een container-repository die bij elke push-actie vernieuwd wordt, is het tijd om dat te koppelen aan Google Cloud Run. Cloud Run is een serverless platform waar je containers kan hosten die webserver bevatten. Afhankelijk van de load worden 0 tot 1000 containers opgestart.

We bouwen deze service met Terraform. Nadien zullen we het cloudbuild script aanpassen zodat wijzigingen in de code meteen zorgen voor een update van de container.

Aandachtspunten:

  • Standaard heeft niemand rechten om naar je website te surfen. Daarvoor moet je run.invoke-rechten toekennen aan de allUsers groep. Lees zorvuldig de output van Terraform. Soms gebeurt het dat een deel van de settings niet toegepast wordt waardoor je apply opnieuw moet toepassen. Voorbeeld: de rechten op cloud run kunnen enkel toegepast worden als de cloud-run service gedeployed is, en dat kan enkele minuten duren..

  • Maak een output variabele aan, zodat je de url van de Cloud Run instantie te zien krijgt in de terraform output na het uitvoeren van een 'apply'-actie.

  • Als je de source code van de site zou nagaan, dan merk je dat een omgevingsvariabele FULL_TABLE_NAME nodig is voor een goeie werking. Geef die dus ook mee bij het aanmaken van je terraform-object. Doe dat niet hardcoded, maar verwijs naar je dataset object.

Testen

Eens de cloud run instantie actief is, moet je er kunnen naar surfen. Wat je ziet is minder van belang, maar surfen naar /parking zorgt hopelijk voor al een grafiek die weergeeft welke parking in Gent vandaag het intensiefst gebruikt werd.

Cloudbuild

Vul je cloudbuild.yml bestand verder aan. Bij een push moet je de container builden en deployen. Onderstaande kan je als inspiratie gebruiken, maar moet misschien nog aangepast worden naar jouw situatie.


steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- gcloud
- functions
- deploy
- poll_function
- --region=europe-west1
- --build-service-account=projects/************2/serviceAccounts/app-build-usr@************2.iam.gserviceaccount.com
- --run-service-account=app-cron-usr@************2.iam.gserviceaccount.com
- --service-account=app-cron-usr@************2.iam.gserviceaccount.com
- --trigger-service-account=app-cron-usr@************2.iam.gserviceaccount.com
- --source=cf/.
- --trigger-topic=poll
- --entry-point=poll
- --set-env-vars
- TABLE_ID=************2.helloghent.parking
- --runtime=python312
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', '${_IMAGE_NAME}', '.' ]
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
- gcloud
- beta
- run
- services
- update
- --image
- ${_IMAGE_NAME}
- --region
- europe-west1
- ??????

substitutions:
_IMAGE_NAME: europe-west1-docker.pkg.dev/************2/helloghent-reg/site:latest

images:
- ${_IMAGE_NAME}

options:
logging: CLOUD_LOGGING_ONLY