[JAVA] Google Cloud Platform mit Spring Boot 2.0.0

Überblick

In diesem zusammenfassenden Artikel erfahren Sie, wie Sie eine mit Spring Boot entwickelte Webanwendung für die Google Cloud Platform (GCP) bereitstellen und über einen Browser darauf zugreifen. In der ersten Hälfte der Seite geht es um die Erstellung der Umgebung wie Compute Engine und Cloud SQL, die zum Ausführen der Webanwendung erforderlich ist, und in der zweiten Hälfte um die Entwicklung der Webanwendung.

Umgebung

Lokaler PC

GCP

Referenz

Umgebung

Die Umgebung wurde in der folgenden Reihenfolge erstellt.

  1. Installieren Sie das Cloud SDK auf Ihrem lokalen PC
  2. Erstellen Sie ein Projekt in GCP
  3. Erstellen Sie ein Dienstkonto für die VM-Instanz
  4. Erstellen Sie einen Bucket im Cloud-Speicher
  5. Erstellen Sie eine DB-Instanz in Cloud SQL
  6. Erstellen Sie eine VM-Instanz in Compute Engine
  7. Fügen Sie eine Firewall-Regel hinzu

Ein einfacher Vergleich mit AWS

Ich hatte Erfahrung mit AWS, aber da GCP ein Anfänger ist, habe ich eine Vergleichstabelle der wichtigsten Dienste erstellt.

Bedienung GCP AWS Verwendung in diesem Artikel
Computing Compute Engine EC2 Ubuntu, 1 Instanz
Datenbank Cloud SQL RDS MySQL, 1 Instanz
Lager Cloud Storage S3 Erstellen Sie 1 Eimer
Blockspeicher Persistente Festplatte EBS Keine zusätzliche Verwendung
Netzwerk Cloud Virtual Network VPC Fügen Sie eine Firewall-Regel hinzu
Lastenausgleicher Cloud Load Balancing ELB Keiner
CDN Cloud CDN CloudFront Keiner
Zugangskontrolle Cloud IAM IAM Fügen Sie ein Dienstkonto hinzu
CLI Cloud SDK CLI Fast nie benutzt

Installieren Sie das Cloud SDK auf Ihrem lokalen PC

Cloud SDK> Dokumente> Cloud SDK installieren

Von den in der offiziellen Dokumentation beschriebenen Methoden habe ich die Methode der Verwendung des "versionierten Archivs" verwendet. In diesem Artikel habe ich die browserbasierte GCP-Konsole zum Arbeiten verwendet, daher verwende ich das Cloud SDK nicht sehr häufig.

** Installieren **

Laden Sie die Archivdatei der Windows-Version herunter und extrahieren Sie sie an einen geeigneten Speicherort. Da zum Ausführen von Cloud SDK Python 2.7.x erforderlich ist, installieren Sie es separat oder verwenden Sie die Python-Bundle-Version.

Führen Sie das Installationsskript im extrahierten Verzeichnis aus. Normalerweise fügt das Installationsskript das Verzeichnis bin zum Pfad der Umgebungsvariablen hinzu, aber es scheint, dass es fehlschlägt. Legen Sie es in diesem Fall manuell fest.

> install.bat

Cloud SDK-Initialisierung

Cloud SDK> Dokumentation> Cloud SDK initialisieren

Initialisieren Sie das SDK. Wenn Sie den folgenden Befehl ausführen, wird der Browser gestartet und Sie werden aufgefordert, sich bei Ihrem Google-Konto zu authentifizieren. (Es scheint, dass Sie das Flag --console-only hinzufügen können, um den Genehmigungsfluss auf Konsolenbasis zu starten.)

> gcloud init

Bestätigung der authentifizierten Kontoinformationen

Sie können die authentifizierten Kontoinformationen mit dem folgenden Befehl überprüfen. Mit dem Cloud SDK können Sie mehrere Konten verwenden, aber immer ist nur eines aktiv.

> gcloud auth list
        Credentialed Accounts
ACTIVE  ACCOUNT
*       ********.********.********@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

Komponenten prüfen

Cloud SDK> Dokumentation> SDK-Komponentenverwaltung

Nach der Installation des Cloud SDK können Sie Befehlszeilentools verwenden, die als einige Komponenten bezeichnet werden. Die wichtigsten sind das gcloud-Tool, das GCP ausführt, und das gsutil-Tool, das Cloud Storage ausführt.

Sie können die installierten / deinstallierten Komponenten mit dem folgenden Befehl überprüfen.

> gcloud components list
Your current Cloud SDK version is: 194.0.0
The latest available version is: 194.0.0

+-------------------------------------------------------------------------------------------------------------+
|                                                  Components                                                 |
+---------------+------------------------------------------------------+--------------------------+-----------+
|     Status    |                         Name                         |            ID            |    Size   |
+---------------+------------------------------------------------------+--------------------------+-----------+
| Not Installed | App Engine Go Extensions                             | app-engine-go            | 153.2 MiB |
| Not Installed | Cloud Bigtable Command Line Tool                     | cbt                      |   4.2 MiB |
| Not Installed | Cloud Bigtable Emulator                              | bigtable                 |   3.7 MiB |
| Not Installed | Cloud Datalab Command Line Tool                      | datalab                  |   < 1 MiB |
| Not Installed | Cloud Datastore Emulator                             | cloud-datastore-emulator |  17.9 MiB |
| Not Installed | Cloud Datastore Emulator (Legacy)                    | gcd-emulator             |  38.1 MiB |
| Not Installed | Cloud Pub/Sub Emulator                               | pubsub-emulator          |  33.4 MiB |
| Not Installed | Emulator Reverse Proxy                               | emulator-reverse-proxy   |  14.5 MiB |
| Not Installed | Google Container Registry's Docker credential helper | docker-credential-gcr    |   2.4 MiB |
| Not Installed | gcloud Alpha Commands                                | alpha                    |   < 1 MiB |
| Not Installed | gcloud Beta Commands                                 | beta                     |   < 1 MiB |
| Not Installed | gcloud app Java Extensions                           | app-engine-java          | 118.9 MiB |
| Not Installed | gcloud app PHP Extensions                            | app-engine-php           |  19.1 MiB |
| Not Installed | gcloud app Python Extensions                         | app-engine-python        |   6.2 MiB |
| Not Installed | gcloud app Python Extensions (Extra Libraries)       | app-engine-python-extras |  27.8 MiB |
| Not Installed | kubectl                                              | kubectl                  |  12.3 MiB |
| Installed     | BigQuery Command Line Tool                           | bq                       |   < 1 MiB |
| Installed     | Cloud SDK Core Libraries                             | core                     |   7.4 MiB |
| Installed     | Cloud Storage Command Line Tool                      | gsutil                   |   3.4 MiB |
+---------------+------------------------------------------------------+--------------------------+-----------+
To install or remove components at your current SDK version [194.0.0], run:
  $ gcloud components install COMPONENT_ID
  $ gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [194.0.0], run:
  $ gcloud components update

Wenn eine neue Version des SDK veröffentlicht wurde, können Sie es mit dem folgenden Befehl aktualisieren. Bitte beachten Sie, dass das Update fehlschlägt, wenn sich das aktuelle Verzeichnis im Installationsverzeichnis befindet.

> gcloud components update

Ein Projekt erstellen

Erstellen Sie alle VM-Instanzen (Compute Engine), Datenbanken (Cloud SQL) und Speicher (Cloud Storage), die zum Ausführen der Webanwendung im Projekt erforderlich sind.

Öffnen Sie die GCP-Konsole und erstellen Sie ein neues Projekt.

p0.png

Notieren Sie sich die Projekt-ID, die beim Erstellen des Projekts ausgegeben wird. Die Projekt-ID finden Sie in den Projektinformationen im Konsolen-Dashboard.

p1.png

Als Nächstes muss ich die Abrechnung für das Projekt aktivieren, habe sie jedoch verwendet, da ein kostenloser Testplatz verfügbar war.

Stellen Sie die veröffentlichte Projekt-ID so ein, dass sie mit dem Tool gcloud betrieben werden kann.

> gcloud config set project <project id>
Update property [core/project].

Erstellen eines Dienstkontos

Compute Engine> Dokumente> Dienstkonto

Erstellen Sie ein Dienstkonto, um die VM-Instanz auszuführen. Wählen Sie im linken Menü der GCP-Konsole "IAM & Berechtigungen" -> "Dienstkonto" -> "Dienstkonto erstellen".

Das in der Liste angezeigte Konto ist das Standarddienstkonto, das automatisch erstellt wird, wenn Sie Compute Engine verwenden (es wird erstellt, wenn Sie Compute Engine nach dem Erstellen eines Projekts zum ersten Mal im Konsolenmenü öffnen, sodass es je nach Zeitpunkt möglicherweise nicht angezeigt wird. Es kann sein). Sie können dieses Konto verwenden. Da dieses Konto jedoch über eine Vielzahl von Berechtigungen verfügt, erstellen Sie ein dediziertes Konto mit den minimal erforderlichen Berechtigungen.

Klicken Sie auf Dienstkonto erstellen, um zu beginnen.

sa0.png

Klicken Sie auf Rollen, um die folgenden Rollen zuzuweisen:

sa1b.png

Eine Rolle ist übrigens eine Sammlung von einer oder mehreren Behörden. Zum Beispiel hat die Rolle von "Storage Object Viewer" oben vier Berechtigungen, wie in der Abbildung gezeigt.

pr0.png

Nach der Erstellung wird es in der Liste angezeigt.

sa2.png

Wenn Sie Ihrem Dienstkonto eine Rolle hinzufügen möchten, öffnen Sie IAM & Administration-> IAM in der GCP-Konsole. Es ist etwas verwirrend, aber klicken Sie auf das Stiftsymbol (beliebig) in Ihrem Dienstkonto.

Das erste auf dieser Seite angezeigte Mitglied ist übrigens das Standardmitglied, das Compute Engine automatisch erstellt.

Compute Engine-Standarddienstkonto Aus historischen Gründen verfügen alle Projekte über ein Standard-Compute Engine-Dienstkonto, das anhand dieser E-Mail identifiziert werden kann. [PROJECT_NUMBER][email protected]

Das zweite Mitglied ist ein spezielles Konto von Google. Dieses Konto wird vom Benutzer niemals verwendet und die Rolle darf nicht geändert oder gelöscht werden.

Google API-Dienstkonto Abgesehen vom Standarddienstkonto verfügt jedes von Compute Engine aktivierte Projekt über ein Google API-Dienstkonto, das anhand dieser E-Mail identifiziert werden kann. [PROJECT_NUMBER]@cloudservices.gserviceaccount.com

Das dritte Mitglied ist mein Google-Konto, das vollen Zugriff auf alle Ressourcen hat, da die Rolle im Besitz ist. Das vierte Mitglied ist das Mitglied zum Ausführen der diesmal hinzugefügten VM-Instanz.

sa3b.png

Klicken Sie auf Weitere Rolle hinzufügen. Sie können auch vorhandene Rollen ändern oder löschen.

sa4b.png

Erstellen Sie einen Bucket im Cloud-Speicher

Erstellen Sie einen Bucket, um die lokal erstellte JAR-Datei abzulegen. Wählen Sie im linken Menü der GCP-Konsole Speicher-> Browser-> Neuen Bucket erstellen.

Klicken Sie auf die Schaltfläche Bucket erstellen, um zu beginnen.

s0.png

Ich habe Regional als Standardspeicherklasse ausgewählt. Ich dachte, es wäre in Ordnung, "Nearline" oder "Coldline" zu verwenden, da ich die JAR-Datei nur vorübergehend abgelegt habe, aber ich habe sie gestoppt, weil es den Anschein hat, als würde mir eine Gebühr berechnet, wenn ich sie vorzeitig lösche (vor der Mindestaufbewahrungsdauer löschen).

s1.png

** Merkmale der Speicherklasse **

Es ist ein Merkmal ab März 2018.

Sobald der Bucket erstellt wurde, wird er in der Liste angezeigt.

s2.png

Laden Sie eine entsprechende Datei hoch, um den Vorgang zu überprüfen.

Es ist auch möglich, die Berechtigungen für jeden Bucket wie in der Abbildung gezeigt zu bearbeiten. Da Sie dem Dienstkonto für die zuvor erstellte VM-Instanz "Storage Object Viewer" und "Storage Object Creator" zugewiesen haben, wird dieses Dienstkonto in den Berechtigungen dieses Buckets angezeigt.

s3.png

Erstellen Sie eine DB-Instanz in Cloud SQL

Erstellen Sie eine DB-Instanz (MySQL 5.7) der von der Webanwendung verwendeten Datenbank. Wählen Sie SQL aus dem linken Menü der GCP-Konsole.

Klicken Sie auf die Schaltfläche Instanz erstellen, um zu beginnen.

db0.png

Wählen Sie MySQL als Datenbankmodul.

db1.png

Wählen Sie die zweite Generation.

db2.png

Geben Sie die Instanz-ID und das Kennwort ein. Klicken Sie dann auf die Konfigurationsoption.

db3.png

Einige Konfigurationen sind durch Hinzufügen eines Einstellungsoptionsflags möglich.

db31.png

Es scheint, dass das Flag nur für die Elemente gesetzt werden kann, die im Voraus mit der Auswahlformel vorbereitet wurden (zumindest über die GCP-Konsole).

db31b.png

Der Maschinentyp und die Speichereinstellungen sind in der folgenden Abbildung dargestellt. Der ausgewählte Maschinentyp ist der Typ mit der niedrigsten Leistung für die Entwicklung.

db32.png

Sobald die Instanz erstellt wurde, wird sie in der Liste angezeigt. Notieren Sie sich den auf dem Bildschirm angezeigten "Instanzverbindungsnamen", der später verwendet wird.

db4.png

Aktivieren Sie die Google Cloud SQL-API

Sie müssen "Google Cloud SQL API" aktivieren, um von Ihrer VM-Instanz aus eine Verbindung zu MySQL herzustellen. Diese Abbildung ist bereits mit aktivierter API und wurde zunächst nicht angezeigt. "Google Cloud SQL" wird oben angezeigt, aber ich kann keine Verbindung herstellen, auch wenn dies aktiviert ist. Klicken Sie auf APIs und Dienste aktivieren, um die API zu aktivieren.

a0b.png

Wenn Sie "Google Cloud SQL" in das Suchfeld eingeben und suchen, wird "Google Cloud SQL API" angezeigt.

a1.png

Klicken Sie auf Aktivieren, um es zu aktivieren.

a3.png

Erstellen Sie eine VM-Instanz in der Compute Engine

Erstellen Sie eine VM-Instanz, um Ihre Webanwendung auszuführen. Wählen Sie im linken Menü der GCP-Konsole Compute Engine-> VM Instance aus.

Klicken Sie auf die Schaltfläche Erstellen, um zu beginnen.

vm0.png

Geben Sie die Spezifikationen der VM-Instanz ein, die Sie erstellen möchten.

vm1b.png

Geben Sie das Startskript mit zusätzlichen Einstellungen ein

vm2.png

** Inhalt des Startskripts **

Im Startskript können Sie den Initialisierungsprozess beschreiben, den Sie unmittelbar nach dem Start der Instanz ausführen möchten. In diesem Beispiel werden openjdk, mysql-client und google-fluentd installiert. Obwohl auskommentiert, ist es auch möglich, die Metadaten vom Metadatenserver abzurufen und in der Umgebungsvariablen festzulegen.

#! /bin/bash

set -e
set -v

# Talk to the metadata server to get the project id
#export PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")
#export BUCKET=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/attributes/MY_BUCKET" -H "Metadata-Flavor: Google")

#echo "Project ID: ${PROJECTID}  Bucket: ${BUCKET}"

# Install dependencies from apt
sudo apt-get update
sudo apt-get --only-upgrade install -yq google-cloud-sdk
sudo apt-get install -yq openjdk-8-jdk

# Make Java8 the default
sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

# MySQL
sudo apt-get install -yq mysql-client

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl -sSO "https://dl.google.com/cloudagents/install-logging-agent.sh"
sudo bash install-logging-agent.sh

echo "Startup Complete"

Geben Sie "Web-App" für das Netzwerk-Netzwerk-Tag ein. Dieses Tag wird später beim Hinzufügen von Firewall-Regeln verwendet. Klicken Sie abschließend auf die Schaltfläche "Erstellen".

vm6.png

Sobald die VM-Instanz erstellt wurde, wird sie in der Liste angezeigt. Sie können auf diese VM-Instanz zugreifen, indem Sie auf die externe IP zugreifen. Es handelt sich jedoch um eine kurzlebige (temporäre) IP-Adresse. Sie können eine statische IP-Adresse auch separat reservieren und zuweisen.

vm3.png

Verbinden Sie sich mit SSH

Wählen Sie im SSH-Pulldown-Menü der Verbindung die Option Show gcloud-Befehle aus.

vm4.png

Die für die Verbindung erforderliche gcloud-Befehlszeile wird angezeigt.

vm5b.png

Wenn Sie die in der Abbildung gezeigte Befehlszeile an der Windows-Eingabeaufforderung ausführen, wird die Terminalsoftware automatisch gestartet und stellt eine Verbindung zur VM-Instanz her.

> gcloud compute --project "project-********" ssh --zone "us-east1-b" "web-app-instance-1"

Das Cloud SDK ist bereits auf der VM-Instanz installiert.

$ gcloud components list
Your current Cloud SDK version is: 194.0.0
The latest available version is: 194.0.0

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                  Components                                                 │
├───────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬───────────┤
│     Status    │                         Name                         │            ID            │    Size   │
├───────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼───────────┤
│ Not Installed │ App Engine Go Extensions                             │ app-engine-go            │ 151.9 MiB │
│ Not Installed │ Cloud Bigtable Command Line Tool                     │ cbt                      │   4.5 MiB │
│ Not Installed │ Cloud Bigtable Emulator                              │ bigtable                 │   3.7 MiB │
│ Not Installed │ Cloud Datalab Command Line Tool                      │ datalab                  │   < 1 MiB │
│ Not Installed │ Cloud Datastore Emulator                             │ cloud-datastore-emulator │  17.9 MiB │
│ Not Installed │ Cloud Datastore Emulator (Legacy)                    │ gcd-emulator             │  38.1 MiB │
│ Not Installed │ Cloud Pub/Sub Emulator                               │ pubsub-emulator          │  33.4 MiB │
│ Not Installed │ Emulator Reverse Proxy                               │ emulator-reverse-proxy   │  14.5 MiB │
│ Not Installed │ Google Container Local Builder                       │ container-builder-local  │   3.8 MiB │
│ Not Installed │ Google Container Registry\'s Docker credential helper│ docker-credential-gcr    │   3.3 MiB │
│ Not Installed │ gcloud app Java Extensions                           │ app-engine-java          │ 118.9 MiB │
│ Not Installed │ gcloud app PHP Extensions                            │ app-engine-php           │           │
│ Not Installed │ gcloud app Python Extensions                         │ app-engine-python        │   6.2 MiB │
│ Not Installed │ gcloud app Python Extensions (Extra Libraries)       │ app-engine-python-extras │  27.8 MiB │
│ Not Installed │ kubectl                                              │ kubectl                  │  12.3 MiB │
│ Installed     │ BigQuery Command Line Tool                           │ bq                       │   < 1 MiB │
│ Installed     │ Cloud SDK Core Libraries                             │ core                     │   7.4 MiB │
│ Installed     │ Cloud Storage Command Line Tool                      │ gsutil                   │   3.4 MiB │
│ Installed     │ gcloud Alpha Commands                                │ alpha                    │   < 1 MiB │
│ Installed     │ gcloud Beta Commands                                 │ beta                     │   < 1 MiB │
└───────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴───────────┘
To install or remove components at your current SDK version [194.0.0], run:
  $ gcloud components install COMPONENT_ID
  $ gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [194.0.0], run:
  $ gcloud components update

Überprüfen Sie die Java-Version

$ java -version
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1~deb9u1-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)

Überprüfen Sie die Version von MySQL Client

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.26-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Überprüfen Sie die Protokollierung

Überprüfen Sie, ob das von IAM und google-fluentd zugewiesene "Protokollschreiben", das vom Startskript installiert wurde, effektiv funktioniert.

$ ps -aux | grep google-fluentd

Schreiben Sie ein Bestätigungsprotokoll. Öffnen Sie "Protokollierung" -> "Protokolle" in der Konsole und überprüfen Sie, ob die folgende Meldung im Protokoll dieser VM-Instanz enthalten ist.

$ logger "test log message"

Greifen Sie von einer VM-Instanz auf MySQL zu

Cloud SQL> Dokumente> MySQL> MySQL-Client über Compute Engine verbinden

Es gibt verschiedene Möglichkeiten, eine Verbindung von einer Compute Engine-VM-Instanz zu einer Cloud SQL DB-Instanz herzustellen. In diesem Artikel wurde jedoch cloud_sql_proxy verwendet.

Installieren Sie cloud_sql_proxy.

$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
$ chmod +x cloud_sql_proxy

Starten Sie den Proxy am TCP-Socket. Die für Instanzen angegebene Zeichenfolge lautet "Name der Instanzverbindung".

$ ./cloud_sql_proxy -instances=project-********:us-east1:mysql-********-********=tcp:3306 &
[1] 1415
2018/03/28 05:03:00 Listening on 127.0.0.1:3306 for project-********:us-east1:mysql-********-*********
2018/03/28 05:03:00 Ready for new connections

Überprüfen Sie, ob Sie eine Verbindung mit dem MySQL-Client herstellen können.

$ mysql -h 127.0.0.1 -u root -p
Enter password:
2018/03/28 05:03:20 New connection for "project-********:us-east1:mysql-********-*********"
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 178
Server version: 5.7.14-google-log (Google)

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>
Demo-Datenbank

Erstellen Sie eine Datenbank zur Verwendung in Webanwendungen.

CREATE DATABASE IF NOT EXISTS demo_db
  CHARACTER SET = utf8mb4
  COLLATE = utf8mb4_general_ci;
CREATE USER IF NOT EXISTS 'demo_user'@'%'
  IDENTIFIED BY 'demo_pass'
  PASSWORD EXPIRE NEVER;

GRANT ALL ON demo_db.* TO 'demo_user'@'%';
DROP TABLE IF EXISTS memo;

CREATE TABLE IF NOT EXISTS memo (
  id BIGINT AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  description TEXT NOT NULL,
  done BOOLEAN NOT NULL DEFAULT FALSE,
  updated TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  PRIMARY KEY (id)
)
ENGINE = INNODB,
CHARACTER SET = utf8mb4,
COLLATE utf8mb4_general_ci;
INSERT INTO memo (id, title, description, done, updated) VALUES
  (1, 'memo shopping', 'memo1 description', false, '2018-01-04 12:01:00'),
  (2, 'memo job', 'memo2 description', false, '2018-01-04 13:02:10'),
  (3, 'memo private', 'memo3 description', false, '2018-01-04 14:03:21'),
  (4, 'memo job', 'memo4 description', false, '2018-01-04 15:04:32'),
  (5, 'memo private', 'memo5 description', false, '2018-01-04 16:05:43'),
  (6, 'memo travel', 'memo6 description', false, '2018-01-04 17:06:54'),
  (7, 'memo travel', 'memo7 description', false, '2018-01-04 18:07:05'),
  (8, 'memo shopping', 'memo8 description', false, '2018-01-04 19:08:16'),
  (9, 'memo private', 'memo9 description', false, '2018-01-04 20:09:27'),
  (10,'memo hospital', 'memoA description', false, '2018-01-04 21:10:38')
;

Stellen Sie sicher, dass Sie sich mit demo_user anmelden können.

$ mysql -h 127.0.0.1 -D demo_db -u demo_user -p
Stellen Sie eine Verbindung von Ihrem lokalen PC her (Windows)

** Verbinde dich mit gcloud **

Sie können auch eine Verbindung zu einer DB-Instanz mit dem Tool gcloud anstelle des MySQL-Clients herstellen. Die zu diesem Zeitpunkt verwendeten Informationen sind die ID der DB-Instanz und nicht der Name der Instanzverbindung.

> gcloud sql connect <db instance id> -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Connecting to database with SQL user [root].Enter password: ********

** Verbinde dich mit cloud_sql_proxy **

Cloud SQL> Dokumentation> MySQL> Schnellstart bei Verwendung von Proxy für lokale Tests

Eine Windows-Version von cloud_sql_proxy wird bereitgestellt. Die Verbindungsmethode entspricht der Verbindung von einer VM-Instanz.

> cloud_sql_proxy_x64.exe -instances=project-********:us-east1:mysql-********=tcp:3306

Greifen Sie von einer VM-Instanz auf den Speicher zu

Verwenden Sie das Tool gsutil, um festzustellen, ob die Bucket-Objekte sichtbar sind.

$ gsutil ls gs://<my_bucket_name>
gs://<my_bucket_name>/test.txt

Überprüfen Sie, ob Sie die Datei aus dem Bucket herunterladen können.

$ gsutil cp gs://<my_bucket_name>/test.txt .
Copying gs://<my_bucket_name>/test.txt...
/ [1 files][    6.0 B/    6.0 B]
Operation completed over 1 objects/6.0 B.

Überprüfen Sie, ob Sie die Datei in den Bucket hochladen können.

$ echo "test" > test2.xt
$ gsutil test2.txt gs://<my_bucket_name>
Copying file://test2.txt [Content-Type=text/plain]...
/ [1 files][    6.0 B/    6.0 B]
Operation completed over 1 objects/6.0 B.

Firewall-Regel hinzufügen

Da die Webanwendung Port 9000 überwacht, fügen Sie eine Regel hinzu, um 9000 zu übergeben. Wählen Sie im linken Menü der GCP-Konsole VPC-Netzwerk-> Firewall-Regeln aus.

Klicken Sie auf Firewall-Regel erstellen, um zu beginnen.

f0.png

Geben Sie für das Ziel-Tag das Netzwerk-Tag ein, das beim Erstellen der VM-Instanz festgelegt wurde. Durch die Angabe eines Tags wird festgelegt, für was diese Regel gilt.

f1.png

Webanwendung, die auf GCP ausgeführt wird

Das Verfahren zum Ausführen einer Webanwendung, die mit Spring Boot auf einer VM-Instanz entwickelt wurde, ist wie folgt.

Bauen Sie auf einem lokalen PC auf und generieren Sie eine JAR-Datei

> mvn clean package

Laden Sie die generierte JAR-Datei in den Bucket hoch

> gsutil cp .\target\demo-gcp-spring2-0.0.1-SNAPSHOT.jar gs://<my_bucket_name>

Laden Sie die JAR-Datei aus dem Bucket auf die VM-Instanz herunter

$ gsutil cp gs://<my_bucket_name>/demo-gcp-spring2-0.0.1-SNAPSHOT.jar .

Führen Sie die JAR-Datei auf der VM-Instanz aus

$ java -jar demo-gcp-spring2-0.0.1-SNAPSHOT.jar

Zugriff mit einem Browser

http://<Externe IP der VM-Instanz>:9000/<Anwendungs-API>

** JAR-Datei senden **

Compute Engine> Dokumente> Dateien an Instanzen übertragen

Die JAR-Datei wird über einen Bucket an die VM-Instanz gesendet. Es gibt jedoch auch eine Möglichkeit, den Befehl gcloud compute scp zu verwenden.

> gcloud compute scp <local_file_name> <instance_id>:/tmp

Anwendungsspezifikationen

Eine REST-API, die mit json eine oder mehrere Daten in der Memotabelle zurückgibt.

API, um 1 zu erhalten

/app/memo/{id}

** Antwortbeispiel **

{
    "id": 1,
    "title": "memo shopping",
    "description": "memo1 description",
    "done": false,
    "updated": "2018-01-04T12:01:00"
}

API zum Abrufen mehrerer Datensätze

/app/memo/list?size=3

** Antwortbeispiel **

[
    {
        "id": 1,
        "title": "memo shopping",
        "description": "memo1 description",
        "done": false,
        "updated": "2018-01-04T12:01:00"
    },
    {
        "id": 2,
        "title": "memo job",
        "description": "memo2 description",
        "done": false,
        "updated": "2018-01-04T13:02:10"
    },
    {
        "id": 3,
        "title": "memo private",
        "description": "memo3 description",
        "done": false,
        "updated": "2018-01-04T14:03:21"
    }
]

Ergänzung

Cloud Storage JSON API

Cloud-Speicher> Dokumentation> Übersicht über die JSON-API für Google Cloud-Speicher

Abrufen von Bucket-Informationen von einer VM-Instanz mithilfe von Curl. Die API-Authentifizierung verwendet OAuth 2.0.

Beziehen Sie das für die Authentifizierung erforderliche Zugriffstoken. Dieses Token wird vom Dienstkonto der VM-Instanz ausgegeben.

$ gcloud auth list
                             Credentialed Accounts
ACTIVE  ACCOUNT
*       compute-engine-web-application@project-********.iam.gserviceaccount.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
$ gcloud auth print-access-token
<access_token>

Geben Sie das erhaltene Zugriffstoken im Authorization-Header an. Diese / b / <Bucket> / oJSON-API gibt eine Liste von Objekten in dem durch \ <Bucket > angegebenen Bucket zurück.

$ curl 'https://www.googleapis.com/storage/v1/b/<bucket>/o' \
  -H 'Authorization: Bearer <access_token>' \
  -H 'Accept: application/json' \
  --compressed

Recommended Posts

Google Cloud Platform mit Spring Boot 2.0.0
Mit Spring Boot herunterladen
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Oauth2-Authentifizierung mit Spring Cloud Gateway
[Google Cloud] Erste Schritte mit Docker
Erstellen Sie eine App mit Spring Boot
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
HTTPS mit Spring Boot und Let's Encrypt
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Formularklassenvalidierungstest mit Spring Boot
Konfigurieren Sie Microservices mit Spring Cloud (4): API Gateway
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Fordern Sie Spring Boot heraus
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)