การใช้การแก้ไขในฟังก์ชัน Cloud Run สำหรับการแยกการรับส่งข้อมูล การทยอยเปิดตัว และการย้อนกลับ

1. บทนำ

ภาพรวม

ฟังก์ชัน Cloud Run ให้คุณระบุการแก้ไขที่ควรรับการรับส่งข้อมูล และระบุเปอร์เซ็นต์การรับส่งข้อมูลที่การแก้ไขได้รับ การแก้ไขช่วยให้คุณย้อนกลับไปยังการแก้ไขก่อนหน้า เปิดตัวการแก้ไขทีละน้อย และแยกการเข้าชมระหว่างการแก้ไขหลายรายการได้

Codelab นี้จะแสดงวิธีใช้การแก้ไขเพื่อจัดการการรับส่งข้อมูลไปยังฟังก์ชัน Cloud Run ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขได้ในเอกสารประกอบ Cloud Run

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

  • วิธีแยกการรับส่งข้อมูลระหว่างการแก้ไขอย่างน้อย 2 ครั้งสำหรับฟังก์ชัน Cloud Run
  • วิธีทยอยเปิดตัวการแก้ไขใหม่
  • วิธีเปลี่ยนกลับไปใช้เวอร์ชันก่อนหน้า

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

ข้อกำหนดเบื้องต้น

  • คุณเข้าสู่ระบบ Cloud Console แล้ว
  • คุณได้ทำให้ฟังก์ชัน Cloud Run ใช้งานได้ก่อนหน้านี้ เช่น คุณสามารถทำตามวิธีทำให้ฟังก์ชัน Cloud Run ใช้งานได้เพื่อเริ่มต้นใช้งาน

เปิดใช้งาน Cloud Shell

  1. คลิกเปิดใช้งาน Cloud Shell d1264ca30785e435.png จาก Cloud Console

cb81e7c8e34bc8d.png

หากนี่เป็นครั้งแรกที่คุณเริ่มใช้ Cloud Shell คุณจะเห็นหน้าจอกลางที่อธิบายเกี่ยวกับ Cloud Shell หากเห็นหน้าจอกลาง ให้คลิกต่อไป

d95252b003979716.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที

7833d5e1c5d18f54.png

เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นการรับรองสิทธิ์และโปรเจ็กต์ที่ตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณ

  1. เรียกใช้คําสั่งต่อไปนี้ใน 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`
  1. เรียกใช้คำสั่งต่อไปนี้ใน 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