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.
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.
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.
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:
- GitHub Repository klonen / downloaden
- Dependencies wie gcloud-CLI und functions-framework-nodejs installieren
- Testen der Cloud Function lokal über localhost über npm start – Post Request mit body {project_id: PROJECT_ID, region: REGION, service_name: SERVICE_NAME}
- 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:
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.