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

1. บทนำ

ภาพรวม

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

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

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

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

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

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

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

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

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

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

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

เมื่อเชื่อมต่อกับ 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. การแยกการจราจรของข้อมูล

ตัวอย่างนี้แสดงวิธีสร้างฟังก์ชันที่อ่านตัวแปรสภาพแวดล้อมสีและตอบกลับด้วยชื่อการแก้ไขโดยใช้สีพื้นหลังนั้น

แม้ว่า Codelab นี้จะใช้ 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

คุณสามารถแยกการรับส่งข้อมูล 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 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 กับบริการ

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% ของการเข้าชมไปยังลาเวนเดอร์ คุณสามารถใช้คำสั่งเดียวกัน แต่ระบุเป็น 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/ และลบฟังก์ชันที่คุณสร้างไว้ใน Codelab นี้

หากเลือกลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 แล้วเลือกลบ หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list