Heim > Backend-Entwicklung > Golang > Bereitstellung serverloser Anwendungen auf Google Cloud Run

Bereitstellung serverloser Anwendungen auf Google Cloud Run

Susan Sarandon
Freigeben: 2024-11-19 18:23:02
Original
530 Leute haben es durchsucht

Einführung

In diesem Leitfaden werde ich die Container aus dem TeoMeWhy-System von Twitch, das sich derzeit auf AWS befindet, bereitstellen und auf GCP platzieren.

Aktuelle Struktur bei AWS
Implantando Aplicações Serverless no Google Cloud Run

Architektur bei GCP

Implantando Aplicações Serverless no Google Cloud Run

Es werden keine komplexen Automatisierungstools verwendet, alles wird über die Konsole erledigt, die Integration in Github und die Bereitstellung der Bilder bei jedem Commit auf main.
Wir verwenden:

  • Cloud Run – Für Webanwendungen
  • Cloud SQL – Für MySQL-Datenbank
  • GCE – Zum Ausführen von Teomebot
  • Cloud-Speicher – Objektspeicher (S3)
  • Cloud Build – Zum Erstellen von Anwendungsbereitstellungen
  • Secret Manager – Anwendungsanmeldeinformationen sicher speichern.

Besorgen der Bewerbungen

  1. Besuchen Sie TeoMeWhys GitHub und Fork mit Anwendungen, die sich auf das Projekt beziehen.
  2. Klicken Sie auf der Repository-Seite auf Markiert und dann auf Fork. Implantando Aplicações Serverless no Google Cloud Run
  3. Geben Sie auf der Seite Fork dem Fork einen Namen und klicken Sie auf Fork erstellen. Implantando Aplicações Serverless no Google Cloud Run
  4. Wiederholen Sie den Vorgang für die anderen Repositorys im Projekt, wenn Sie die gesamte Umgebung replizieren möchten.
  5. Erstellen Sie den Klon des Forks, um die Anwendung nach Bedarf anzupassen, bevor Sie sie an GCP senden.
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen der Docker-Datei zum Erstellen des Container-Images

Navigieren Sie zum geklonten Repository-Ordner. Das Repository enthält bereits eine für Docker entwickelte Docker-Datei. Lassen Sie es uns analysieren:

```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Docker-Datei ist funktionsfähig, aber wir werden sie mithilfe von mehrstufigen Builds optimieren, um die Größe des endgültigen Bildes zu reduzieren. Da Go keine externen Abhängigkeiten erfordert, können wir ein minimales Basisimage wie scratch.

verwenden
  1. Tauschen Sie das Build-Image durch eine leichtere Version aus und benennen Sie es zur Referenz in anderen Phasen.

    FROM golang:1.23.1-alpine3.20 AS build
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  2. Fügen Sie den Befehl „go mod download“ hinzu, um die Abhängigkeiten zwischenzuspeichern, und überprüfen Sie den go mod, um sicherzustellen, dass sie mit den Prüfsummen in der Datei „go.sum.
    “ übereinstimmen

    RUN go mod download && go mod verify
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  3. Um die Binärdatei für die Produktion zu optimieren, fügen Sie die folgenden Parameter hinzu:

    • CGO_ENABLED=0: Deaktiviert die CGO-Unterstützung. CGO ist die Funktionalität in Go, mit der Sie C-Code aufrufen können. Wenn Sie sie jedoch deaktivieren, erhalten Sie eine vollständig statische Binärdatei ohne Abhängigkeiten von externen Bibliotheken.
    • GOARCH=amd64: Legt die Zielarchitektur für die Kompilierung fest. amd64 ist die Architektur, die auf Maschinen mit 64-Bit-Prozessoren verwendet wird, wie z. B. den meisten modernen Servern und Desktops.
    • GOOS=linux: Definiert das Zielbetriebssystem für die Kompilierung. Hier ist es für Linux konfiguriert, was bedeutet, dass die generierte Binärdatei auf Linux-Systemen ausführbar ist.
    • go build -o /app/points: Kompiliert den Code und speichert die Binärdatei im angegebenen Pfad (/app/points).
    • -a: Erzwingt die Neukompilierung aller Pakete, einschließlich Abhängigkeiten, auch wenn sie sich nicht geändert haben. Es kann hilfreich sein, sicherzustellen, dass alles mit den neuen Flags und Einstellungen neu kompiliert wird.
    • -ldflags="-s -w": Dies sind Flags zur Größenoptimierung.
    • -s entfernt die Debug-Symboltabelle aus der Binärdatei.
    • -w entfernt Stack-Tracing-Informationen. Diese Optionen reduzieren die Größe der endgültigen Binärdatei.
    • -installsuffix cgo: Fügt dem Installationsverzeichnis ein Suffix hinzu, um Binärdateien mit deaktiviertem CGO zu unterscheiden. Dadurch können Konflikte mit Binärdateien vermieden werden, die CGO verwenden.
    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  4. (optional) Um das Bild noch kleiner zu machen, können wir die Binärdatei mit upx komprimieren. upx (Ultimate Packer for eXecutables) ist ein Tool, das ausführbare Binärdateien komprimiert, um die Größe von Dateien zu reduzieren, z. B. Go-Binärdateien. Die negativen Punkte sind Dass es zu einer längeren Erstellungszeit und einer längeren Verzögerung beim Containerstart kommt, daher muss evaluiert werden, was für die Implementierung am vorteilhaftesten ist. Da das Ziel darin besteht, es in Cloud Run zu verwenden, das bereits über einen Kaltstart verfügt, wird der Container angehalten, wenn er nicht verwendet wird. Wir werden es nicht verwenden, da es die Initialisierungszeit des Containers verlängert.

    ```
    FROM golang:latest
    WORKDIR /app/
    COPY . .
    RUN go build main.go
    CMD ["./main"]
    ```
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  • upx --ultra-brute -qq Punkte: Komprimiert die Punkte binär aggressiv, unter Verwendung aller möglichen Komprimierungsoptionen und ohne Ausgabemeldungen anzuzeigen.
  • upx -t Punkte: Testet die komprimierte Binärdatei, um sicherzustellen, dass sie immer noch ordnungsgemäß funktioniert.
  • Sobald die Binärdatei fertig ist, führen wir den zweiten Schritt durch, bei dem die Binärdatei in ein sauberes Image kopiert wird.

    FROM golang:1.23.1-alpine3.20 AS build
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    • Scratch ist ein spezielles Basis-Image in Docker, das ein völlig leeres Image ohne Betriebssystem oder Abhängigkeiten darstellt. Die Verwendung von FROM Scratch ist in minimalistischen Bildern für Go-Anwendungen üblich, wo eine statische Binärdatei ausreicht.
  • Vollständige Datei

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  1. Builds vergleichen
  2. Dockerfile-Optimierung und die Verwendung von upx führen zu einem bis zu dreimal kleineren Bild.
  3. Die Analyse des Originalbilds mit Trivy zeigt 904 CVEs, während das Scratch-Image frei von CVEs ist.
Imagem Tipo Tamanho
points-to-go Otimizado 14MB
points-to-go Com upx 5.77MB
points-to-go original 1.76GB

Implantando Aplicações Serverless no Google Cloud Run

  1. Wiederholen Sie diese Einstellungen für die anderen Repositorys.

Bereitstellung der Datenbank

  1. Greifen Sie in der Konsole im Seitenmenü auf SQL zu. Implantando Aplicações Serverless no Google Cloud Run
  2. Oder suchen Sie in der Suchleiste nach „SQL“ und wählen Sie SQL aus der Liste aus. Implantando Aplicações Serverless no Google Cloud Run
  3. Klicken Sie auf der Cloud SQL-Seite auf Instanz erstellen und wählen Sie MySQL aus. Implantando Aplicações Serverless no Google Cloud Run
  4. Wählen Sie unter Bearbeiten Unternehmen aus.
  5. Wählen Sie unter „Voreinstellungen bearbeiten“ die Option Sandbox.
  6. Belassen Sie die Datenbankversion bei MySQL 8.0. Implantando Aplicações Serverless no Google Cloud Run
  7. Geben Sie der Instanz unter Instanz-ID einen Namen und legen Sie ein Passwort fest.
  8. Sie können Passwortrichtlinien festlegen, indem Sie die Passwortrichtlinie erweitern Implantando Aplicações Serverless no Google Cloud Run
  9. Definieren Sie die Zone und die Region, und wir belassen sie bei einer einzigen Zone. Implantando Aplicações Serverless no Google Cloud Run
  10. Beim Anpassen können wir die Hardware an unsere Bedürfnisse anpassen. Die Optionen variieren je nach der von uns gewählten Edition.
  11. Passen Sie die CPU nach Bedarf auf 1 und die Festplatte auf 10 GB an. Implantando Aplicações Serverless no Google Cloud Run
  12. Deaktivieren Sie bei Verbindungen die Option „Öffentliche IP“ und aktivieren Sie „Private IP“.
  13. Klicken Sie in der privaten Zugangsverbindung auf Verbindung konfigurieren
  14. Wählen Sie Automatisch zugewiesenen Bereich verwenden
  15. Klicken Sie auf Weiter
  16. Klicken Sie auf Verbindung erstellen Implantando Aplicações Serverless no Google Cloud Run
  17. Klicken Sie auf Instanz erstellen und warten Sie, bis sie erstellt wird. Implantando Aplicações Serverless no Google Cloud Run
  18. Um eine Verbindung zur Instanz herzustellen, aktivieren Sie Cloud Shell und führen Sie Folgendes aus:

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

Implantando Aplicações Serverless no Google Cloud Run

  1. Geben Sie das im vorherigen Schritt zugewiesene Passwort ein.
  2. Und dann erhalten Sie einen Verbindungsfehler, da die Cloud-Shell keinen Zugriff auf Ihre private VPC hat. Implantando Aplicações Serverless no Google Cloud Run
  3. Um die Verbindung über Cloud Shell zu vereinfachen, bearbeiten wir die Instanz und markieren die öffentliche IP. Im Anhang werde ich zeigen, wie man VPC-Peering erstellt, um über Cloud Shell Implantando Aplicações Serverless no Google Cloud Run
  4. Versuchen Sie erneut, eine Verbindung herzustellen.
  5. Implantando Aplicações Serverless no Google Cloud Run
  6. Erstellen Sie die Anwendungsdatenbank:


    ```
    FROM golang:latest
    WORKDIR /app/
    COPY . .
    RUN go build main.go
    CMD ["./main"]
    ```
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  7. Cloud Shell verfügt immer noch über einen Texteditor, der auf VSCode basiert. Sie können einige Aktivitäten direkt darüber ausführen. Es verfügt über 5 GB persistentes Volumen in Ihrem /home Hardware ist eine e2-small VM mit 1vCPU und 1,7GB RAM.
    Implantando Aplicações Serverless no Google Cloud Run

Container in Cloud Run erstellen

    Greifen Sie in der Google Cloud-Konsole über das Seitenmenü oder die Suchleiste auf
  1. Cloud Run zu. Implantando Aplicações Serverless no Google Cloud Run
  2. Klicken Sie auf der Cloud Run-Seite auf
  3. Container bereitstellen und wählen Sie die Option Dienst aus. Implantando Aplicações Serverless no Google Cloud Run
  4. Auswahl der Bereitstellungsmethode
  5. Es gibt drei Optionen für die Bereitstellung eines Dienstes:
    • Verwenden Sie ein Container-Image aus einer Registrierung.
    • Direkte Verbindung zu einem Repository herstellen.
    • Erstellen Sie eine Funktion (mit
    • Cloud Functions, integriert in Run).
  6. Wählen Sie für diese Anleitung
  7. Kontinuierliche Bereitstellung mit GitHub aus, damit Google die CI/CD-Pipeline automatisch konfigurieren kann.
  8. Klicken Sie auf

    Mit Cloud Build konfigurieren.
    Implantando Aplicações Serverless no Google Cloud Run

  9. Verbindung zu GitHub konfigurieren

  10. Klicken Sie auf

    Authentifizierung, um die Google-Integration mit Ihrem GitHub zu aktivieren.

  11. Autorisieren Sie den Zugriff und wählen Sie, ob Sie den Zugriff auf alle Repositorys oder nur auf ein bestimmtes zulassen möchten.

  12. Nach Abschluss der Anmeldung klicken Sie auf Weiter.
    Implantando Aplicações Serverless no Google Cloud Run

  13. Build-Typ auswählen

  14. Wählen Sie im Build-Schritt zwischen der Verwendung einer Docker-Datei oder unterstützter Anwendungen und Buildpacks von GCP.

  15. Entscheiden Sie sich für Dockerfile und passen Sie bei Bedarf den Pfad/Dateinamen an
    Implantando Aplicações Serverless no Google Cloud Run

  16. Diensteinstellungen

  17. Konfigurieren Sie die folgenden Parameter:

    • Authentifizierung: Wählen Sie Nicht authentifizierte Anrufe zulassen.
    • CPU-Zuweisung: Wählen Sie CPU wird nur während der Anforderungsverarbeitung zugewiesen.
    • Eingabesteuerung: Wählen Sie Intern. Implantando Aplicações Serverless no Google Cloud Run
  18. Passen Sie den Containeranschluss nach Bedarf für die Anwendung an.
    Implantando Aplicações Serverless no Google Cloud Run

  19. Klicken Sie auf der Registerkarte „Sicherheit“ unter „Dienstkonto“ auf „Erstellen“ Neues Dienstkonto
    Implantando Aplicações Serverless no Google Cloud Run

  20. Rollen hinzufügen

    • Speicherobjektadministrator
    • Cloud Run-Administrator
    • Secret Manager Geheimberater
    • Cloud SQL-Client
    • Cloud Build-Dienstkonto
    • Artifact Registry Recorder
    • Dienstkontobenutzer Implantando Aplicações Serverless no Google Cloud Run
  21. Bei der Analyse des Anwendungscodes müssen wir die Umgebungsvariablen an die Datenbank übergeben.

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  22. Wir müssen den Anwendungscode auf den Cloud Sql-Standard ändern, der Unix-Sockets verwendet, und Cloud Run greift nicht direkt auf die Datenbank zu, sondern verwendet Cloud SQL Auth Proxy.

    ```
    FROM golang:latest
    WORKDIR /app/
    COPY . .
    RUN go build main.go
    CMD ["./main"]
    ```
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  23. Gehen Sie im Container zur Registerkarte „Variablen und Geheimnisse“ und klicken Sie auf „Variable hinzufügen“.

  24. Fügen Sie die erforderlichen Variablen hinzu.

  25. Die Bankadresse folgt dem Muster PROJECT_ID:REGION:INSTANCE_NAME, Sie können den Namen auch unten in Punkt 16 erhalten.
    Implantando Aplicações Serverless no Google Cloud Run

  26. Das Bankpasswort, das wir als GEHEIMNIS angeben werden

  27. Wenn die Option „Neues Geheimnis erstellen“ deaktiviert ist, liegt das daran, dass Sie die API aktivieren müssen.

  28. Klicken Sie auf NEUES GEHEIMNIS ERSTELLEN
    Implantando Aplicações Serverless no Google Cloud Run

  29. Definieren Sie den Secret-Namen und klicken Sie auf Secret erstellen
    Implantando Aplicações Serverless no Google Cloud Run

  30. In Cloud SQL Connections fügen wir die URL der von uns erstellten Bank hinzu
    Implantando Aplicações Serverless no Google Cloud Run

  31. Um das Anwendungsschema zu erstellen, erfordert der Code, dass wir das Argument migrations=true übergeben.

  32. Wir werden migrations=true zum Funktionsargument hinzufügen und es dann in der nächsten Containerrevision entfernen.
    Implantando Aplicações Serverless no Google Cloud Run

  33. Belassen Sie die anderen Felder auf den Standardwerten und klicken Sie auf Erstellen
    Implantando Aplicações Serverless no Google Cloud Run

  34. Testen der Anwendung mit Thunder Client.

  35. Kunden erstellen
    Implantando Aplicações Serverless no Google Cloud Run

  36. registrierte Kunden lesen
    Implantando Aplicações Serverless no Google Cloud Run

Erstellen eines Teomebot-Dienstes

Der Chatbot wird nicht auf Cloud Run bereitgestellt, sondern auf Google Compute Engine (GCE) installiert. Im Gegensatz zu Cloud Run ist Compute Engine ideal, da der Chatbot kontinuierlich aktiv sein muss, um mit dem Chat zu interagieren.

Darüber hinaus werden wir die Verwendung von Containern, Secret Management und Cloud Build-Konfiguration für die Bereitstellungsautomatisierung behandeln.

Erstellen einer VM auf Google Compute Engine (GCE)

  1. Zugriff auf Compute Engine im Seitenmenü der GCP Console.
  2. Klicken Sie auf Instanz erstellen. Implantando Aplicações Serverless no Google Cloud Run
  3. Geben Sie einen Namen für die Instanz ein (z. B. teomebot-instance).
  4. Konfigurieren Sie die Region und Zone nach Bedarf und notieren Sie diese Informationen zur späteren Verwendung. Implantando Aplicações Serverless no Google Cloud Run
  5. Wählen Sie unter Maschinen-Setup den E2-Typ und unter Voreinstellung e2-micro aus. Implantando Aplicações Serverless no Google Cloud Run
  6. Klicken Sie auf die Registerkarte Container und dann auf Container bereitstellen.
  7. Verwenden Sie vorübergehend das nginx:latest-Image, um die Erstkonfiguration abzuschließen.
  8. Fügen Sie die Umgebungsvariablen hinzu:
    • TWITCH_BOT: Bot-Name.
    • TWITCH_CHANNEL: Name des Twitch-Kanals.
    • HOST_DB: Private IP der Cloud SQL-Datenbank.
    • USER_DB: Bankbenutzer.
    • PORT_DB: Bankport.
    • URL_POINTS: Dienstendpunkt Points-to-Go.
  9. Klicken Sie auf „Auswählen“. Implantando Aplicações Serverless no Google Cloud Run
  10. Wählen Sie unter Identität und API-Zugriff das für dieses Projekt konfigurierte Dienstkonto aus. Implantando Aplicações Serverless no Google Cloud Run
  11. Belassen Sie die restlichen Einstellungen auf den Standardeinstellungen und klicken Sie auf Erstellen.

Geheimnisse mit Secret Manager hinzufügen

  1. Vielleicht ist Ihnen aufgefallen, dass wir die Geheimnisse nicht weitergegeben haben. In der Compute-Engine gibt es keine einfache Möglichkeit, sie wie in Cloud Run weiterzugeben. Meine Lösung bestand darin, dem Anwendungscode eine Funktion hinzuzufügen, um Informationen direkt vom Secret Manager zu lesen.
  2. Zugriff auf Secret Manager in der GCP-Konsole.
  3. Klicken Sie auf Geheimnis erstellen
  4. Geben Sie einen beschreibenden Namen ein (z. B. Twitch-Token) und fügen Sie den entsprechenden Wert hinzu.
  5. Kopieren Sie den Pfad des generierten Geheimnisses (z. B.: project/123456/secrets/twitch-token/versions/latest). Implantando Aplicações Serverless no Google Cloud Run
    1. Erstellen Sie eine neue Datei utils/gcp.go
  6. Ändern Sie utils/db.go, um die Funktion aufzurufen, und übergeben Sie den Secret-Manager-Pfad als Parameter.

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
  7. Ändern Sie main.go, um Twitch-Anmeldeinformationen zu erhalten

    ```
    FROM golang:latest
    WORKDIR /app/
    COPY . .
    RUN go build main.go
    CMD ["./main"]
    ```
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

    migration := flag.Bool("migrations", false, "Datenbankmigrationen durchführen")

    flag.Parse()

    godotenv.Load()
    Benutzer := os.Getenv("TWITCH_BOT")
    // ändern
    oauth := utils.AccessSecretVersion("projects/551619572964/secrets/twitch-token/versions/latest")

   channel := os.Getenv("TWITCH_CHANNEL")

Cloud-Build

Cloud Build konfigurieren

Cloud Build wird verwendet, um die Erstellung und Bereitstellung von Container-Images in Compute Engine zu automatisieren.

  1. Erstellen Sie eine cloudbuild.yaml-Datei im Stammverzeichnis des Repositorys mit dem folgenden Inhalt:
  2. Auswechslungen

    FROM golang:1.23.1-alpine3.20 AS build
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

Die Variable _VERSION wird auf einen Wert gesetzt, der v1.0 entspricht. mit dem Hash des aktuellen Commits (${COMMIT_SHA}). Dadurch wird für jeden Build eine eindeutige Version erstellt, wodurch sichergestellt wird, dass jedes Image anhand der Version und des Commits identifizierbar ist.

  • Schritte
    Der Abschnitt „Schritte“ definiert die Schritte, die Cloud Build ausführen muss. Hier haben wir vier Schritte: Erstellen, Pushen (zweimal) und Aktualisieren.

  • Schritt 1: Erstellen Sie das Docker-Image

    RUN go mod download && go mod verify
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

In diesem Schritt wird ein Build des Docker-Images ausgeführt:

  • „--no-cache“: erzwingt den Build ohne Verwendung des Caches.
  • „-t“: definiert Tags für das erstellte Bild:
    • gcr.io/$PROJECT_ID/teomebot:$_VERSION: Bild mit dem Tag, das den Commit-Hash verwendet.
    • gcr.io/$PROJECT_ID/teomebot:latest: Bild mit Tag Latest.
  • „.“: definiert das aktuelle Verzeichnis als Build-Kontext.

Das id: Build-Tag ist eine optionale Kennung für den Schritt, die als Referenz und zum Debuggen nützlich ist.

  • Schritt 2: Bild-Push mit Versions-Tag
RUN CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -o /app/points -a -ldflags="-s -w" -installsuffix cgo
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Schritt wird das Image mit dem spezifischen Tag ($_VERSION) an die Google Container Registry übertragen, sodass die im Build generierte Version im Repository gespeichert werden kann.

  • Schritt 3: Bild-Push mit dem neuesten Tag

    RUN apk add --no-cache curl upx
    RUN upx --ultra-brute -qq points && upx -t points
    
    Nach dem Login kopieren

Dieser Schritt verschiebt das Image mit dem neuesten Tag in die Google Container Registry und aktualisiert das neueste Image mit der neuesten Version.

  • Schritt 4: Container-Update auf einer GCE-Instanz

     FROM scratch AS prod
     WORKDIR /app
     COPY --from=build /app/points /
     CMD ["./points"]
    
    Nach dem Login kopieren

In diesem Schritt wird der Befehl gcloud verwendet, um den Container auf einer Google Compute Engine-Instanz zu aktualisieren:

  • „teomebot-instance“: Gibt den Namen der Instanz an, die den Container ausführt.
  • --container-image: definiert das Container-Image, das die Instanz verwenden soll. Verwenden Sie hier die neueste Version des Bildes.
  • --zone=$_DEPLOY_ZONE: verwendet eine Variable, um die Bereitstellungszone anzugeben.
  • --container-restart-policy=always: Legt die Container-Neustartrichtlinie so fest, dass im Falle eines Fehlers immer neu gestartet wird.
  • Optionen

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

Die Option „logging: CLOUD_LOGGING_ONLY“ gibt an, dass Cloud Build nur bei Cloud Logging protokollieren, Daten speichern und sich auf GCP-Protokolle konzentrieren soll.

  • Endgültige Datei

    ```
    FROM golang:latest
    WORKDIR /app/
    COPY . .
    RUN go build main.go
    CMD ["./main"]
    ```
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

Erstellen eines Triggers für die Container-Image-Erstellung

Einrichten des Dienstkontos

  1. Gehen Sie in der Google Cloud Console zu Cloud Build.
  2. Gehen Sie zu Einstellungen.
  3. Klicken Sie auf Dienstkontoberechtigungen.
  4. Suchen Sie das für Cloud Run erstellte Dienstkonto.
  5. Aktivieren Sie die Option Als bevorzugtes Dienstkonto festlegen
  6. Aktivieren Sie die Rolle Compute-Instanzadministrator für das Dienstkonto. Implantando Aplicações Serverless no Google Cloud Run Den Auslöser erstellen
  7. Klicken Sie im Seitenmenü auf Trigger und dann auf Trigger erstellen. Implantando Aplicações Serverless no Google Cloud Run
  8. Geben Sie einen beschreibenden Namen für den Auslöser ein.
  9. Klicken Sie unter Repositorys auf Repository verbinden und wählen Sie das Repository Teomebot aus. Implantando Aplicações Serverless no Google Cloud Run
  10. Wählen Sie in Konfiguration die Option Cloud Build-Konfigurationsdatei.
  11. Fügen Sie die Ersatzvariable _DEPLOY_ZONE mit dem Wert hinzu, der der Zone entspricht, in der die Instanz erstellt wurde.
  12. Überprüfen Sie im Dienstkonto, ob das ausgewählte Konto der Konfiguration in Schritt 6 entspricht. Implantando Aplicações Serverless no Google Cloud Run
  13. Klicken Sie auf Speichern. Auslöser ausführen
  14. Klicken Sie im Übersichtsbildschirm in der neu erstellten Triggerzeile auf „Ausführen“, um den Prozess manuell auszuführen. Implantando Aplicações Serverless no Google Cloud Run
  15. Befolgen Sie in den Prozessdetails die Schritte zur Image-Erstellung, um nach möglichen Fehlern zu suchen. Implantando Aplicações Serverless no Google Cloud Run

Testen der Anwendung

  1. Kopieren Sie im Compute Engine-Bedienfeld den SSH-Befehl, um auf die Instanz zuzugreifen, oder verwenden Sie den SSH-Webclient und verbinden Sie die Instanz.
  2. Stellen Sie eine Verbindung zur Instanz her und führen Sie die folgenden Befehle aus, um den Status des Containers zu überprüfen:

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

Implantando Aplicações Serverless no Google Cloud Run

Zertifikatprobleme lösen

  1. Wenn ein zertifikatbezogener Fehler auftritt (verursacht durch das Scratch-Basis-Image), ersetzen Sie ihn durch das Distributions-Image. Ändern Sie in der Docker-Datei die Zeile, die das Basisbild definiert, von:

    git clone git@github.com:cslemes/points-to-go.git
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

an:

```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Docker-Datei aktualisiert:

FROM golang:1.23.1-alpine3.20 AS build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Berechtigungen für Secret Manager anpassen

  1. Ändern Sie den Dienstkontobereich, um auf Secret Manager zuzugreifen.
  2. Gehen Sie zur Google Cloud Console.
  3. Gehen Sie im Seitenmenü zu Compute Engine > VM-Instanzen.
  4. Suchen Sie den Namen Ihrer VM-Instanz und klicken Sie darauf.
  5. Klicken Sie auf der VM-Detailseite auf Stopp, um die Instanz herunterzufahren (dieser Schritt ist erforderlich, da der Dienstkontobereich nur geändert werden kann, wenn die Instanz gestoppt ist).
  6. Nachdem die Instanz gestoppt wurde, klicken Sie oben auf der Seite auf Bearbeiten.
  7. Scrollen Sie nach unten zum Abschnitt Identitäts- und Zugriffs-API.
  8. Wählen Sie unter Dienstkonto das Dienstkonto aus, das Ihre Anwendung verwendet.
  9. Wählen Sie unter API-Zugriffsbereiche die Option Vollständigen Zugriff auf alle Cloud-APIs zulassen oder klicken Sie auf Spezifische API-Zugriffsbereiche festlegen und fügen Sie den Bereich https://www hinzu .googleapis.com/auth/cloud-platform.
  10. Nachdem Sie den Bereich angepasst haben, klicken Sie auf Speichern, um die Änderungen zu übernehmen.
  11. Starten Sie die Instanz neu, indem Sie auf Starten klicken.
  12. Oder über die Befehlszeile, indem Sie die Instanz stoppen, den Befehl ausführen und anschließend starten.

    RUN go mod download && go mod verify
    
    Nach dem Login kopieren
    Nach dem Login kopieren
    Nach dem Login kopieren

Weitere Container hinzufügen

Die anderen Dienste folgen demselben Point-to-go-Prozess. Für Dienste, die miteinander kommunizieren, erstellen Sie Umgebungsvariablen, um die Endpunktadressen zu konfigurieren, die immer https-Port 443 sein werden.

Für die Kommunikation mit anderen Diensten habe ich den Code angepasst, um eine weitere Umgebungsvariable mit der URL des Dienstes zu erhalten. In Punkten sah es beispielsweise so aus:

RUN CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -o /app/points -a -ldflags="-s -w" -installsuffix cgo
Nach dem Login kopieren
Nach dem Login kopieren

Testen des Bots

Testen der Kommunikation des Bots mit Twitch.

Implantando Aplicações Serverless no Google Cloud Run

Anpassung der Netzwerksicherheit
Platzieren Sie nach Abschluss der Tests die Container, auf die nur intern zugegriffen werden soll, in der VPC.

Implantando Aplicações Serverless no Google Cloud Run

Abschluss

Damit haben wir die Migration des TeoMeWhy-Systems abgeschlossen, der Leitfaden dient als Grundlage für die Migration der anderen TeoMeWhy-Dienste.

Die wichtigsten erreichten Ziele waren:

Technische Errungenschaften

  • Migration von Containeranwendungen zu Cloud Run, was automatische Skalierbarkeit und Kostensenkung ermöglicht
  • Docker-Image-Optimierung durch mehrstufige Builds, wodurch Image-Größe und Schwachstellen deutlich reduziert werden
  • Implementierung einer verwalteten Datenbank mit Cloud SQL, um hohe Verfügbarkeit und Sicherheit zu gewährleisten
  • Automatisierte CI/CD-Konfiguration mit Cloud Build, wodurch automatische Bereitstellungen von GitHub ermöglicht werden
  • Sichere Verwaltung von Anmeldeinformationen mit Secret Manager

Architektonische Verbesserungen

  • Klare Trennung der Verantwortlichkeiten zwischen den Diensten
  • Nutzung privater Verbindungen für mehr Sicherheit
  • Implementierung serverloser Standards zur Kostenoptimierung
  • Automatisierung von Build- und Bereitstellungsprozessen
  • Nahtlose Integration mit GitHub-Repositories

Erhaltene Vorteile

  1. Kosten: Kostenreduzierung durch das serverlose Modell und Ressourcenoptimierung
  2. Wartbarkeit: Einfache Wartung durch automatisierte Bereitstellungen
  3. Sicherheit: Ordnungsgemäße Verwaltung von Geheimnissen und privaten Verbindungen
  4. Skalierbarkeit: Möglichkeit zur automatischen Skalierung entsprechend der Nachfrage
  5. Überwachung: Bessere Transparenz der Infrastruktur durch native GCP-Tools

Anhang

Aktivieren Sie die Secret Manager-API

  1. Suchen Sie in der Google Cloud-Konsole nach Secret Manager API.
  2. Klicken Sie in den Suchergebnissen auf API. Implantando Aplicações Serverless no Google Cloud Run
  3. Klicken Sie im Detailbildschirm auf Aktivieren. Implantando Aplicações Serverless no Google Cloud Run

Referenzen

  • Github TeoMeWhy
  • Twitch Teo Me Why
  • Cloud Run-Dokumente
  • Compute Engine-Dokumente
  • Cloud Build-Dokumente
  • Secret Manager-Dokumente

Das obige ist der detaillierte Inhalt vonBereitstellung serverloser Anwendungen auf Google Cloud Run. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage