
Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. Cloud Run jest rozwiązaniem bezserwerowym, które nie wymaga zarządzania infrastrukturą, dzięki czemu możesz skupić się na tym, co najważniejsze, czyli tworzeniu świetnych aplikacji. Usługa ta jest oparta na platformie Knative, co pozwala uruchamiać kontenery w Cloud Run (usługa w pełni zarządzana) lub w Cloud Run dla platformy Anthos. Celem tego modułu jest utworzenie obrazu kontenera i wdrożenie go w Cloud Run.
Wymagania wstępne
Nie dotyczy
Samodzielne konfigurowanie środowiska
Jeśli nie masz jeszcze konta Google (Gmail lub Google Apps), musisz je utworzyć. Zaloguj się w konsoli Google Cloud Platform (console.cloud.google.com) i utwórz nowy projekt:
Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.
Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów Google Cloud.
Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione (patrz sekcja „Czyszczenie” na końcu tego dokumentu).
Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w tym samouczku będziesz używać Cloud Shell, czyli ś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 uwierzytelniania. Oznacza to, że do ukończenia tego ćwiczenia potrzebujesz tylko przeglądarki (tak, działa ona na Chromebooku).
Aby aktywować Google Cloud Shell, w konsoli dewelopera kliknij przycisk w prawym górnym rogu (przygotowanie środowiska i połączenie z nim zajmie tylko kilka sekund):
Kliknij przycisk „Uruchom Cloud Shell”:
Po połączeniu z Cloud Shell zobaczysz, że jesteś już uwierzytelniony, a projekt jest już ustawiony na PROJECT_ID :
gcloud auth list
Wynik polecenia
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Cloud Shell domyślnie ustawia też niektóre zmienne środowiskowe, które mogą być przydatne podczas wykonywania kolejnych poleceń.
echo $GOOGLE_CLOUD_PROJECT
Wynik polecenia
<PROJECT_ID>
Jeśli z jakiegoś powodu projekt nie jest ustawiony, po prostu wydaj to polecenie :
gcloud config set project <PROJECT_ID>
Szukasz urządzenia PROJECT_ID? Sprawdź, jakiego identyfikatora użyto w krokach konfiguracji, lub wyszukaj go w panelu konsoli:
WAŻNE: 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 dokumentacji regionów i stref (w języku angielskim).
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 o powodzeniu podobny do tego:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
Utworzysz prostą aplikację Node.js opartą na platformie Express, która odpowiada na żądania HTTP.
Aby skompilować aplikację, użyj Cloud Shell do utworzenia nowego katalogu o nazwie helloworld-nodejs i przejdź do niego.
mkdir helloworld-nodejs cd helloworld-nodejs
Utwórz plik package.json z tą 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, ten plik zawiera polecenie skryptu startowego i zależność od platformy Express umożliwiającej tworzenie aplikacji internetowych.
Następnie w tym samym katalogu utwórz plik index.js i skopiuj do niego tę treść:
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. Aplikacja jest gotowa do skonteneryzowania, przetestowania i przesłania 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ę treść:
# 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 przy pomocy Cloud Build, uruchamiając podane poniżej polecenie z katalogu zawierającego Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT to zmienna środowiskowa zawierająca identyfikator Twojego projektu Google Cloud podczas uruchamiania w Cloud Shell. Możesz też uzyskać go, uruchamiając polecenie gcloud config get-value project.
Po przekazaniu kontenera do rejestru wyświetli się komunikat SUCCESS z 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.
Użyj tego polecenia, aby sporządzić listę wszystkich obrazów kontenerów związanych z bieżącym projektem:
gcloud container images list
Jeśli chcesz uruchomić i przetestować aplikację lokalnie w Cloud Shell, możesz to zrobić za pomocą 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ż po prostu użyć curl localhost:8080.
Skonteneryzowaną aplikację możesz wdrożyć w Cloud Run przy pomocy tego polecenia (pamiętaj, aby dostosować je do prawidłowej nazwy obrazu aplikacji, którą utworzono, 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 --allow-unauthenticated umożliwia dostęp do aplikacji bez uwierzytelniania. Opcja wdrożenia --platform managed \ oznacza, że prosisz o środowisko w pełni zarządzane (a nie infrastrukturę Kubernetes za pomocą Anthos).
Poczekaj chwilę na zakończenie wdrażania. Po zakończeniu operacji 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 zobaczyć wdrożony kontener, otwierając URL usługi w przeglądarce:

Cloud Run automatycznie skaluje obraz kontenera w poziomie, aby obsługiwać otrzymane żądania, a następnie skaluje go w dół, gdy zapotrzebowanie maleje. Płacisz tylko za procesor, pamięć i sieć wykorzystywane w trakcie obsługiwania żądań.
Cloud Run nie nalicza opłat, gdy usługa nie jest używana, ale może zostać pobrana należność za przechowywanie utworzonego obrazu kontenera.
Możesz usunąć projekt Google Cloud, co spowoduje zaprzestanie naliczania opłat za wszelkie zasoby wykorzystywane w ramach tego projektu, albo usunąć tylko obraz helloworld przy użyciu tego polecenia:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Aby usunąć usługę Cloud Run, użyj tego polecenia:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
Gratulacje! Wdrożyliśmy w Cloud Run aplikację spakowaną do obrazu kontenera.
Więcej informacji
Dobrym kolejnym krokiem będzie zapoznanie się z krótkim wprowadzeniem: wdrażanie w Cloud Run w przypadku platformy Anthos w Google Cloud.
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 (w języku angielskim):
Więcej informacji o Knative, projekcie open source, na którym opiera się ta usługa, znajdziesz w artykule Knative.