1. Wprowadzenie
Przegląd
Jeśli Twój projekt GCP znajduje się w granicach Ustawień usługi VPC, musisz wykonać dodatkowe czynności, aby skonfigurować zaplanowane zadania. Cloud Scheduler nie może bezpośrednio wywoływać zadań w obrębie granic VPC SC, więc musisz przekierować żądanie przez inny komponent. Zalecamy użycie usługi Cloud Run jako tego serwera proxy.
Architektura wygląda tak:

Czego się nauczysz
- Jak uruchomić zadanie Cloud Run zgodnie z harmonogramem w obszarze VPC SC
- Jak utworzyć usługę Cloud Run, która wywołuje zadanie Cloud Run za pomocą bibliotek klienta Cloud Run
- Jak skonfigurować Cloud Scheduler do wywoływania usługi Cloud Run zgodnie z harmonogramem
2. Zanim zaczniesz
Najpierw upewnij się, że wykonano czynności konfigurowania Cloud Run na potrzeby Ustawień usługi VPC.
Następnie ustaw zmienne środowiskowe, które będą używane w dalszej części tych ćwiczeń z programowania.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION> AR_REPO=sample-job-repo CLOUD_RUN_SERVICE=job-runner-service CLOUD_RUN_JOB=sample-job CLOUD_SCHEDULER=job-scheduler SERVICE_ACCOUNT="cloud-run-invoker-sa" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com NETWORK=default SUBNET=default
3. Tworzenie zadania Cloud Run
W tym ćwiczeniu używamy przykładowego kontenera zadań Cloud Run.
Najpierw utwórz repozytorium Artifact Registry dla kontenera zadania Cloud Run.
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
Następnie skopiuj przykładowy kontener zadań Cloud Run do Artifact Registry w projekcie skonfigurowanym pod kątem VPC SC. Możesz to zrobić za pomocą narzędzia gcrane, postępując zgodnie z tymi instrukcjami instalacji. Więcej informacji o gcrane znajdziesz w dokumentacji dotyczącej kopiowania obrazów między repozytoriami.
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
Po drugie, wdróż zadanie Cloud Run zgodne z ustawieniami usługi VPC.
gcloud run jobs create $CLOUD_RUN_JOB --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic
Więcej informacji o tworzeniu zadań znajdziesz w dokumentacji zadań Cloud Run.
4. Tworzenie konta usługi
To konto usługi będzie używane przez Cloud Run do wywoływania zadania Cloud Run.
Najpierw utwórz konto usługi, uruchamiając to polecenie:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
Po drugie, przypisz do konta usługi rolę wywołującego Cloud Run i rolę wyświetlającego Cloud Run.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.viewer
5. Tworzenie usługi Cloud Run
W tym kroku wdrożysz usługę Cloud Run, która będzie pełnić rolę serwera proxy.
mkdir job-runner-service && cd $_
Utwórz plik o nazwie main.py z tym kodem.
import os
from flask import Flask
app = Flask(__name__)
# pip install google-cloud-run
from google.cloud import run_v2
@app.route('/')
def hello():
client = run_v2.JobsClient()
# UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID
job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME'
print("Triggering job...")
request = run_v2.RunJobRequest(name=job_name)
operation = client.run_job(request=request)
response = operation.result()
print(response)
return "Done!"
if __name__ == '__main__':
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Utwórz plik o nazwie requirements.txt z tym kodem.
google-cloud-run flask
Na koniec utwórz Dockerfile.
FROM python:3.9-slim-buster # for logging purposes ENV PYTHONUNBUFFERED=True WORKDIR /app COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python3", "main.py"]
Następnie utwórz kontener za pomocą tych poleceń Dockera. Pamiętaj, że wdrożenia oparte na źródle mogą być trudne do skonfigurowania w środowisku VPC SC. Jeśli masz już potok kompilacji i wdrażania, użyj go do skompilowania kodu źródłowego w kontenerze i wdrożenia kontenera jako usługi Cloud Run.
docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE
Teraz wdróż usługę Cloud Run zgodną z Ustawieniami usługi VPC.
gcloud run deploy $CLOUD_RUN_SERVICE --region $REGION \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --network=$NETWORK \ --subnet=$SUBNET \ --vpc-egress=all-traffic \ --no-allow-unauthenticated \ --ingress internal
Zapisz adres URL punktu końcowego usługi, uruchamiając to polecenie:
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. Utwórz zadanie Cloud Scheduler, aby wywołać usługę
# create the Cloud Scheduler job gcloud scheduler jobs create http $CLOUD_SCHEDULER \ --location=$REGION \ --schedule="0 0 1 * *" \ --uri=$SERVICE_URL \ --http-method=GET \ --oidc-service-account-email=$SERVICE_ACCOUNT_ADDRESS
Po utworzeniu zadania Cloud Scheduler możesz uruchomić to polecenie, aby natychmiast uruchomić zadanie Cloud Scheduler w celach testowych:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
UWAGA:
Wykonanie zadania może potrwać kilka minut. Stan możesz śledzić na stronie Cloud Run Scheduler.
Sprawdź, czy zadanie Cloud Run zostało wykonane, uruchamiając te polecenia:
EXECUTION_NAME=$(gcloud run jobs describe $CLOUD_RUN_JOB --region $REGION --format 'value(status.latestCreatedExecution.name)') gcloud run jobs executions describe $EXECUTION_NAME --region $REGION
Powinien pojawić się ekran podobny do tego:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. Gratulacje!
Gratulujemy ukończenia ćwiczenia!
Omówione zagadnienia
- Jak uruchomić zadanie Cloud Run zgodnie z harmonogramem w obszarze VPC SC
- Jak utworzyć usługę Cloud Run, która wywołuje zadanie Cloud Run za pomocą bibliotek klienta Cloud Run
- Jak skonfigurować Cloud Scheduler do wywoływania usługi Cloud Run zgodnie z harmonogramem
8. Czyszczenie danych
Aby uniknąć przypadkowych opłat (np. jeśli usługi Cloud Run zostaną przypadkowo wywołane więcej razy niż miesięczny limit wywołań Cloud Run w warstwie bezpłatnej), możesz usunąć usługi GCP lub projekt utworzony w kroku 2.
Aby usunąć usługę Cloud Run i zadanie Cloud Run, otwórz Cloud Run w Cloud Console na stronie https://console.cloud.google.com/run i usuń usługę.
Jeśli zdecydujesz się usunąć cały projekt, otwórz stronę https://console.cloud.google.com/cloud-resource-manager, wybierz projekt utworzony w kroku 2 i kliknij Usuń. Jeśli usuniesz projekt, musisz zmienić projekty w Cloud SDK. Listę wszystkich dostępnych projektów możesz wyświetlić, uruchamiając polecenie gcloud projects list.