Geschrieben von

GTM-Server: Von GCP zu AWS migrieren

Webtracking

Als der Google Tag Manager Server-Container veröffentlicht wurde, konnte dieser nur auf einer App Engine innerhalb der Google Cloud Plattform zum Laufen gebracht werden. Daher sind alle meine GTM-Server-Projekte auf einer App Engine. Google stellt aber mittlerweile ein Docker-Image zur Verfügung, damit man den GTM-Server-Container auf einer beliebigen Umgebung installieren kann.

Neben der Google Cloud Plattform sind die Amazon Web Services (AWS) ein potentieller Kandidat für eine Cloud-basierte Bereitstellung des GTM-Servers. Ich werde mein eigenes Projekt von GCP zu AWS umziehen und das in diesem Beitrag dokumentieren. Dabei kommt Elastic Beanstalk von AWS zum Einsatz, eine Anwendung, die der App Engine ähnlich ist. Dabei sind folgende Schritte notwendig:

  1. Subdomains wählen
  2. AWS-Konto erstellen und einrichten
  3. SSL-Zertifikat erstellen
  4. DNS-Einträge vornehmen
  5. Elastic Beanstalk Applikation erstellen
  6. Umgebung für Preview-Server erstellen
  7. Eigene Domain zum Preview-Server zuweisen
  8. Umgebung für Tagging-Server erstellen
  9. Eigene Domain zum Tagging-Server zuweisen
  10. Google Tag Manager-Einstellungen

Subdomains wählen

Um den Tagging-Server zum Laufen zu bringen, benötigen wir eine eigene Domain dafür. Hier kommt es auf dein aktuelles Setup an:

  • Entweder du hast schon den Tagging-Server auf GCP installiert und möchtest den Container nur auf AWS migrieren. In diesem Fall hast du wahrscheinlich schon eine eigene Subdomain.
  • Oder du legst eine neue Subdomain an. Im besten Fall liegt sie auf der gleichen Domain wie die Website, auf der Daten gesammelt werden. Im Falle meiner Website demirjasarevic.com wäre es eine gute Option collect.demirjasarevic.com oder sst.demirjasarevic.com zu wählen.

Die Subdomain collect.demirjasarevic.com wäre z.B. die Domain für den Haupt-Tagging-Server. Wir benötigen jedoch eine weitere Subdomain für den Vorschau-Server (Preview Server). Dies sollte wiederum eine Subdomain des Haupt-Tagging-Servers sein wie z.B. debug.collect.demirjasarevic.com.

Bevor du also weitermachst solltest du die Subdomains wählen und einrichten! Falls du schon eine Subdomain für den GTM-Server hast und der GTM-Server läuft gerade auf GCP, dann kannst du die bestehende Subdomain beibehalten. Die nachfolgende Anleitung gilt für beide Fälle.

AWS-Konto erstellen und einrichten

Zunächst muss ein AWS-Konto auf https://aws.amazon.com/de/ erstellt werden. Führe die Sign-Up-Schritte einfach durch. Wenn du dich zum ersten Mal bei AWS anmeldest, dann sind bestimmte Angebote und Kontingente für 12 Monate kostenlos. Danach kann man AWS weiterhin kostenlos nutzen – sofern man gewisse Limits nicht überschreitet. Also ähnlich wie bei der Google Cloud Plattform. Dennoch musst du eine Kreditkarte angeben.

Nach der Konto-Erstellung solltest du die Region festlegen. Diese siehst du oben rechts in der Leiste. Wähle hier am besten die Region, zu der du am nächsten bist:

SSL-Zertifikat erstellen

Wie bei der Google Cloud Plattform müssen wir auch bei AWS die notwendigen SSL-Zertifikate erstellen. Dazu navigierst du im AWS-Konto zum “AWS Certificate Manager”. Hier kannst du ein öffentliches Zertifikat erstellen, welches kostenlos ist:

Im Anschluss müssen die zwei Domains (Tagging-Server und Preview-Server) dem Zertifikat hinzugefügt werden:

Als nächstes wählt man die DNS-Validierung aus:

Den Schritt “Tags hinzufügen” kann man dann überspringen. Danach musst du deine Einstellungen bestätigen, um die CNAME-Datensätze zu bekommen:

DNS-Einträge vornehmen

Um die bei AWS hinterlegten Domains zu validieren, musst du nun die DNS-Datensätze eintragen. Bei einer Migration von GCP zu AWS musst du die bestehenden DNS-Datensätze anpassen. Lege die entsprechenden Einträge an. War es erfolgreich, wird das entsprechend angezeigt:

Danach müssen die Nameserver der definierten Domains zu AWS zeigen. Dazu muss man eine gehostete Zone in AWS Route53 anlegen. Navigiere dazu innerhalb AWS zu Route53. Dann erstelle eine gehostete Zone:

Unter “Domänenname” kommt die Domain des Tagging-Servers:

Klicke dann auf “Gehostete Zone erstellen”. Im Anschluss bekommst du die NS-Sätze, die du nun eintragen musst.

Elastic Beanstalk Applikation erstellen

Im nächsten Schritt brauchen wir eine Elastic Beanstalk Applikation mit 2 Umgebungen:

  • Eine Umgebung für den Preview-Server
  • Eine Umgebung für den Tagging-Server

Navigiere dazu innerhalb AWS zu Elastic Beanstalk und erstelle eine Applikation mit Klick auf “Create Application” auf der Elastic Beanstalk-Startseite. Vergebe dann einen App-Namen:

Weiter unten wählst du als Plattform “Docker” aus. Unter “Tags” musst du nichts einstellen. Unter “Anwendungscode” wählst du “Beispielanwendung”. Danach klickst du ganz unten auf “Weitere Optionen konfigurieren”. Im Anschluss wird die Anwendung erstellt und es dauert einen Moment. Auf der darauffolgenden Seite scrollst du ganz nach unten und klickst “Abbrechen”. Das ist wichtig, da wir die 2 benötigten Umgebungen manuell erstellen möchten.

Gehst du nun auf “Anwendungen” im linken Navigationsmenü innerhalb der Elastic Beanstalk-Einstellungen findest du die soeben erstellte Anwendung:

Umgebungen für Preview-Server erstellen

Jetzt müssen wir die 2 Umgebungen für den Tagging- und Preview-Server erstellen. Hierzu wird auch ein Load-Balancer benötigt. Klicke dazu zunächst auf den Anwendungsnamen aus dem oberen Screenshot. Hier kommst du dann auf eine Ansicht, wo du die erste Umgebung erstellen kannst:

Klicke auf “Eine neue Umgebung erstellen” und dann wähle “Webserver-Umgebung”:

Wähle dann einen sinnvollen Namen:

Unter “Plattform” wählst du “Docker”:

Unter “Anwendungscode” wählst du “Laden Sie Ihren Code hoch”. Hier muss nun die Docker-Datei angefügt werden. Diese findet man unter gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable (siehe Google-Doku). Unter dieser URL stellt Simo Ahava eine fertige JSON-Datei bereit, die als “Dockerrun.aws.json” hochgeladen werden kann:

{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable",
"Update": "true"
},
"Ports": [
{
"ContainerPort": 8080
}
] }

Speichere also die JSON-Datei lokal ab und lade sie an der geeigneten Stelle wieder hoch:

Klicke dann ganz unten auf “Weitere Optionen konfigurieren”. Bei “Software” klickst du dann auf “Bearbeiten”. Scrolle dann runter zu den “Umgebungseigenschaften”. Füge hier 2 Zeilen hinzu:

  • RUN_AS_PREVIEW_SERVER: true
  • CONTAINER_CONFIG: Diesen Wert findest du in den Container-Einstellungen des GTM-Server-Containers

Die CONTAINER_CONFIG findest du also hier:

Die fertigen Umgebungseigenschaften sehen dann wie folgt aus:

Klicke dann auf “Speichern”. Danach klicke bei “Kapazität” auf “Bearbeiten”. Wähle dann folgenden Umgebungstyp und klicke dann ganz unten auf “Speichern”:

Dann gehst du bei “Load Balancer” auf “Bearbeiten”. Unter “Listener” wählst du “Listener hinzufügen”:

Wähle dann folgende Einstellungen und klicke auf “Hinzufügen” (hier wird unser anfangs erstelltes SSL-Zertifikat hinzugefügt):

Dann muss weiter innerhalb der Load Balancer-Einstellungen unter “Prozesse” der bestehende Eintrag bearbeitet werden:

Unter “Zustandsprüfung” werden nun folgende Einstellungen gesetzt und mit “Speichern” bestätigt:

Gleich im Anschluss wird nun ein neuer Prozess hinterlegt:

Wähle bzw. setze dann folgende Angaben und bestätige mit “Hinzufügen”:

Scrolle nun ganz runter und klicke “Speichern”, um die soeben vorgenommenen Load Balancer-Einstellungen zu speichern. Danach kommst du wieder auf die Übersichtsseite der Umgebung. Hier klickst du nun ganz unten rechts auf “Umgebung erstellen”:

Danach wird die Umgebung erstellt:

War alles erfolgreich, dann bekommst du folgende Ansicht:

Zu diesem Zeitpunkt kann nun die Umgebung auch getestet werden, indem die bereitgestellte URL mit /healthz am Ende aufgerufen wird:

Im Browser sollte nun eine weiße Seite mit “ok” erscheinen. Dann hat alles geklappt.

Eigene Domain zum Preview-Server zuweisen

Damit wir nicht die eben markierte – von AWS zur Verfügung gestellte Domain nutzen – sondern unsere eigene, müssen wir unsere eigene Domain dem Preview-Server zuweisen. Dazu gehen wir zu Route53 und klicken auf die vorher erstellte Zone. Dann klicken wir unter “Datensätze” auf “Datensatz erstellen”:

Danach wählst du unter “Datensatzname” die von dir gewählte Domain für den Preview-Server. In meinem Fall wäre das “debug”. Als Datensatztyp behältst du “A”. Ganz rechts klickst du dann auf “Alias” und wählst anschließend folgende Einstellungen:

Die letzte Zeile ganz rechts ist die von AWS zur Verfügung gestellte Domain für den Preview-Server. Klicke dann auf “Einträge erstellen”. Im Anschluss kann man gleich testen, ob alles erfolgreich war. Gehe dazu auf die Preview-Server-Domain inkl. /healthz als Pfad. In meinem Fall wäre das:

https://debug.collect.demirjasarevic.com/healthz

Im Browser sollte dann auf der weißen Seite “ok” ausgegeben werden:

Umgebungen für Tagging-Server erstellen

Nun muss eine Umgebung für den Tagging-Server erstellt werden. Gehe dazu zu der Anwendungsseite von Elastic Beanstalk und klicke auf “Eine neue Umgebung erstellen” innerhalb der bestehenden Anwendung. Als Umgebungsstufe wählst du wie beim Preview-Server “Webserver-Umgebung” aus und vergibst einen sinnvollen Namen:

Wähle dann unter “Plattform” wieder “Docker” aus. Unter “Anwendungscode” wählst du die schon bestehende Version aus:

Klicke dann auf “Weitere Optionen konfigurieren”. Unter “Software” klickst du wieder auf “Bearbeiten” und scrollst runter zu den Umgebungseigenschaften. Hier gibst du dann 2 Zeilen ein:

  • CONTAINER_CONFIG: Diesen Wert findest du in den Container-Einstellungen des GTM-Server-Containers
  • PREVIEW_SERVER_URL: Hier wählst du die SSL-Domain des Preview-Servers

In meinem Fall sehen die Einträge wie folgt aus:

Klicke auf “Speichern” und gehe dann in den Bearbeitungsmodus von “Kapazität”. Wähle als “Umgebungstyp” -> “Mit Lastenausgleich” und klicke dann auf “Speichern”, falls du sonst nichts anpassen möchtest. Gehe nun unter “Load Balancer” auf “Bearbeiten”. Unter “Listener” muss wieder ein Listener hinzugefügt werden:

Dann muss unter “Prozesse” der default-Eintrag angepasst werden. Unter “Zustandsprüfung” musst folgende Einträge hinzufügen:

Danach muss noch ein Prozess hinzugefügt werden:

Danach die Load Balancer-Einstellungen speichern! Und im Anschluss die Umgebung erstellen lassen! Wurde die Umgebung fertig erstellt, kannst du die von AWS zur Verfügung gestellte Domain inkl. /healthz am Ende im Browser aufrufen. Kommt ein “ok” als HTML zurück, passt alles und es kann weitergehen.

Eigene Domain zum Tagging-Server zuweisen

Nun weisen wir unserem Tagging-Server die benutzerdefinierte Domain zu. Wie wechseln also zu Route53 und wählen unsere erstellte Zone. Danach klicken wir auf “Datensatz erstellen” und wählen folgende Einstellungen:

Auch hier kann nach der Erstellung die Domain wie oben beschrieben getestet werden.

Google Tag Manager-Einstellungen

Im Google Tag Manager solltest du nun zu den Container-Einstellungen wechseln. Unter “Tagging-Server-URL” musst du eventuell eine Anpassung vornehmen:

  • Falls du im Zuge des AWS-Deployments eine neue Domain angelegt hast, dann kommt diese hier rein.
  • Falls du den GTM-Server zuvor schon auf der GCP hattest, dann wirst du vermutlich hier schon deine Domain stehen sehen. Falls die Domain gleich geblieben ist, dann musst du hier nichts anpassen.

Bez. dem letzten Punkt macht es ggf. Sinn die DNS-Einträge aus GCP zu entfernen und die App Engine zu deaktivieren, damit keine Kosten mehr entstehen.

Der letzte Test kann nun erfolgen. Gehe in den GTM-Arbeitsbereich und klicke “In Vorschau ansehen”. War alles erfolgreich, muss sich der Vorschaumodus in der von dir konfigurierten Domain öffnen:

Quellen

Last modified: 7. Juni 2021