กำลังสร้างฐานข้อมูล AlloyDB ด้วย Cloud Run Job

1. ภาพรวม

ใน Lab นี้ คุณจะได้สร้างฐานข้อมูล AlloyDB ด้วย Cloud Run Job คุณจะกำหนดค่าการเข้าถึงบริการส่วนตัวและการเข้าถึง VPC แบบ Serverless เพื่อเปิดใช้การเชื่อมต่อระหว่างงาน Cloud Run กับฐานข้อมูล AlloyDB โดยใช้ IP ส่วนตัว

สิ่งที่คุณจะได้เรียนรู้

ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำสิ่งต่อไปนี้

  • ตั้งค่าคลัสเตอร์และอินสแตนซ์ AlloyDB
  • ติดตั้งใช้งาน Cloud Run Job เพื่อสร้างฐานข้อมูล AlloyDB

2. การตั้งค่าและข้อกำหนด

การตั้งค่าโปรเจ็กต์ Cloud

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

การตั้งค่าสภาพแวดล้อม

เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา

eb0157a992f16fa3.png

หากต้องการเปิดใช้ API ของบริการ ให้คัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัล แล้วกด 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

ตั้งค่าตัวแปรสภาพแวดล้อม

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. ตั้งค่าและสร้างคลัสเตอร์ AlloyDB

ตั้งค่าสิทธิ์ที่จำเป็นสำหรับการตั้งค่า ซึ่งจะช่วยให้ Cloud Run Job เชื่อมต่อกับฐานข้อมูล AlloyDB ได้

gcloud projects add-iam-policy-binding $PROJECT_NAME \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/alloydb.client"

กำหนดค่าการเข้าถึงบริการส่วนตัว

ระบบจะใช้การเข้าถึงบริการส่วนตัวเป็นการเชื่อมต่อการเพียร์ VPC ระหว่างเครือข่าย VPC ของคุณกับเครือข่าย VPC ของ Google Cloud ที่อยู่เบื้องหลังซึ่งมีทรัพยากร AlloyDB (คลัสเตอร์และอินสแตนซ์) อยู่ การเชื่อมต่อส่วนตัวช่วยให้ทรัพยากรในเครือข่าย VPC สื่อสารกับทรัพยากร AlloyDB ที่เข้าถึงได้โดยใช้ที่อยู่ IP ภายในเท่านั้น ทรัพยากรในเครือข่าย VPC ไม่จำเป็นต้องมีสิทธิ์เข้าถึงอินเทอร์เน็ตหรือที่อยู่ IP ภายนอกเพื่อเข้าถึงทรัพยากร AlloyDB

หากต้องการสร้างการกำหนดค่าการเข้าถึงบริการส่วนตัวในเครือข่าย VPC ที่อยู่ในโปรเจ็กต์ที่อยู่ในระบบคลาวด์เดียวกันกับ AlloyDB คุณต้องดำเนินการ 2 อย่างต่อไปนี้

สร้างช่วงที่อยู่ IP ที่จัดสรรในเครือข่าย VPC

gcloud compute addresses create google-managed-services-default \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=20 \
    --network=projects/$PROJECT_ID/global/networks/default

สร้างการเชื่อมต่อส่วนตัวระหว่างเครือข่าย VPC กับเครือข่าย Google Cloud VPC ที่อยู่เบื้องหลัง ขั้นตอนนี้ใช้เวลาประมาณ 2 นาที

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-default \
    --network=default \
    --project=$PROJECT_ID

สร้างคลัสเตอร์ 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

สร้างอินสแตนซ์ AlloyDB ขั้นตอนนี้ใช้เวลาประมาณ 10 นาที

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

ตรวจสอบคลัสเตอร์ที่สร้างขึ้นใน Cloud Console

568d273c0e0d6408.png

บันทึกที่อยู่ IP ของฐานข้อมูลลงในตัวแปร""

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. สำรวจโค้ดของงานใน Cloud Run

การสร้างฐานข้อมูล AlloyDB ทำได้หลายวิธี วิธีหนึ่งคือการสร้าง VM ของ Compute Engine ติดตั้งไคลเอ็นต์ psql แล้วเชื่อมต่อกับอินสแตนซ์เพื่อสร้างฐานข้อมูล อ่านเพิ่มเติมเกี่ยวกับแนวทางนี้ได้ที่นี่

ใน Lab นี้ คุณจะได้สร้างฐานข้อมูล AlloyDB ใหม่โดยใช้ Cloud Run Job

ตรวจสอบไฟล์ด้านล่าง

  • Dockerfile - ติดตั้งทรัพยากร Dependency ที่จำเป็น(postgresql-client)
  • script.sh - ใช้ยูทิลิตีบรรทัดคำสั่งเพื่อสร้างฐานข้อมูล

สร้างโฟลเดอร์ใหม่ใน Cloud Shell โดยทำดังนี้

mkdir ~/alloy-db-cloud-run-job
cd ~/alloy-db-cloud-run-job 

สร้างไฟล์ใหม่ 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

สร้างไฟล์ใหม่ script.sh ที่มีเนื้อหาด้านล่าง

echo "Connecting to $DB_HOST"
createdb -h $DB_HOST -p 5432 $PGDB
echo "Created $PGDB database"

psql -h $DB_HOST -l

เปลี่ยนสิทธิ์ใน script.sh ดังนี้

chmod +x script.sh

5. ติดตั้งใช้งานงานใน Cloud Run

กำหนดค่าการเข้าถึง VPC แบบ Serverless ซึ่งจะช่วยให้ Cloud Run Job สื่อสารกับคลัสเตอร์ AlloyDB โดยใช้ IP ภายใน/ส่วนตัวได้ ขั้นตอนนี้ใช้เวลาประมาณ 2 นาที

gcloud compute networks vpc-access connectors create ${VPC_CONNECTOR} \
    --region=${REGION} \
    --range=10.8.0.0/28

สร้างที่เก็บ Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์

gcloud artifacts repositories create db-job-repository \
  --repository-format=docker \
  --location=$REGION

สร้างและเผยแพร่อิมเมจคอนเทนเนอร์ไปยัง Artifact Registry

gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/db-job-repository/db-job:latest

ทำให้งานใน 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

ตรวจสอบฟีเจอร์ที่ใช้สร้างงาน

--vpc-connector - งาน Cloud Run จะใช้เครื่องมือเชื่อมต่อ VPC เพื่อเข้าถึงที่อยู่ IP ส่วนตัวของ AlloyDB

ตรวจสอบงานที่สร้างขึ้นใน Cloud Console

93d8224eca8c687f.png

เรียกใช้ Cloud Run Job เพื่อสร้างฐานข้อมูล test

gcloud beta run jobs execute db-job --region $REGION

ตรวจสอบบันทึกของ Cloud Run Job ใน Cloud Console

3f2269736b53f44c.png

6. ยินดีด้วย

ยินดีด้วย คุณทำ Codelab เสร็จแล้ว

สิ่งที่เราได้พูดถึงไปแล้ว

  • วิธีสร้างคลัสเตอร์และอินสแตนซ์ AlloyDB
  • วิธีสร้างฐานข้อมูล AlloyDB โดยใช้ Cloud Run Job

ล้างข้อมูล

โปรดลบโปรเจ็กต์ที่มีทรัพยากรหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้

การลบโปรเจ็กต์

วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ