1. บทนำ
ภาพรวม
ฟังก์ชัน Cloud Run ช่วยให้คุณระบุได้ว่าการแก้ไขใดควรได้รับการรับส่งข้อมูล และระบุเปอร์เซ็นต์การรับส่งข้อมูลที่การแก้ไขได้รับ การแก้ไขช่วยให้คุณย้อนกลับไปเป็นการแก้ไขก่อนหน้า ค่อยๆ เปิดตัวการแก้ไข และแยกการเข้าชมระหว่างการแก้ไขหลายรายการได้
Codelab นี้แสดงวิธีใช้การแก้ไขเพื่อจัดการการรับส่งข้อมูลไปยังฟังก์ชัน Cloud Run ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขได้ในเอกสารประกอบ Cloud Run
สิ่งที่คุณจะได้เรียนรู้
- วิธีแยกการรับส่งข้อมูลระหว่างการแก้ไขตั้งแต่ 2 รายการขึ้นไปสำหรับฟังก์ชัน Cloud Run
- วิธีเปิดตัวการแก้ไขใหม่ทีละน้อย
- วิธีย้อนกลับไปใช้การแก้ไขก่อนหน้า
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- คุณได้ติดตั้งใช้งานฟังก์ชัน Cloud Run ไว้ก่อนหน้านี้ เช่น คุณสามารถทำตามขั้นตอนในการทำให้ใช้งานได้ฟังก์ชัน Cloud Run เพื่อเริ่มต้นใช้งาน
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากคุณเริ่มใช้ 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. การแยกการจราจรของข้อมูล
ตัวอย่างนี้แสดงวิธีสร้างฟังก์ชันที่อ่านตัวแปรสภาพแวดล้อมสีและตอบกลับด้วยชื่อการแก้ไขโดยใช้สีพื้นหลังนั้น
แม้ว่า Codelab นี้จะใช้ node.js แต่คุณก็ใช้รันไทม์ใดก็ได้
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้งโค้ดแล็บนี้ได้
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
หากต้องการทดสอบฟังก์ชัน คุณสามารถใช้ curl กับปลายทางที่มีอยู่เพื่อดูสี darkseagreen ใน 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 กับปลายทาง คุณจะเห็นสีพื้นหลังเป็นสีแทน
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
คุณแยกการรับส่งข้อมูล 50/50 ระหว่างการแก้ไข 2 รายการได้โดยเรียกใช้คำสั่งต่อไปนี้
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 Functions ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดตัวแบบค่อยเป็นค่อยไปได้ในเอกสารประกอบ
คุณจะใช้โค้ดเดียวกันกับส่วนก่อนหน้า แต่จะทำให้ใช้งานได้เป็น 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 Functions ในอนาคตจะไม่ได้รับการรับส่งข้อมูลใดๆ โดยค่าเริ่มต้น 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 กับบริการ
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 กับการแก้ไขนี้ได้โดยตรง
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% ไปยังลาเวนเดอร์
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1
หากต้องการส่งการรับส่งข้อมูล 50% ไปยังลาเวนเดอร์ คุณสามารถใช้คำสั่งเดียวกัน แต่ระบุ 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
และตอนนี้เมื่อคุณเข้าชมหรือใช้ cURL กับ 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/ แล้วลบฟังก์ชันที่คุณสร้างใน Codelab นี้
หากต้องการลบฟังก์ชัน Cloud Run ที่ทำให้ใช้งานได้เป็นฟังก์ชันรุ่นที่ 2 ให้ไปที่ Cloud Functions ใน Cloud Console ที่ https://console.cloud.google.com/functions/ แล้วลบฟังก์ชันที่คุณสร้างใน Codelab นี้
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list