1. บทนำ
ภาพรวม
หากโปรเจ็กต์ GCP อยู่ภายในขอบเขต SC ของ VPC คุณจะต้องทําตามขั้นตอนเพิ่มเติมเพื่อตั้งค่างานที่ตั้งเวลาไว้ เนื่องจาก Cloud Scheduler ทริกเกอร์งานภายในขอบเขต VPC SC โดยตรงไม่ได้ คุณจึงต้องส่งคำขอผ่านพร็อกซีผ่านคอมโพเนนต์อื่น เราขอแนะนำให้ใช้บริการ Cloud Run เป็นพร็อกซีนี้
สถาปัตยกรรมจะมีลักษณะดังนี้
สิ่งที่คุณจะได้เรียนรู้
- วิธีเรียกใช้งาน Cloud Run ตามกำหนดการภายในขอบเขต VPC SC
- วิธีสร้างบริการ Cloud Run ที่ทริกเกอร์งาน Cloud Run โดยใช้ไลบรารีไคลเอ็นต์ Cloud Run
- วิธีกำหนดค่า Cloud Scheduler ให้เรียกใช้บริการ Cloud Run ตามกำหนดการ
2. ก่อนเริ่มต้น
ก่อนอื่น โปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนในการตั้งค่า Cloud Run สำหรับการควบคุมบริการ VPC แล้ว
ต่อไป ให้ตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ในโค้ดแล็บนี้
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. สร้างงาน Cloud Run
Codelab นี้ใช้คอนเทนเนอร์งาน Cloud Run ตัวอย่าง
ก่อนอื่น ให้สร้างที่เก็บ Artifact Registry สําหรับคอนเทนเนอร์งาน Cloud Run
gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"
จากนั้นคัดลอกคอนเทนเนอร์งาน Cloud Run ตัวอย่างไปยังที่เก็บอาร์ติแฟกต์ภายในโปรเจ็กต์ที่กําหนดค่า SC ของ VPC คุณสามารถใช้เครื่องมือ gcrane ได้โดยทําตามวิธีการติดตั้งเหล่านี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ gcrane ได้ในเอกสารประกอบสำหรับการคัดลอกรูปภาพระหว่างที่เก็บข้อมูล
gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest
ประการที่ 2 ให้ทำให้งาน Cloud Run ของคุณเป็นไปตามข้อกำหนดของการควบคุมบริการ 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างงานได้โดยทำตามขั้นตอนที่ระบุไว้ในเอกสารประกอบเกี่ยวกับงาน Cloud Run
4. สร้างบัญชีบริการ
Cloud Run จะใช้บัญชีบริการนี้เพื่อเรียกใช้งาน Cloud Run
ขั้นแรก ให้สร้างบัญชีบริการโดยเรียกใช้คําสั่งนี้
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
ประการที่ 2 ให้มอบบทบาทผู้เรียกใช้ Cloud Run และบทบาทผู้ดู 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. สร้างบริการ Cloud Run
ในขั้นตอนนี้ คุณจะนำบริการ Cloud Run ไปใช้งานเป็นพร็อกซี
mkdir job-runner-service && cd $_
สร้างไฟล์ชื่อ main.py
ด้วยโค้ดต่อไปนี้
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)))
สร้างไฟล์ชื่อ requirements.txt
ด้วยโค้ดต่อไปนี้
google-cloud-run flask
สุดท้าย ให้สร้าง 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"]
จากนั้นสร้างคอนเทนเนอร์โดยใช้คำสั่ง Docker ต่อไปนี้ โปรดทราบว่าการติดตั้งใช้งานตามแหล่งที่มาอาจตั้งค่าได้ยากในสภาพแวดล้อม VPC SC หากคุณมีพิพลินสายงานสร้างและทำให้ใช้งานได้อยู่แล้ว ให้ใช้เพื่อสร้างซอร์สโค้ดลงในคอนเทนเนอร์และทำให้คอนเทนเนอร์ใช้งานได้เป็นบริการ 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
จากนั้นทำให้บริการ Cloud Run ของคุณเป็นไปตามข้อกำหนดของการควบคุมบริการ 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
บันทึก URL ปลายทางของบริการโดยเรียกใช้คําสั่งนี้
SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')
6. สร้างงาน Cloud Scheduler เพื่อทริกเกอร์บริการ
# 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
เมื่อสร้างงาน Cloud Scheduler แล้ว คุณสามารถเรียกใช้คําสั่งต่อไปนี้เพื่อเรียกใช้งาน Cloud Scheduler ทันทีเพื่อวัตถุประสงค์ในการทดสอบ
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
หมายเหตุ:
คุณอาจต้องรอ 2-3 นาทีเพื่อให้การเรียกใช้งานเสร็จสมบูรณ์ คุณติดตามสถานะได้ในหน้ากำหนดเวลา Cloud Run
ตรวจสอบว่างาน Cloud Run ทำงานสำเร็จโดยเรียกใช้คําสั่งต่อไปนี้
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
และคุณควรเห็นข้อมูลคล้ายกับต่อไปนี้
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. ยินดีด้วย
ยินดีด้วยที่ทํา Codelab จนเสร็จสมบูรณ์
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีเรียกใช้งาน Cloud Run ตามกำหนดการภายในขอบเขต VPC SC
- วิธีสร้างบริการ Cloud Run ที่ทริกเกอร์งาน Cloud Run โดยใช้ไลบรารีไคลเอ็นต์ Cloud Run
- วิธีกำหนดค่า Cloud Scheduler ให้เรียกใช้บริการ Cloud Run ตามกำหนดการ
8. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ (เช่น หากมีการเรียกใช้บริการ Cloud Run โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในรุ่นไม่มีค่าใช้จ่าย) คุณสามารถลบบริการ GCP หรือลบโปรเจ็กต์ที่สร้างไว้ในขั้นตอนที่ 2
หากต้องการลบบริการ Cloud Run และงาน Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบบริการ
หากเลือกลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list