ทำให้เว็บไซต์ใช้งานได้ด้วย Cloud Run

1. ก่อนเริ่มต้น

การเรียกใช้เว็บไซต์อาจเป็นเรื่องยากเนื่องจากต้องเสียเวลาไปกับการสร้างและจัดการอินสแตนซ์ของเครื่องเสมือน (VM), คลัสเตอร์, พ็อด, บริการ และอื่นๆ ซึ่งถือว่าเป็นเรื่องดีสำหรับแอปที่มีขนาดใหญ่แบบหลายระดับ แต่หากคุณพยายามทำให้เว็บไซต์ใช้งานได้และมองเห็นได้ ก็คงมีค่าใช้จ่ายสูง

เมื่อใช้ Cloud Run ซึ่งเป็นการนำ Knative มาใช้บน Google Cloud คุณสามารถจัดการและทำให้เว็บไซต์ใช้งานได้โดยไม่ต้องมีค่าใช้จ่ายใดๆ ที่จำเป็นสำหรับการติดตั้งใช้งานบน VM หรือ Kubernetes วิธีนี้ไม่เพียงแต่เป็นวิธีการที่ง่ายขึ้นจากมุมมองด้านการจัดการ แต่ยังทำให้คุณสามารถปรับขนาดให้เป็น 0 เมื่อไม่มีคำขอเข้ามายังเว็บไซต์ของคุณได้อีกด้วย

Cloud Run ไม่เพียงนำการพัฒนาแบบ Serverless ไปยังคอนเทนเนอร์เท่านั้น แต่ยังเรียกใช้ในคลัสเตอร์ Google Kubernetes Engine (GKE) ของคุณเองหรือบนแพลตฟอร์มที่มีการจัดการครบวงจรในฐานะโซลูชันบริการ (PaaS) ที่ Cloud Run ให้บริการได้อีกด้วย คุณจะได้ทดสอบสถานการณ์หลังใน Codelab นี้

แผนภาพต่อไปนี้แสดงขั้นตอนการทำให้ใช้งานได้และการโฮสต์ Cloud Run คุณเริ่มต้นด้วยอิมเมจ Docker ที่สร้างผ่าน Cloud Build ซึ่งคุณทริกเกอร์ใน Cloud Shell จากนั้นจึงทำให้อิมเมจดังกล่าวใช้งานได้ใน Cloud Run ด้วยคำสั่งใน Cloud Shell

db5f05c090d5ebcb.png

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

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

  • วิธีสร้างอิมเมจ Docker ด้วย Cloud Build และอัปโหลดไปยัง gcr.io
  • วิธีทำให้อิมเมจ Docker ใช้งานได้ใน Cloud Run
  • วิธีจัดการการทำให้ Cloud Run ใช้งานได้
  • วิธีตั้งค่าปลายทางสำหรับแอปบน Cloud Run

สิ่งที่คุณจะสร้าง

  • เว็บไซต์แบบคงที่ที่ทำงานภายในคอนเทนเนอร์ Docker
  • เวอร์ชันของคอนเทนเนอร์นี้ที่อยู่ใน Container Registry
  • การทำให้ Cloud Run ใช้งานได้สำหรับเว็บไซต์แบบคงที่ของคุณ

สิ่งที่คุณต้องมี

  • บัญชี Google ที่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบเพื่อสร้างโปรเจ็กต์หรือโปรเจ็กต์ที่มีบทบาทเจ้าของโปรเจ็กต์

2. การตั้งค่าสภาพแวดล้อม

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

หากยังไม่มีบัญชี Google คุณจะต้องสร้างบัญชี จากนั้นลงชื่อเข้าใช้คอนโซล Google Cloud แล้วคลิกโปรเจ็กต์ > สร้างโปรเจ็กต์

53dad2cefdae71da.png

faab21976aabeb4c.png

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

ขั้นตอนต่อไป คุณต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากรของ Google Cloud และเปิดใช้ Cloud Run API

เปิดใช้ Cloud Run API

คลิกเมนูนำทาง ⋮ > API และ บริการ > แดชบอร์ด > เปิดใช้ API และบริการ

5dbb2e6e27a55fcf.png

ค้นหา "Cloud Run API" แล้วคลิก Cloud Run API > เปิดใช้

f1fd486174a744cf.png

การใช้งาน Codelab นี้น่าจะมีค่าใช้จ่ายไม่เกิน 2-3 ดอลลาร์ แต่อาจมากกว่านี้หากคุณตัดสินใจใช้ทรัพยากรมากขึ้นหรือปล่อยให้ทำงานต่อไป (โปรดดูล้างข้อมูลในตอนท้าย) ดูข้อมูลเพิ่มเติมได้ที่ราคา

ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์รับช่วงทดลองใช้ฟรี$300

Cloud Shell

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

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

  1. หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (จะใช้เวลาเพียงไม่นานในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม)

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 14-06-2017 เวลา 22.13.43 น.

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

gcloud auth list

เอาต์พุตจากคำสั่ง

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

เอาต์พุตจากคำสั่ง

[core]
project = <PROJECT_ID>

หากโปรเจ็กต์ไม่ได้ตั้งค่าไว้ด้วยเหตุผลบางประการ ให้ใช้คำสั่งต่อไปนี้

gcloud config set project <PROJECT_ID>

กำลังมองหา PROJECT_ID ของคุณอยู่ใช่ไหม ตรวจสอบรหัสที่คุณใช้ในขั้นตอนการตั้งค่าหรือดูในแดชบอร์ด Cloud Console

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell ยังตั้งค่าตัวแปรสภาพแวดล้อมโดยค่าเริ่มต้นด้วย ซึ่งอาจเป็นประโยชน์เมื่อคุณเรียกใช้คำสั่งในอนาคต

echo $GOOGLE_CLOUD_PROJECT

เอาต์พุตจากคำสั่ง

<PROJECT_ID>
  1. สุดท้าย ให้ตั้งค่าโซนและการกำหนดค่าโปรเจ็กต์เริ่มต้น
gcloud config set compute/zone us-central1-f

คุณเลือกโซนต่างๆ ได้หลากหลาย ดูข้อมูลเพิ่มเติมได้ที่ภูมิภาคและ โซน

3. โคลนที่เก็บซอร์ส

เนื่องจากคุณทำให้เว็บไซต์ที่มีอยู่ใช้งานได้ คุณเพียงต้องโคลนซอร์สจากที่เก็บเท่านั้น คุณจึงมุ่งเน้นที่การสร้างอิมเมจ Docker และทำให้ใช้งานได้กับ Cloud Run ได้

เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนที่เก็บไปยังอินสแตนซ์ Cloud Shell แล้วเปลี่ยนเป็นไดเรกทอรีที่เหมาะสม นอกจากนี้ คุณจะได้ติดตั้งทรัพยากร Dependency ของ Node.js เพื่อให้คุณทดสอบแอปก่อนการทำให้ใช้งานได้

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

ซึ่งจะเป็นการโคลนที่เก็บ เปลี่ยนแปลงไดเรกทอรี และติดตั้งทรัพยากร Dependency ที่จำเป็นในการเรียกใช้แอปในเครื่อง สคริปต์อาจใช้เวลา 2-3 นาที

ทำการสอบทานธุรกิจและทดสอบแอป เรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มเว็บเซิร์ฟเวอร์

cd ~/monolith-to-microservices/monolith
npm start

เอาต์พุต:

Monolith listening on port 8080!

คุณดูตัวอย่างแอปได้โดยคลิกตัวอย่างเว็บacc630712255c604.png แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080

5869738f0e9ec386.png

ซึ่งจะเปิดหน้าต่างใหม่ให้คุณดูการทำงานของร้านค้าแฟนซี

9ed25c3f0cbe62fa.png

คุณสามารถปิดหน้าต่างนี้หลังจากดูเว็บไซต์แล้ว หากต้องการหยุดการทำงานของเว็บเซิร์ฟเวอร์ ให้กด CONTROL+C (Command+C บน Macintosh) ในหน้าต่างเทอร์มินัล

4. สร้างคอนเทนเนอร์ Docker ด้วย Cloud Build

เมื่อไฟล์ต้นฉบับของคุณพร้อมใช้งานแล้ว ถึงเวลาที่จะ Dockerize แอปให้ที!

ตามปกติแล้ว คุณจะต้องใช้แนวทาง 2 ขั้นตอน ได้แก่ การสร้างคอนเทนเนอร์ Docker และพุชไปยังรีจิสทรีเพื่อจัดเก็บอิมเมจที่ GKE จะดึงข้อมูล อย่างไรก็ตาม คุณทำให้ชีวิตง่ายขึ้นได้โดยใช้ Cloud Build เพื่อสร้างคอนเทนเนอร์ Docker และนำอิมเมจลงใน Container Registry ด้วยคำสั่งเดียว หากต้องการดูกระบวนการสร้าง Dockerfile ด้วยตนเองและพุช โปรดดูการเริ่มต้นอย่างรวดเร็วสำหรับ Container Registry

Cloud Build จะบีบอัดไฟล์จากไดเรกทอรีและย้ายไฟล์ไปยังที่เก็บข้อมูล Cloud Storage จากนั้นกระบวนการบิลด์จะนำไฟล์ทั้งหมดจากที่เก็บข้อมูลและใช้ Dockerfile ซึ่งมีอยู่ในไดเรกทอรีเดียวกันเพื่อเรียกใช้กระบวนการบิลด์ของ Docker เนื่องจากคุณระบุแฟล็ก --tag ด้วยโฮสต์เป็น gcr.io สำหรับอิมเมจ Docker อิมเมจ Docker ที่ได้จะได้รับการพุชไปยัง Container Registry

ก่อนอื่นคุณต้องตรวจสอบว่าได้เปิดใช้ Cloud Build API แล้ว เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดใช้

gcloud services enable cloudbuild.googleapis.com

หลังจากเปิดใช้ API แล้ว ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเริ่มกระบวนการบิลด์

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

กระบวนการดังกล่าวจะใช้เวลาไม่กี่นาที แต่หลังจากที่ดำเนินการเสร็จสมบูรณ์แล้ว จะมีเอาต์พุตในเทอร์มินัลซึ่งมีลักษณะคล้ายกับด้านล่างนี้

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID                                    CREATE_TIME                DURATION  SOURCE                                                                                  IMAGES                              STATUS
1ae295d9-63cb-482c-959b-bc52e9644d53  2019-08-29T01:56:35+00:00  33S       gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz  gcr.io/<PROJECT_ID>/monolith:1.0.0  SUCCESS

หากต้องการดูประวัติบิลด์หรือดูกระบวนการแบบเรียลไทม์ ให้ไปที่ Cloud Console แล้วคลิกเมนูการนำทาง ⋮ > Cloud Build > ประวัติ จากที่นั่น คุณสามารถดูรายการงานสร้างก่อนหน้าทั้งหมดของคุณ แต่ควรมีเฉพาะรายการที่สร้างขึ้นเท่านั้น

4c753ede203255f6.png

หากคลิกรหัสบิลด์ คุณจะเห็นรายละเอียดทั้งหมดสำหรับบิลด์นั้น รวมถึงเอาต์พุตบันทึก คุณสามารถดูอิมเมจคอนเทนเนอร์ที่สร้างขึ้นโดยคลิกลิงก์ข้างรูปภาพ

6e88ed1643dfe629.png

5. ทำให้คอนเทนเนอร์ใช้งานได้กับ Cloud Run

ตอนนี้คุณสร้างคอนเทนเนอร์เว็บไซต์และส่งไปยัง Container Registry แล้ว ก็ถึงเวลาทำให้ใช้งานได้กับ Cloud Run

การทำให้ใช้งานได้กับ Cloud Run มี 2 วิธีดังนี้

  • Cloud Run (จัดการครบวงจร) คือโมเดล PaaS ที่มีการจัดการวงจรการใช้งานคอนเทนเนอร์ทั้งหมด คุณจะใช้วิธีการดังกล่าวกับ Codelab นี้
  • Cloud Run สำหรับ Anthos เป็น Cloud Run ที่มีชั้นการควบคุมเพิ่มเติมซึ่งช่วยให้คุณนำคลัสเตอร์และพ็อดจาก GKE ได้ ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่า Cloud Run สำหรับ Anthos บน Google Cloud

ตัวอย่างบรรทัดคำสั่งจะอยู่ใน Cloud Shell โดยใช้ตัวแปรสภาพแวดล้อมที่คุณตั้งค่าไว้ก่อนหน้านี้

บรรทัดคำสั่ง

เรียกใช้คำสั่งต่อไปนี้เพื่อทำให้แอปใช้งานได้

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed 

ระบบจะขอให้คุณระบุภูมิภาคที่ต้องการใช้ เลือกภูมิภาคที่ใกล้เคียงที่สุด จากนั้นยอมรับชื่อบริการแนะนำเริ่มต้น (โมโนลิธ)

d52d9419c5166674.png

สำหรับวัตถุประสงค์ในการทดสอบ ให้อนุญาตคำขอที่ไม่ได้ตรวจสอบสิทธิ์ไปยังแอป ป้อน y ที่พรอมต์

3a57b32f133dad61.png

ยืนยันการทำให้ใช้งานได้

หากต้องการยืนยันว่าสร้างการทำให้ใช้งานได้เรียบร้อยแล้ว ให้เรียกใช้คำสั่งต่อไปนี้ อาจใช้เวลาสักครู่เพื่อให้ Pod status เป็นRunning:

gcloud run services list

เลือก [1] Cloud Run (จัดการครบวงจร)

เอาต์พุต:

SERVICE   REGION    URL  LAST DEPLOYED BY          LAST DEPLOYED AT
✔  monolith  us-east1 <your url>  <your email>  2019-09-16T21:07:38.267Z

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

เปิด URL ที่ให้ไว้ในรายการบริการในเว็บเบราว์เซอร์ แล้วคุณจะเห็นเว็บไซต์เดียวกับที่เคยดูตัวอย่างในเครื่อง

6. สร้างการแก้ไขใหม่ที่มีการเกิดขึ้นพร้อมกันต่ำลง

ทำให้แอปใช้งานได้อีกครั้ง แต่คราวนี้ให้ปรับพารามิเตอร์ตัวใดตัวหนึ่ง

โดยค่าเริ่มต้น แอป Cloud Run จะมีค่าการเกิดขึ้นพร้อมกันที่ 80 ซึ่งหมายความว่าอินสแตนซ์คอนเทนเนอร์แต่ละรายการจะแสดงคำขอได้สูงสุด 80 รายการในแต่ละครั้ง นับเป็นจุดแตกต่างอย่างมากจากฟังก์ชันต่างๆ ในฐานะโมเดลบริการ (FaaS) โดยอินสแตนซ์จะจัดการกับคำขอทีละรายการ

ทำให้อิมเมจคอนเทนเนอร์เดียวกันใช้งานได้อีกครั้งด้วยค่าการเกิดขึ้นพร้อมกันเป็น 1 (เพื่อวัตถุประสงค์ในการทดสอบเท่านั้น) และดูว่าจะเกิดอะไรขึ้น

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1

ตอบคำถามที่ตามมาเหมือนที่ทำครั้งแรก เมื่อคําสั่งเสร็จสมบูรณ์แล้ว ให้ตรวจสอบ Cloud Console เพื่อดูผลลัพธ์

จากหน้าแดชบอร์ด Cloud Run ให้คลิกบริการ monolith เพื่อดูรายละเอียด

7d1eed2e4728a4f2.png

คลิกแท็บการแก้ไข คุณควรเห็นว่ามีการสร้างการแก้ไข 2 รายการ คลิก monolith-00002 และตรวจสอบรายละเอียด คุณควรเห็นค่าการเกิดขึ้นพร้อมกันลดลงเหลือ 1

217185c0eccc87dd.png]

4ad481b8bcd0343d.png

แม้ว่าการกำหนดค่าดังกล่าวจะเพียงพอสำหรับการทดสอบ แต่ในสถานการณ์การใช้งานจริงส่วนใหญ่ คุณจะมีคอนเทนเนอร์ที่รองรับคำขอหลายรายการพร้อมกัน

ตอนนี้ให้กู้คืนการเกิดขึ้นพร้อมกันดั้งเดิมโดยไม่ต้องทำให้ใช้งานได้อีกครั้ง คุณสามารถกำหนดค่าการเกิดขึ้นพร้อมกันเป็นค่าเริ่มต้น 80 หรือ 0 ซึ่งจะนำข้อจำกัดการเกิดขึ้นพร้อมกันออกและตั้งเป็นค่าสูงสุดเริ่มต้น (ซึ่งก็คือ 80 ณ เวลาที่เขียนนี้)

เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่ออัปเดตการแก้ไขปัจจุบัน

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80

โปรดสังเกตว่ามีการสร้างการแก้ไขอื่น มีการเปลี่ยนเส้นทางการรับส่งข้อมูล และการเกิดขึ้นพร้อมกันจะกลับมาเป็น 80

7. ทำการเปลี่ยนแปลงในเว็บไซต์

ทีมการตลาดขอให้คุณเปลี่ยนหน้าแรกของเว็บไซต์บริษัท คิดว่าน่าจะให้ข้อมูลมากกว่าเกี่ยวกับสิ่งที่ต้องการขายและให้กับบริษัท ในส่วนนี้ คุณจะเพิ่มข้อความในหน้าแรกเพื่อให้ทีมการตลาดพึงพอใจ

ดูเหมือนว่านักพัฒนาซอฟต์แวร์คนหนึ่งของคุณได้สร้างการเปลี่ยนแปลงด้วยชื่อไฟล์ index.js.new ไปแล้ว เพียงคัดลอกไฟล์นั้นไปที่ index.js จากนั้นการเปลี่ยนแปลงของคุณจะมีผล ทำตามวิธีการเพื่อทำการเปลี่ยนแปลงให้เหมาะสม

เรียกใช้คำสั่งต่อไปนี้ คัดลอกไฟล์ที่อัปเดตไปยังชื่อไฟล์ที่ถูกต้อง และพิมพ์เนื้อหาเพื่อยืนยันการเปลี่ยนแปลง

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

โค้ดที่ได้ควรมีลักษณะดังนี้

/*
Copyright 2019 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    width: "800px",
    margin: "0 auto",
    padding: theme.spacing(3, 2)
  }
}));
export default function Home() {
  const classes = useStyles();
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Typography variant="h5">
          Fancy Fashion &amp; Style Online
        </Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
          Start shopping Fancy items now!
        </Typography>
      </Paper>
    </div>
  );
}

คุณได้อัปเดตคอมโพเนนต์ React แล้ว แต่ต้องสร้างแอป React เพื่อสร้างไฟล์แบบคงที่ เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างแอป React และคัดลอกไปยังไดเรกทอรีสาธารณะแบบโมโนลิธ

cd ~/monolith-to-microservices/react-app
npm run build:monolith

เมื่ออัปเดตโค้ดแล้ว คุณต้องสร้างคอนเทนเนอร์ Docker อีกครั้งและเผยแพร่ไปยัง Container Registry คุณใช้คำสั่งเดียวกับก่อนหน้านี้ได้ ยกเว้นครั้งนี้คุณจะต้องอัปเดตป้ายกำกับเวอร์ชัน

เรียกใช้คำสั่งต่อไปนี้เพื่อทริกเกอร์ Cloud Build ใหม่ด้วยอิมเมจเวอร์ชัน 2.0.0 ที่อัปเดตแล้ว

cd ~/monolith-to-microservices/monolith

#Feel free to test your application
npm start

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

ในส่วนถัดไป คุณจะใช้รูปภาพเพื่ออัปเดตแอปโดยไม่มีการหยุดทำงาน

8. อัปเดตเว็บไซต์ที่มีช่วงพักเป็นศูนย์

การเปลี่ยนแปลงเสร็จสมบูรณ์แล้ว และทีมการตลาดยินดีรับอัปเดตจากคุณ ถึงเวลาอัปเดตเว็บไซต์โดยไม่รบกวนผู้ใช้แล้ว

Cloud Run จะถือว่าการติดตั้งใช้งานแต่ละรายการเป็นการแก้ไขใหม่ ซึ่งจะนำเข้าสู่โลกออนไลน์ จากนั้นจะมีการส่งการจราจรของข้อมูลไปยังการปรับดังกล่าว

ทำตามวิธีการชุดถัดไปเพื่ออัปเดตเว็บไซต์

บรรทัดคำสั่ง

จากบรรทัดคำสั่ง คุณจะทำให้บริการใช้งานได้อีกครั้งเพื่ออัปเดตอิมเมจเป็นเวอร์ชันใหม่ด้วยคำสั่งต่อไปนี้

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed

ยืนยันการทำให้ใช้งานได้

ตรวจสอบการอัปเดตการทำให้ใช้งานได้โดยเรียกใช้คำสั่งต่อไปนี้

gcloud run services describe monolith --platform managed 

ผลลัพธ์จะมีลักษณะดังนี้

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  annotations:
    client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0
...

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

หากต้องการยืนยันการเปลี่ยนแปลง ให้ไปที่ URL ภายนอกของบริการ Cloud Run อีกครั้งและสังเกตเห็นว่าชื่อแอปได้รับการอัปเดตแล้ว

เรียกใช้คำสั่งต่อไปนี้เพื่อแสดงรายการบริการและดูที่อยู่ IP หากคุณลืม

gcloud run services list

ตอนนี้เว็บไซต์ควรแสดงข้อความที่คุณเพิ่มไว้ในคอมโพเนนต์ของหน้าแรกแล้ว

451ca252acae6928.png

9. ล้างข้อมูล

ลบอิมเมจ Container Registry

# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

ลบอาร์ติแฟกต์ Cloud Build ออกจาก Cloud Storage

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}' 

gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done

ลบบริการ Cloud Run

gcloud run services delete monolith --platform managed

10. ขอแสดงความยินดี

คุณทำให้เว็บไซต์ใช้งานได้ ปรับขนาด และอัปเดตเว็บไซต์ด้วย Cloud Run แล้ว

ดูข้อมูลเพิ่มเติม