1. บทนำ
ภาพรวม
ฟังก์ชัน Cloud Run ให้คุณระบุการแก้ไขที่ควรรับการรับส่งข้อมูล และระบุเปอร์เซ็นต์การรับส่งข้อมูลที่การแก้ไขได้รับ การแก้ไขช่วยให้คุณย้อนกลับไปยังการแก้ไขก่อนหน้า เปิดตัวการแก้ไขทีละน้อย และแยกการเข้าชมระหว่างการแก้ไขหลายรายการได้
Codelab นี้จะแสดงวิธีใช้การแก้ไขเพื่อจัดการการรับส่งข้อมูลไปยังฟังก์ชัน Cloud Run ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขได้ในเอกสารประกอบ Cloud Run
สิ่งที่คุณจะได้เรียนรู้
- วิธีแยกการรับส่งข้อมูลระหว่างการแก้ไขอย่างน้อย 2 ครั้งสำหรับฟังก์ชัน Cloud Run
- วิธีทยอยเปิดตัวการแก้ไขใหม่
- วิธีเปลี่ยนกลับไปใช้เวอร์ชันก่อนหน้า
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- คุณได้ทำให้ฟังก์ชัน Cloud Run ใช้งานได้ก่อนหน้านี้ เช่น คุณสามารถทำตามวิธีทำให้ฟังก์ชัน Cloud Run ใช้งานได้เพื่อเริ่มต้นใช้งาน
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell
จาก Cloud Console
หากนี่เป็นครั้งแรกที่คุณเริ่มใช้ Cloud Shell คุณจะเห็นหน้าจอกลางที่อธิบายเกี่ยวกับ Cloud Shell หากเห็นหน้าจอกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นการรับรองสิทธิ์และโปรเจ็กต์ที่ตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณ
- เรียกใช้คําสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากไม่เป็นเช่นนั้น ให้ตั้งค่าด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตจากคำสั่ง
Updated property [core/project].
3. การแยกการจราจรของข้อมูล
ตัวอย่างนี้แสดงวิธีสร้างฟังก์ชันที่อ่านตัวแปรสภาพแวดล้อมสีและตอบกลับด้วยชื่อการแก้ไขโดยใช้สีพื้นหลังนั้น
แม้ว่าโค้ดแล็บนี้จะใช้ node.js แต่คุณใช้รันไทม์ใดก็ได้
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณกำหนดตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้ง Codelab ได้
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen
สร้างฟังก์ชัน
ขั้นแรก ให้สร้างไดเรกทอรีสำหรับซอร์สโค้ดและ cd ลงในไดเรกทอรีนั้น
mkdir revisions-gcf-codelab && cd $_
จากนั้นสร้างไฟล์ package.json
ที่มีเนื้อหาต่อไปนี้
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
จากนั้นสร้างไฟล์ต้นฉบับ index.js
ที่มีเนื้อหาต่อไปนี้
const functions = require('@google-cloud/functions-framework'); const BG_COLOR = process.env.BG_COLOR; const K_REVISION = process.env.K_REVISION; functions.http('helloWorld', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end('<html><body style="background-color:' + BG_COLOR + ';"' + '><div><p>' + 'Hello from ' + K_REVISION + ' using color ' + BG_COLOR + '</p></div></body>' + '</html>'); });
หากต้องการทำให้ฟังก์ชัน Cloud Run ใช้งานได้ใน Cloud Run โดยตรง ให้เรียกใช้คําสั่งต่อไปนี้
gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
หากต้องการทําให้การเผยแพร่เป็น Cloud Functions รุ่นที่ 2 ให้ใช้คําสั่งต่อไปนี้
gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime=nodejs20 \ --region=$REGION \ --source=. \ --entry-point=helloWorld \ --trigger-http \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
ในการทดสอบฟังก์ชัน คุณสามารถม้วนปลายทางที่มีอยู่เพื่อดูสีเขียวซีดาร์กใน HTML หรือใช้เบราว์เซอร์เพื่อไปที่ปลายทางโดยตรงเพื่อดูสีพื้นหลัง
SERVICE_URL=$(gcloud run services describe traffic-splitting-gcf --platform managed --region $REGION --format 'value(status.url)') curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
ตอนนี้ให้ปรับใช้การแก้ไขที่ 2 ที่มีสีพื้นหลังแทน
หากต้องการทำให้ฟังก์ชัน Cloud Run ใช้งานได้โดยตรงใน Cloud Run ให้เรียกใช้คำสั่งต่อไปนี้
# update the env var BG_COLOR=tan gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
หากต้องการทําให้การเผยแพร่เป็น Cloud Functions รุ่นที่ 2 ให้ใช้คําสั่งต่อไปนี้
# update the env var BG_COLOR=tan gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
ตอนนี้เมื่อคุณโค้งปลายทาง คุณจะเห็นสีพื้นหลังสีน้ำตาล
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
แยกการเข้าชม 50:50
หากต้องการแบ่งการรับส่งข้อมูลระหว่างการแก้ไขสีเขียวน้ำทะเลและสีเขียวแทน คุณต้องหารหัสการแก้ไขของบริการ Cloud Run ที่เกี่ยวข้อง คุณสามารถดูรหัสการแก้ไขได้โดยเรียกใช้คำสั่งนี้
gcloud run revisions list --service traffic-splitting-gcf \ --region $REGION --format 'value(REVISION)'
คุณควรเห็นผลลัพธ์ที่คล้ายกับด้านล่าง
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
คุณสามารถแยกการเข้าชมระหว่าง 2 ฉบับเป็น 50/50 ได้โดยเรียกใช้คําสั่งต่อไปนี้
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
ทดสอบการแยกการเข้าชม
คุณสามารถทดสอบฟังก์ชันโดยไปที่ URL สาธารณะของฟังก์ชัน (ด้วย curl หรือในเบราว์เซอร์โดยตรง)
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
คุณควรเห็นการแก้ไขสีเขียวเข้มครึ่งหนึ่ง และการแก้ไขสีแทนอีกครึ่งหนึ่ง คุณจะเห็นชื่อการแก้ไขแสดงในเอาต์พุตด้วย เช่น
<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>
4. การทยอยเปิดตัว
ในส่วนนี้ คุณจะได้เรียนรู้วิธีทยอยเปิดตัวการเปลี่ยนแปลงการแก้ไข Cloud Function ใหม่ ดูข้อมูลเพิ่มเติมเกี่ยวกับการทยอยเปิดตัวได้ในเอกสารประกอบ
คุณจะใช้โค้ดเดียวกันกับส่วนก่อนหน้านี้ แต่จะทําให้ใช้งานได้เป็น Cloud Function ใหม่
ก่อนอื่น ให้ตั้งค่าสีพื้นหลังเป็น beige
และติดตั้งใช้งานฟังก์ชันที่มีชื่อ gradual-rollouts-gcf
หากต้องการทำให้ฟังก์ชัน Cloud Run ใช้งานได้ใน Cloud Run โดยตรง ให้เรียกใช้คําสั่งต่อไปนี้
# update the env var BG_COLOR=beige gcloud beta run deploy gradual-rollouts-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
หากต้องการทําให้การเผยแพร่เป็น Cloud Functions รุ่นที่ 2 ให้ใช้คําสั่งต่อไปนี้
# update the env var BG_COLOR=beige # deploy the function gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
คราวนี้สมมติว่าเราต้องการทยอยเปิดตัวการแก้ไขใหม่ด้วยสีพื้นหลังลาเวนเดอร์
ก่อนอื่น มาตั้งค่าการแก้ไขปัจจุบันเป็นสีเบจเพื่อให้ได้การเข้าชม 100% การดำเนินการนี้จะช่วยให้การติดตั้งใช้งาน Cloud Function ในอนาคตไม่ได้รับการรับส่งข้อมูล โดยค่าเริ่มต้น Cloud Functions จะตั้งค่าการรับส่งข้อมูลเป็น 100% ไปยังการแก้ไขด้วยแฟล็ก latest
การระบุด้วยตนเองว่าสีเบจการแก้ไขปัจจุบันนี้ควรรับการเข้าชมทั้งหมด การแก้ไขที่มีแฟล็ก latest
จะไม่ได้รับการเข้าชม 100% อีกต่อไป ดูเอกสารประกอบ
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-gcf \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-gcf --to-revisions=$BEIGE_REVISION=100 --region $REGION
คุณจะเห็นเอาต์พุตที่คล้ายกับ Traffic: 100% gradual-rollouts-gcf2-00001-yox
ตอนนี้คุณสามารถใช้การแก้ไขใหม่ที่จะไม่ได้รับการรับส่งข้อมูลได้แล้ว คุณสามารถอัปเดตตัวแปรสภาพแวดล้อม BG_COLOR สำหรับการแก้ไขนี้แทนการแก้ไขโค้ดใดๆ ได้
หากต้องการทำให้ฟังก์ชัน Cloud Run ใช้งานได้โดยตรงใน Cloud Run ให้เรียกใช้คำสั่งต่อไปนี้
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud beta run deploy gradual-rollouts-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
หากต้องการทําให้การเผยแพร่เป็น Cloud Functions รุ่นที่ 2 ให้ใช้คําสั่งต่อไปนี้
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR \ --tag $BG_COLOR
ตอนนี้ให้อัปเดตตัวแปรสภาพแวดล้อม SERVICE_URL เพื่อใช้ฟังก์ชัน gradual-rollouts-gcf
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
และตอนนี้เมื่อคุณทำให้บริการ
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
คุณจะเห็นสีเบจ แม้ว่าลาเวนเดอร์จะเป็นการแก้ไขครั้งล่าสุดก็ตาม
<html><body style="background-color:beige;"><div><p>Hello from gradual-rollouts-gcf-24jan16-staging-2-00001-kop using color beige</p></div></body></html>
ทดสอบการแก้ไขที่แสดงการเข้าชม 0%
สมมติว่าคุณยืนยันแล้วว่าการแก้ไขใช้งานได้สําเร็จและให้บริการการรับส่งข้อมูล 0% แม้ว่าจะผ่านการตรวจสอบประสิทธิภาพการทำงานแล้ว คุณยังต้องการยืนยันว่าการแก้ไขนี้ใช้สีพื้นหลังสีม่วงลาเวนเดอร์
หากต้องการทดสอบการแก้ไขสีม่วงลาเวนเดอร์ คุณใช้แท็กกับการแก้ไขดังกล่าวได้ การติดแท็กช่วยให้คุณทดสอบการแก้ไขใหม่ใน URL ที่เฉพาะเจาะจงได้โดยตรงโดยไม่ต้องแสดงการเข้าชม
ก่อนอื่น ให้รับ URL รูปภาพสำหรับการแก้ไขนั้น
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')
และตอนนี้แท็กรูปภาพนั้นด้วยสีที่เกี่ยวข้อง
gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
คุณจะเห็นผลลัพธ์ที่คล้ายกับข้อความต่อไปนี้
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
ตอนนี้คุณสามารถแก้ไขการแก้ไขนี้ได้โดยตรง
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
และดูสีลาเวนเดอร์ในผลลัพธ์
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
การค่อยๆ เพิ่มการเข้าชม
ตอนนี้คุณเริ่มส่งการเข้าชมไปยังการแก้ไขสีม่วงลาเวนเดอร์ได้แล้ว ตัวอย่างด้านล่างแสดงวิธีส่งการเข้าชม 1% ไปยัง lavender
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1
หากต้องการส่งการเข้าชม 50% ไปยัง lavender ให้ใช้คําสั่งเดียวกัน แต่ระบุ 50% แทน
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=50
คุณควรจะเห็นรายการจำนวนการเข้าชมการแก้ไขแต่ละรายการได้รับ
Traffic: 50% gradual-rollouts-gcf-00001-hos 50% gradual-rollouts-gcf-00004-mum lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app
เมื่อพร้อมที่จะเปิดตัวสีลาเวนเดอร์อย่างเต็มรูปแบบแล้ว ให้ตั้งค่าสีลาเวนเดอร์เป็น 100% เพื่อแทนที่สีเบจ
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100
และตอนนี้เมื่อคุณเข้าชมหรือเรียกใช้ URL บริการฟังก์ชัน gradual-rollouts-gcf
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
คุณจะเห็นแต่ลาเวนเดอร์เท่านั้น
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
5. ย้อนกลับ
สมมติว่าเราได้รับความคิดเห็นเกี่ยวกับ UX ในช่วงแรกๆ แสดงให้เห็นว่าลูกค้าชอบสีเบจมากกว่าลาเวนเดอร์ และคุณต้องเปลี่ยนกลับไปใช้สีเบจ
คุณย้อนกลับไปยังการแก้ไขก่อนหน้า (สีเบจ) ได้โดยเรียกใช้คำสั่งนี้
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
และตอนนี้เมื่อคุณเรียกใช้ curl หรือไปที่ปลายทาง URL ของฟังก์ชัน
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
คุณจะเห็นการส่งคืนสีเบจ
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้อนกลับได้ในเอกสาร
6. ยินดีด้วย
ยินดีด้วยที่ทํา Codelab จนเสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารเกี่ยวกับการเปิดตัว การย้อนกลับ และการย้ายข้อมูลการรับส่งข้อมูล
หัวข้อที่ครอบคลุม
- วิธีแยกการรับส่งข้อมูลระหว่างการแก้ไขอย่างน้อย 2 รายการสำหรับฟังก์ชัน Cloud Run
- วิธีทยอยเปิดตัวการแก้ไขใหม่
- วิธีย้อนกลับไปยังการแก้ไขก่อนหน้า
7. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ (เช่น หากมีการเรียกใช้ฟังก์ชัน Cloud Run นี้โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Function รายเดือนในแพ็กเกจฟรี) คุณสามารถลบฟังก์ชัน Cloud Run หรือลบโปรเจ็กต์ที่สร้างไว้ในขั้นตอนที่ 2
หากต้องการลบฟังก์ชัน Cloud Run ที่ทําให้ใช้งานได้กับ Cloud Run ให้ไปที่ Cloud Run ใน Cloud Console ที่ https://console.cloud.google.com/functions/ แล้วลบฟังก์ชันที่คุณสร้างในโค้ดแล็บนี้
หากต้องการลบฟังก์ชัน Cloud Run ที่ทําให้ใช้งานได้เป็นฟังก์ชันรุ่นที่ 2 ให้ไปที่ Cloud Functions ใน Cloud Console ที่ https://console.cloud.google.com/functions/ แล้วลบฟังก์ชันที่คุณสร้างในโค้ดแล็บนี้
หากเลือกลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list