Google Cloud Run
Czym jest Cloud Run i jak wykorzystać go do hostowania własnych aplikacji.
Stworzyłem aplikację spring i zabezpieczyłem ją za pomocą spring security, jednak jak można ją najłatwiej hostować?.
Cloud Run wymaga stworzenia obrazu, jednak w naszym wypadku działa również stworzenie pliku .jar .
Wgrać obraz można przez kilka sposobów, jednym z nich jest bezpośrednie wgranie obrazu przez panel Cloud Run. drugim wykrzystanie Google SDK shell.
Sposób wgrania obrazu na Cloud Run przez Google SDK
gcloud run deploy [NAZWA_USŁUGI] --source .
Przykładowy Plik Dockerfile
FROM eclipse-temurin:17-jre-jammy
WORKDIR /app
COPY app1.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
Wybranie regionu i zarządzanie kosztem instancji.
Podczas wgrywania przez Google CLoud SDK, nie istnieje wybór obsłużeń połączeń, ani instancje CPU dla Revision scaling. Można to jednak edytować używając opcji "Edit & deploy new revision"
Najlepszą opcja wyboru dla zachowania niskich kosztów jest wybór "Billing - Request-based" i "0 Minimum number if instances".
Request based naliczy koszty jedynie dla wykonanych requestów do strony, a minimalna ilość instancji, nie będzie trzymała uruchomionej instancji,
gdy nikt nie korzysta z naszej aplikacji.
Najważniejsza opcja wyboru instancji.
Jednak pomimo wybrania zerowej ilości instancji, google cloud automatycznie wciąż nalicza koszty. Okazuje się, że pozostaje inne pole skalowanie, które odpowiada za ilość instancji.
Wynik po wprowadzeniu zmian:
Podłączenie do repozytorium Git.
Osobiście wybrałem opcje ciągłego wgrywania do Cloud Run, dzięki użyciu odpowiedniego pliku .yaml Plik .yaml wystarczy dograć,a cała reszta kroków opisanych w pliku się wykona, czyli:1. Stworzenie pliku .jar 2. Zbudowanie obrazu Dockera. 3. Wdrażanie obrzu w Cloud Run. 4. Przekazanie obraz do Artifact Registry
Przykładowy Plik .yaml
steps:
# Krok 1: Budowanie .jar
- name: 'maven:3.9-eclipse-temurin-17'
args: ['mvn', 'package', '-DskipTests']
id: 'Build JAR'
# Krok 2: budowanie obrazu Docker
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- '${_AR_HOSTNAME}/${_AR_PROJECT_ID}/${_AR_REPOSITORY}/${_SERVICE_NAME}:latest'
- '.'
id: 'Build Image'
waitFor: ['Build JAR']
# Krok 3: Wdrażanie obrzu w Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
args:
- 'run'
- 'deploy'
- '${_SERVICE_NAME}'
- '--image=${_AR_HOSTNAME}/${_AR_PROJECT_ID}/${_AR_REPOSITORY}/${_SERVICE_NAME}:latest'
- '--region=${_DEPLOY_REGION}'
- '--platform=${_PLATFORM}'
- '--quiet'
id: 'Deploy to Cloud Run'
waitFor: ['Build Image']
# Przekaż obraz do Artifact Registry
images:
- '${_AR_HOSTNAME}/${_AR_PROJECT_ID}/${_AR_REPOSITORY}/${_SERVICE_NAME}:latest'