1. ภาพรวม
ในแล็บนี้ คุณจะได้ติดตั้งใช้งาน Microservice แบบ 2 ชั้นที่มีพ็อดทำงานบน GKE Autopilot และเชื่อมต่อกับอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB แอปพลิเคชันบริการลูกค้าเป็นส่วนหนึ่งของระบบ Cymbal Eats และมีฟังก์ชันการทำงานในการจัดการผู้ใช้ที่ลงทะเบียน แอปพลิเคชันบริการลูกค้าเป็น Microservice ที่ใช้ Java ซึ่งใช้ เฟรมเวิร์ก Quarkus

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

GKE Autopilot คืออะไร
GKE Autopilot เป็นโหมดการทำงานใน GKE ที่ Google จัดการการกำหนดค่าคลัสเตอร์ ซึ่งรวมถึงโหนด การปรับขนาด ความปลอดภัย และการตั้งค่าอื่นๆ ที่กำหนดค่าไว้ล่วงหน้า คลัสเตอร์ Autopilot ได้รับการปรับให้เหมาะกับการเรียกใช้ภาระงานการใช้งานจริงส่วนใหญ่ และจัดสรรทรัพยากรการประมวลผลตามไฟล์ Manifest ของ Kubernetes การกำหนดค่าที่ปรับปรุงแล้วเป็นไปตามแนวทางปฏิบัติแนะนำและคำแนะนำของ GKE สำหรับการตั้งค่าคลัสเตอร์และภาระงาน ความสามารถในการปรับขนาด และความปลอดภัย หากต้องการดูรายการการตั้งค่าในตัว โปรดดูตารางเปรียบเทียบ Autopilot กับ Standard
AlloyDB คืออะไร
บริการฐานข้อมูลที่เข้ากันได้กับ PostgreSQL ที่มีการจัดการครบวงจรสำหรับภาระงานฐานข้อมูลระดับองค์กรที่มีความต้องการสูงสุด AlloyDB ผสานรวมสิ่งที่ดีที่สุดของ Google เข้ากับเครื่องมือฐานข้อมูลโอเพนซอร์สที่ได้รับความนิยมมากที่สุดอย่าง PostgreSQL เพื่อประสิทธิภาพ ขนาด และความพร้อมใช้งานที่เหนือกว่า
สิ่งที่คุณจะได้เรียนรู้
ในแล็บนี้ คุณจะได้เรียนรู้วิธีการต่อไปนี้
- สร้างอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB
- ติดตั้งใช้งานแอปพลิเคชันในคลัสเตอร์ GKE Autopilot ที่เชื่อมต่อกับอินสแตนซ์ AlloyDB
ข้อกำหนดเบื้องต้น
- แล็บนี้ถือว่าคุณคุ้นเคยกับสภาพแวดล้อม Cloud Console และ Cloud Shell
- ประสบการณ์การใช้งาน GKE และ AlloyDB มาก่อนอาจเป็นประโยชน์ แต่ไม่จำเป็น
2. การตั้งค่าและข้อกำหนด
การตั้งค่าโปรเจ็กต์ Cloud
- ลงชื่อเข้าใช้ คอนโซล Google Cloud และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้อง สร้างบัญชี



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

โคลนที่เก็บและไปที่ไดเรกทอรี คัดลอกและวางคำสั่งด้านล่างลงในเทอร์มินัล แล้วกด Enter
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
ติดตั้งใช้งานทรัพยากร Dependency ที่จำเป็นโดยเรียกใช้ gke-lab-setup.sh
ระบบจะสร้างทรัพยากรต่อไปนี้
- คลัสเตอร์และอินสแตนซ์ AlloyDB
- Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์สำหรับ Cloud Run Job และบริการลูกค้า
- เครื่องมือเชื่อมต่อ VPC Access สำหรับ Cloud Run Job เพื่อสื่อสารกับฐานข้อมูล AlloyDB
- Cloud Run Job เพื่อสร้างฐานข้อมูล AlloyDB
- คลัสเตอร์ GKE Autopilot
./gke-lab-setup.sh
หากระบบแจ้งให้ให้สิทธิ์ ให้คลิก "ให้สิทธิ์" เพื่อดำเนินการต่อ

การตั้งค่าจะใช้เวลาประมาณ 10 นาที ตรวจสอบสคริปต์การตั้งค่าที่ใช้สร้างทรัพยากร Dependency ที่จำเป็น
gke-lab-setup.sh
รอจนกว่าสคริปต์จะเสร็จสมบูรณ์และคุณเห็นเอาต์พุตด้านล่างก่อนที่จะทำตามขั้นตอนถัดไป
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. การติดตั้งใช้งานแอปพลิเคชัน
ตรวจสอบคลัสเตอร์ AlloyDB
เรียกใช้คำสั่งด้านล่างเพื่อตรวจสอบอินสแตนซ์ AlloyDB ที่สร้างขึ้น
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
เอาต์พุตตัวอย่าง
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
สำรวจฟีเจอร์ที่มี(Query Insight, การตรวจสอบ) ใน คอนโซล

ตรวจสอบคลัสเตอร์ GKE Autopilot
ตั้งค่าตัวแปรสภาพแวดล้อมของโปรเจ็กต์
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)')
คลัสเตอร์ถูกสร้างขึ้นโดยใช้คำสั่งด้านล่างซึ่งเป็นส่วนหนึ่งของการตั้งค่าเริ่มต้น (คุณไม่จำเป็นต้องเรียกใช้คำสั่งนี้)
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
เรียกใช้คำสั่งเพื่อดูคลัสเตอร์ GKE Autopilot ที่สร้างขึ้น
gcloud container clusters list
เอาต์พุตตัวอย่าง

เรียกใช้คำสั่งเพื่อจัดเก็บข้อมูลเข้าสู่ระบบสำหรับคลัสเตอร์
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
ติดตั้งใช้งานแอปพลิเคชัน
จากนั้นคุณจะติดตั้งใช้งานแอปพลิเคชันบริการลูกค้า
แอปพลิเคชันบริการลูกค้าเป็น Microservice ที่ใช้ Java ซึ่งใช้เฟรมเวิร์ก Quarkus
ไปที่โฟลเดอร์ cymbal-eats/customer-service แล้วเรียกใช้คำสั่งเพื่อสร้างและอัปโหลดอิมเมจคอนเทนเนอร์
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
เปิด Cloud Build ในคอนโซลเพื่อดูรายละเอียดของการสร้างล่าสุด

ตั้งค่าตัวแปรสภาพแวดล้อมด้านล่างโดยใช้ค่าที่อยู่ IP ส่วนตัวของ AlloyDB
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
เรียกใช้คำสั่งด้านล่างเพื่อสร้างออบเจ็กต์ Secret ของ Kubernetes เพื่อจัดเก็บข้อมูลเข้าสู่ระบบฐานข้อมูลที่แอปพลิเคชันบริการลูกค้าจะใช้เพื่อเชื่อมต่อกับฐานข้อมูล
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
เรียกใช้คำสั่งเพื่อแทนที่ CUSTOMER_SERVICE_IMAGE ในไฟล์ deployment.yaml
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
เรียกใช้คำสั่งเพื่อติดตั้งใช้งานแอปพลิเคชัน
kubectl apply -f customer-service-deployment.yaml
แอปพลิเคชันจะใช้เวลาสักครู่ในการเปลี่ยนไปเป็นสถานะ RUNNING
เรียกใช้คำสั่งเพื่อสร้าง IP ภายนอกที่จะใช้ในขั้นตอนการทดสอบ
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
เรียกใช้คำสั่งเพื่อยืนยันทรัพยากรที่สร้างขึ้น
kubectl get all
เอาต์พุตตัวอย่าง

4. ทดสอบแอปพลิเคชัน
เรียกใช้คำสั่งด้านล่างเพื่อบันทึก URL ของบริการลูกค้า
kubectl get svc
ตั้งค่าตัวแปรสภาพแวดล้อมด้านล่างโดยใช้ค่า IP ภายนอกจากเอาต์พุตก่อนหน้า
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
เรียกใช้คำสั่งด้านล่างเพื่อสร้างระเบียนลูกค้าใหม่
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
เรียกใช้คำสั่งด้านบนหลายๆ ครั้งเพื่อสร้างข้อความบันทึกที่คุณจะดูใน Logs Explorer ในภายหลัง
ตรวจสอบระเบียนลูกค้า
เรียกใช้คำสั่งด้านล่างเพื่อดูระเบียนลูกค้าที่สร้างขึ้น
curl $CUSTOMER_SERVICE_URL/customer | jq
เอาต์พุตตัวอย่าง
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-06T16:13:19.118744",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 3,
"state": "CA",
"updateDateTime": "2023-01-06T16:13:19.118896",
"zip": "94043"
}
]
ตรวจสอบภาระงานและบริการของ GKE
เปิด Kubernetes Engine ใน Cloud Console แล้วตรวจสอบภาระงานและบริการที่สร้างขึ้น


บันทึกของแอปพลิเคชัน
เปิด Logs Explorer แล้วค้นหาบันทึกที่มีข้อความ "Customer already exists"

5. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab นี้เสร็จแล้ว
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีสร้างอินสแตนซ์ส่วนตัวของฐานข้อมูล AlloyDB
- วิธีติดตั้งใช้งานแอปพลิเคชันในคลัสเตอร์ GKE Autopilot ที่เชื่อมต่อกับอินสแตนซ์ AlloyDB
ขั้นตอนต่อไปที่ทำได้
สำรวจ Codelab อื่นๆ ของ Cymbal Eats
- การทริกเกอร์ Cloud Workflows ด้วย Eventarc
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- รักษาความปลอดภัยให้กับแอปพลิเคชันแบบ Serverless ด้วย Identity Aware Proxy (IAP)
- การทริกเกอร์ Cloud Run Jobs ด้วย Cloud Scheduler
- การติดตั้งใช้งานกับ Cloud Run อย่างปลอดภัย
- การรักษาความปลอดภัยให้กับการเข้าชมขาเข้าของ Cloud Run
ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ ให้ลบโปรเจ็กต์ที่มีทรัพยากร หรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ