Auto Updates für Serverside Google Tag Manager auf Cloud Run

TLDR: Ich habe eine Cloud Function zum automatischen Updaten vom sGTM Docker Image geschrieben. Zur Lösung ->

Aktuelle sGTM Version prüfen

Wer den serverside Google Tag Manager (sGTM) auf Cloud Run nutzt wird vermutlich auch schon Bekanntschaft mit der Update Meldung im Webinterface vom sGTM gemacht haben. Diese wird bei einer veralteten Version vom “gtm-cloud-image” Docker Image geworfen. Die aktuell deployte Version des Docker Images lässt sich über den sha256 Wert überprüfen. Dafür gehen wir in der Google Cloud Platform bei Cloud Run in die letzte Revision und sehen auf der rechten Seite die Image URL der aktuell aktiven Revision.

Cloud Run - sha256 des Docker Image der aktiven Revision

In diesem Fall notieren wir uns 89c94351489c72180c1ba3d7ec9a795e3bf6b0729d554709044d70bd5c7a6ce3. Als nächstes überprüfen wir den sha256 Wert des aktuellen Images.

Über die URL gcr.io/cloud-tagging-10302018/gtm-cloud-image rufen wir die Übersicht von der Container Registry auf und schauen nach der Version mit dem “stable” tag.

Container Registriy - gtm-cloud-image Versionsübersicht

Wir sehen die Version mit dem Namen “89c94351489c”. Findige Beobachter werden hier schon festgestellt haben, dass dieser String bereits dem Anfang vom sha256 Wert des aktuellen Images entspricht. Wenn wir uns die Version genauer anschauen, können wir den sha256 Wert komplett betrachten.

Container Registry - Docker Image gtm-cloud-image Version

Jetzt können wir die beiden sha256 Werte vergleichen und somit bestätigen, dass in unserem Cloud Run Service die letzte “stable” Version vom gtm-cloud-image deployt ist. Sollte das nicht der Fall sein, müssen wir nur eine neue Revision unseres Cloud Run Services deployen um auf die letzte Version zu updaten da wir mit hoher Sicherheit als Image URL gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable angegeben haben

Automatisches Updaten mit Cloud Function

Weil wir keine Lust haben manuell nach einer neuen Version zu schauen und eine neue Revision zu deployen, habe ich eine Cloud Function geschrieben, die die oben beschriebenen Schritte automatisch durchführt. Eine Auslösung lässt sich über den Cloud Scheduler sehr einfach in einem bestimmten Zeit Intervall, wie zum Beispiel einer Woche steuern.

Um die Cloud Function in deinem GCP Projekt zu deployen empfehle ich folgende Schritte:

  1. GitHub Repository klonen / downloaden
  2. Dependencies wie gcloud-CLI und functions-framework-nodejs installieren
  3. Testen der Cloud Function lokal über localhost über npm start – Post Request mit body {project_id: PROJECT_ID, region: REGION, service_name: SERVICE_NAME}
  4. Deployment über gcloud builds submit direkt in das gesetzte GCP Projekt

Damit das Deployment über gcloud builds submit funktioniert muss bei Cloud Build die Rolle Cloud Functions Developer aktiviert werden:

Beispiel

Wenn ich den Cloud Run Service für meinen sGTM für moritzbauer.info überprüfe bekomme ich folgende Logs:

Cloud Function - Lokaler Test für sGTM Image

Es ist also kein Update notwendig, da die sha256 Werte identisch sind.

Wäre das nicht der Fall, würde die Cloud Function eine neue Revision deployen inklusive der Environment Variables, wie CONTAINER_CONFIG oder PREVIEW_SERVER_URL und etwaiger Health Checks.

Fazit

Automatische Updates auf die aktuelle “stable” Version vom gtm-cloud-image Docker Image ist sinnvoll wenn eine größere Zahl von Cloud Run Services gemanaged werden müssen. Vor allem im Agenturkontext kann so auch nach Beauftragung sichergestellt werden, dass das Image immer up-to-date ist und Sicherheitslücken, sowie Bugs beseitigt werden. Sollte es mal ein Fehler bei beim deployen einer Revision geben, wird der Traffic automatisch der letzten gesunden Revision zugeordnet. Ein Ausfall sollte somit ausgeschlossen sein.

In der Zukunft werde ich diese Cloud Function in meinem Terraform Deployment Script für den serverside Google Tag Manager hinzufügen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert