1. Zanim zaczniesz
Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. Cloud Run to usługa bezserwerowa, eliminuje konieczność zarządzania infrastrukturą, dzięki czemu możesz skupić się na tym, co najważniejsze, czyli tworzeniu świetnych aplikacji. Została utworzona w Knative, co pozwala uruchamiać kontenery w Cloud Run (w pełni zarządzanej) lub Cloud Run for Anthos. Celem tego ćwiczenia w Codelabs jest utworzenie obrazu kontenera i wdrożenie go w Cloud Run.
Wymagania wstępne
Nie dotyczy
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w programie będzie ona określana jako PROJECT_ID
.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Cloud Shell
Google Cloud można sterować zdalnie z laptopa, ale korzystasz z Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud.
Ta maszyna wirtualna oparta na Debianie zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Oznacza to, że do tego ćwiczenia z programowania wystarczy przeglądarka (tak, działa ona na Chromebooku).
- Aby aktywować Cloud Shell z poziomu konsoli Cloud, kliknij Aktywuj Cloud Shell (udostępnienie środowiska i połączenie z nim powinno zająć tylko chwilę).
Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest już uwierzytelniony, a projekt jest już ustawiony na PROJECT_ID
.
gcloud auth list
Dane wyjściowe polecenia
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Dane wyjściowe polecenia
[core] project = <PROJECT_ID>
Jeśli z jakiegoś powodu projekt nie jest skonfigurowany, uruchom po prostu to polecenie:
gcloud config set project <PROJECT_ID>
Szukasz urządzenia PROJECT_ID
? Sprawdź identyfikator użyty w krokach konfiguracji lub wyszukaj go w panelu Cloud Console:
Cloud Shell ustawia też domyślnie niektóre zmienne środowiskowe, które mogą być przydatne podczas uruchamiania kolejnych poleceń.
echo $GOOGLE_CLOUD_PROJECT
Dane wyjściowe polecenia
<PROJECT_ID>
- Na koniec ustaw domyślną strefę i konfigurację projektu.
gcloud config set compute/zone us-central1-f
Możesz wybrać różne strefy. Więcej informacji znajdziesz w artykule Regiony i Strefy.
Włączanie interfejsu Cloud Run API
W Cloud Shell włącz Cloud Run API.
gcloud services enable run.googleapis.com
Powinien wyświetlić się komunikat podobny do tego:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Tworzenie przykładowej aplikacji
Utworzysz prostą aplikację Node.js opartą na Node.js, która odpowiada na żądania HTTP.
Aby utworzyć aplikację, w Cloud Shell utwórz nowy katalog o nazwie helloworld-nodejs
i przekształć w nim katalog.
mkdir helloworld-nodejs cd helloworld-nodejs
Utwórz plik package.json
o takiej zawartości:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
Co najważniejsze, powyższy plik zawiera polecenie skryptu startowego i zależność od platformy internetowej usługi Express.
Następnie w tym samym katalogu utwórz plik index.js
i skopiuj do niego tę zawartość:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
Ten kod tworzy podstawowy serwer WWW, który nasłuchuje na porcie określonym przez zmienną środowiskową PORT
. Możesz teraz skonteneryzować, przetestować swoją aplikację i przesłać ją do Container Registry.
4. Konteneryzowanie aplikacji i przesyłanie jej do Container Registry
Aby skonteneryzować przykładową aplikację, utwórz nowy plik o nazwie Dockerfile
w tym samym katalogu, w którym znajdują się pliki źródłowe, i skopiuj do niego tę zawartość:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
Teraz utwórz obraz kontenera za pomocą Cloud Build, uruchamiając to polecenie w katalogu zawierającym plik Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
to zmienna środowiskowa zawierająca identyfikator projektu Google Cloud uruchomiony w Cloud Shell. Możesz też go uzyskać, uruchamiając gcloud config get-value project
.
Po przekazaniu kontenera do rejestru zobaczysz komunikat SUCCESS
zawierający nazwę obrazu (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
). Obraz będzie przechowywany w Container Registry i w razie potrzeby można go użyć ponownie.
Aby wyświetlić wszystkie obrazy kontenerów powiązane z bieżącym projektem, użyj tego polecenia:
gcloud container images list
Jeśli chcesz uruchomić i przetestować aplikację lokalnie w Cloud Shell, możesz to zrobić przy użyciu tego standardowego polecenia docker
:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
W Cloud Shell kliknij Podgląd w przeglądarce i wybierz Podejrzyj na porcie 8080.
Otworzy się okno przeglądarki z napisem Hello World!
Możesz też użyć po prostu curl localhost:8080
.
5. Wdrożenie w Cloud Run
Skonteneryzowaną aplikację możesz wdrożyć w Cloud Run przy użyciu tego polecenia (pamiętaj, by dostosować je do nazwy obrazu odpowiednio do skompilowanej aplikacji lub użyć gotowego obrazu gcr.io/cloudrun/hello
):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
Opcja wdrażania --allow-unauthenticated
umożliwia dostęp do aplikacji bez uwierzytelniania. Opcja wdrażania --platform managed \
oznacza, że żądanie dotyczy w pełni zarządzanego środowiska (a nie infrastruktury Kubernetes za pomocą platformy Anthos).
Poczekaj chwilę na zakończenie wdrażania. Po zakończeniu w wierszu poleceń wyświetli się URL usługi.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
Możesz teraz wyświetlić wdrożony kontener, otwierając URL usługi w przeglądarce:
Cloud Run automatycznie skaluje obraz kontenera w górę, aby obsługiwać otrzymane żądania, a następnie skaluje w dół, gdy zapotrzebowanie maleje. Płacisz tylko za procesor, pamięć i sieć wykorzystywane podczas obsługi żądań.
6. Czyszczenie danych
Cloud Run nie nalicza opłat, gdy usługa nie jest używana, ale może zostać pobrana opłata za przechowywanie utworzonego obrazu kontenera.
Możesz usunąć projekt Google Cloud, co spowoduje zatrzymanie naliczania opłat za wszystkie zasoby wykorzystywane w ramach tego projektu, lub po prostu usunąć obraz helloworld przy użyciu tego polecenia:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Żeby usunąć usługę Cloud Run, użyj tego polecenia:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. Gratulacje
Gratulacje! Wdrożyłeś(-aś) w Cloud Run aplikację spakowaną do obrazu kontenera.
Więcej informacji
Warto zapoznać się z krótkim wprowadzeniem: wdrażanie do Cloud Run for Anthos w Google Cloud (w języku angielskim).
Więcej informacji o tworzeniu na podstawie kodu bezstanowego kontenera HTTP, który będzie odpowiedni do zastosowania w Cloud Run, i przekazywaniu go do Container Registry znajdziesz w tych materiałach:
Aby dowiedzieć się więcej o Knative, podstawowym projekcie open source, przeczytaj Knative.