Informacje o tym ćwiczeniu (w Codelabs)
1. Omówienie
W tym module utworzysz bazę danych AlloyDB przy użyciu zadania Cloud Run. Skonfigurujesz dostęp do usług prywatnych i bezserwerowy dostęp do VPC, aby umożliwić połączenie między zadaniem Cloud Run a bazą danych AlloyDB przy użyciu prywatnego adresu IP.
Czego się nauczysz
Z tego modułu nauczysz się:
- Skonfiguruj klaster i instancję AlloyDB
- Wdrażanie zadania Cloud Run w celu utworzenia bazy danych AlloyDB
2. Konfiguracja i wymagania
Konfigurowanie projektu Cloud
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
- Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu. - Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Konfiguracja środowiska
Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.
Aby włączyć interfejsy API usług, skopiuj poniższe polecenie i wklej je w terminalu, a następnie naciśnij Enter:
gcloud services enable \
alloydb.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com \
vpcaccess.googleapis.com \
compute.googleapis.com \
servicenetworking.googleapis.com \
--quiet
Ustaw zmienne środowiskowe:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export DB_DATABASE=test
export DB_USER=postgres
export DB_PASSWORD=password123
export REGION=us-central1
export CLUSTER=test-cluster
export INSTANCE=test-instance
export VPC_CONNECTOR=vpcconnector
3. Skonfiguruj i utwórz klaster AlloyDB
Ustaw uprawnienia wymagane do konfiguracji. Dzięki temu zadanie Cloud Run będzie mogło połączyć się z bazą danych AlloyDB.
gcloud projects add-iam-policy-binding $PROJECT_NAME \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/alloydb.client"
Konfigurowanie prywatnego dostępu do usług
Dostęp do usług prywatnych jest zaimplementowany jako połączenie równorzędne VPC między siecią VPC a bazową siecią VPC Google Cloud, w której znajdują się zasoby AlloyDB (klastry i instancje). Połączenie prywatne umożliwia zasobom w Twojej sieci VPC komunikowanie się z zasobami AlloyDB, do których mają dostęp wyłącznie za pomocą wewnętrznych adresów IP. Zasoby w Twojej sieci VPC nie potrzebują dostępu do internetu ani zewnętrznych adresów IP, aby mieć dostęp do zasobów AlloyDB.
Aby utworzyć konfigurację dostępu do usług prywatnych w sieci VPC znajdującej się w tym samym projekcie Cloud co AlloyDB, musisz wykonać 2 operacje:
Utwórz przydzielony zakres adresów IP w sieci VPC.
gcloud compute addresses create google-managed-services-default \
--global \
--purpose=VPC_PEERING \
--prefix-length=20 \
--network=projects/$PROJECT_ID/global/networks/default
Utwórz połączenie prywatne między siecią VPC a bazową siecią VPC Google Cloud. Zajmie to około 2 minut.
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-default \
--network=default \
--project=$PROJECT_ID
Utwórz klaster AlloyDB.
gcloud beta alloydb clusters create $CLUSTER \
--password=$DB_PASSWORD \
--network=default \
--region=$REGION \
--project=$PROJECT_NAME
gcloud beta alloydb clusters describe $CLUSTER --region=$REGION
Utwórz instancję AlloyDB. Zajmie to około 10 minut.
gcloud beta alloydb instances create $INSTANCE \
--cluster=$CLUSTER \
--region=$REGION \
--instance-type=PRIMARY \
--cpu-count=2 \
--project=$PROJECT_NAME
gcloud beta alloydb instances describe $INSTANCE \
--cluster=$CLUSTER \
--region $REGION
Sprawdź utworzony klaster w konsoli Cloud.
Zapisz adres IP bazy danych w zmiennej.""
export DB_HOST=$(gcloud beta alloydb instances describe $INSTANCE \
--cluster=$CLUSTER \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo "DB_HOST=$DB_HOST"
4. Zbadaj kod zadania Cloud Run
Bazę danych AlloyDB możesz utworzyć na kilka sposobów. Pierwszym z nich jest utworzenie maszyny wirtualnej Compute Engine, zainstalowanie klienta psql i połączenie się z instancją w celu utworzenia bazy danych. Więcej informacji na temat tego podejścia znajdziesz tutaj.
W tym module utworzysz nową bazę danych AlloyDB przy użyciu zadania Cloud Run.
Przejrzyj pliki poniżej:
- Dockerfile – instaluje wymagane zależności(postgresql-client)
- Script.sh – tworzy bazę danych za pomocą narzędzi wiersza poleceń
W Cloud Shell utwórz nowy folder:
mkdir ~/alloy-db-cloud-run-job
cd ~/alloy-db-cloud-run-job
Utwórz nowy plik Dockerfile
:
cat > Dockerfile <<EOF
FROM ubuntu:latest
RUN apt-get update && apt-get install -y postgresql-client && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
EOF
Utwórz nowy plik script.sh
z zawartością poniżej:
echo "Connecting to $DB_HOST"
createdb -h $DB_HOST -p 5432 $PGDB
echo "Created $PGDB database"
psql -h $DB_HOST -l
Zmień uprawnienia w script.sh:
chmod +x script.sh
5. Wdrażanie zadania Cloud Run
Skonfiguruj bezserwerowy dostęp do VPC. Dzięki temu zadanie Cloud Run może komunikować się z klastrem AlloyDB przy użyciu wewnętrznego/prywatnego adresu IP. Zajmie to około 2 minut.
gcloud compute networks vpc-access connectors create ${VPC_CONNECTOR} \
--region=${REGION} \
--range=10.8.0.0/28
Tworzenie repozytorium Artifact Registry do przechowywania obrazów kontenerów.
gcloud artifacts repositories create db-job-repository \
--repository-format=docker \
--location=$REGION
Utwórz i opublikuj obraz kontenera w Artifact Registry.
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest
Wdrażanie zadania Cloud Run.
gcloud beta run jobs create db-job \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest \
--set-env-vars DB_HOST=$DB_HOST \
--set-env-vars PGUSER=$DB_USER \
--set-env-vars PGPASSWORD=$DB_PASSWORD \
--set-env-vars PGDB=$DB_DATABASE \
--vpc-connector $VPC_CONNECTOR \
--region $REGION
Sprawdź flagi użyte do utworzenia zadania:
--vpc-connector
– zadanie Cloud Run będzie korzystać z oprogramowania sprzęgającego VPC, aby uzyskać dostęp do prywatnego adresu IP AlloyDB.
Sprawdź utworzone zadanie w konsoli Cloud.
Wykonaj zadanie Cloud Run, aby utworzyć bazę danych test
.
gcloud beta run jobs execute db-job --region $REGION
Przejrzyj logi zadań Cloud Run w konsoli Cloud.
6. Gratulacje!
Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.
Omówione zagadnienia:
- Jak utworzyć klaster i instancję AlloyDB
- Jak utworzyć bazę danych AlloyDB przy użyciu zadania Cloud Run
Czyszczenie danych
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.
Usuwam projekt
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.