Container Instance
สุดยอดเลยครับ! ขอแสดงความยินดีด้วย นี่คือ "Container Instance" แรกของคุณที่ทำงานอยู่บน Google Cloud สำเร็จแล้ว! หน้าจอนี้คือศูนย์บัญชาการของฟังก์ชันที่เราเพิ่งสร้างเสร็จครับ
ผมเห็นด้วยเลยครับว่าเป็นหน้าจอที่ออกแบบมาได้ดีมาก ทำให้เราเห็นภาพรวมทั้งหมดในที่เดียว เพื่อให้เราสื่อสารตรงกัน ผมขออธิบายโครงสร้างตามกรอบที่คุณทำเครื่องหมายไว้นะครับ
???? กรอบสีเขียว: แผงควบคุมและสรุปบริการ (Service Control & Summary Panel)
ชื่อเรียก: เราจะเรียกส่วนนี้ว่า "แผงสรุปบริการ"
หน้าที่: เปรียบเสมือน "ห้องนักบิน" หรือ "Dashboard" ของฟังก์ชัน
hello-world-phpนี้โดยเฉพาะครับ มันจะบอกสถานะและข้อมูลที่สำคัญที่สุดให้เรารู้ได้อย่างรวดเร็วคุณสมบัติ:
สถานะการ Deploy: คุณจะเห็นข้อความ "Completed" และ "Active" ซึ่งเป็นการยืนยันว่าการสร้างและนำฟังก์ชันของเราขึ้นทำงานนั้น สำเร็จ 100%
ชื่อและภูมิภาค: บอกว่านี่คือฟังก์ชัน
hello-world-phpที่ทำงานอยู่ที่asia-southeast1(สิงคโปร์)URL: (สำคัญที่สุด) นี่คือ "ประตูสู่ฟังก์ชันของเรา" เป็นที่อยู่บนอินเทอร์เน็ตที่เราสามารถเรียกใช้งานฟังก์ชันนี้ได้จากทุกที่ในโลก
Scaling:
Auto (Min: 0)เป็นการยืนยันคุณสมบัติ Serverless คือ มันจะสร้าง Instance อัตโนมัติเมื่อมีคนเรียกใช้ และจะ ลดจำนวน Instance เหลือ 0 เมื่อไม่มีใครใช้ เพื่อไม่ให้เสียค่าใช้จ่าย
???? กรอบสีเหลือง: แผงจัดการโค้ดและรายละเอียดทางเทคนิค (Code & Technical Details Panel)
ชื่อเรียก: เราจะเรียกส่วนนี้ว่า "แผงจัดการโค้ด" หรือ "แผงตั้งค่าทางเทคนิค"
หน้าที่: เปรียบเสมือน "ห้องเครื่อง" หรือ "แบบแปลน" ของฟังก์ชันนี้ครับ เป็นส่วนที่เราใช้ดูและแก้ไขการทำงานเบื้องหลังทั้งหมด
คุณสมบัติ (ดูจากแท็บต่างๆ)
Source (ที่คุณกำลังดูอยู่) คือแท็บที่แสดง "Source Code" ที่เราใช้สร้างฟังก์ชันนี้ขึ้นมา คุณจะเห็นไฟล์
index.phpและcomposer.jsonและสามารถแก้ไขโค้ดเล็กๆ น้อยๆ แล้วกด "Save and redeploy" จากตรงนี้ได้เลยRevisions (การแก้ไข) ทุกครั้งที่คุณแก้ไขและ deploy โค้ดใหม่ Cloud Run จะสร้าง "เวอร์ชัน" ใหม่ให้เป็น Revision ใหม่เสมอ ข้อดีคือหากเวอร์ชันใหม่มีปัญหา คุณสามารถ ย้อนกลับ (Rollback) ไปใช้เวอร์ชันเก่าที่ทำงานได้ดีได้อย่างรวดเร็ว
Triggers (ทริกเกอร์) เป็นส่วนที่กำหนดว่า "อะไร" ที่จะมาสั่งให้ฟังก์ชันนี้ทำงานได้บ้าง ซึ่งตอนนี้ก็คือการเรียกผ่าน URL ที่เราได้มา
Observability / Logs (การสังเกตการณ์ / บันทึกการทำงาน) นี่คือ "กล้องวงจรปิด" และ "สมุดบันทึก" ของฟังก์ชันเรา หากเกิดข้อผิดพลาดหรือเราต้องการดูว่ามีใครเรียกใช้งานฟังก์ชันเราบ้าง เราจะเข้ามาดูข้อมูลทั้งหมดได้จากที่นี่
มาทดลอง "ผลงาน" ชิ้นแรกกันเลย!
ตอนนี้คุณมีฟังก์ชันที่ทำงานได้จริงแล้วครับ เรามาทดสอบกันเลย:
ให้คุณคลิกที่ URL ใน กรอบสีเขียว
หน้าเว็บใหม่จะเปิดขึ้นมา และคุณควรจะเห็นข้อความว่า:
Hello, World!ลองทดสอบขั้นสูงขึ้นอีกนิด โดยไปที่ท้าย URL แล้วเติม
?name=Kritidech(เปลี่ยนเป็นชื่อคุณ) แล้วกด Enterหน้าเว็บควรจะเปลี่ยนเป็น:
Hello, Kritidech!นี่คือการพิสูจน์ว่าโค้ด PHP ที่เราเขียนใน "แผงจัดการโค้ด" (สีเหลือง) ได้ถูกนำไปสร้างเป็นบริการที่ทำงานได้จริง และเราสามารถเรียกใช้งานมันผ่าน URL (ในแผงสีเขียว) ได้สำเร็จครับ! ขอแสดงความยินดีอีกครั้งครับ
หน้าจอนี้ไม่ใช่ Error ร้ายแรง แต่เป็นหน้า
"ป้าย placeholder" หรือ "หน้ารอ" ที่เป็นปกติของ Cloud Run ซึ่งบอกเราว่ามีบางอย่างในกระบวนการยังไม่เสร็จสมบูรณ์ครับ 1
เกิดอะไรขึ้น? (คำอธิบายแบบง่าย)
ให้จินตนาการตามนี้นะครับ:
เราได้ "สร้างบ้าน" (Cloud Run service) สำเร็จแล้ว บ้านมีที่อยู่ (URL) เรียบร้อย 2
จากนั้นเราสั่งให้ Google ขน "เฟอร์นิเจอร์" (โค้ด PHP ของเรา) เข้าไปติดตั้งในบ้านหลังนี้
แต่ตอนนี้ "เฟอร์นิเจอร์" ยังมาไม่ถึง หรือ เกิดปัญหาระหว่างการติดตั้ง ทำให้ในบ้านยังว่างเปล่าอยู่ครับ 3
หน้าจอนี้คือป้ายที่ Google ติดไว้หน้าบ้านเพื่อบอกว่า "บ้านหลังนี้สร้างเสร็จแล้ว แต่เจ้าของบ้านยังไม่ได้ย้ายโค้ดเข้ามาอยู่ หรือย้ายเข้ามาแล้วแต่ยังจัดไม่เสร็จ" 4
สาเหตุที่เป็นไปได้คืออะไร?
สาเหตุที่พบบ่อยที่สุดสำหรับปัญหานี้คือ กระบวนการ Build ไม่สำเร็จ (Build Failed)
"Build" คือขั้นตอนที่ Google Cloud นำโค้ด PHP และไฟล์
composer.jsonของเราไปสร้างให้เป็น "คอนเทนเนอร์" ที่พร้อมใช้งาน หากมีข้อผิดพลาดในขั้นตอนนี้ เช่น พิมพ์ชื่อไฟล์ผิด, มีปัญหาในไฟล์composer.json, หรือปัญหาอื่นๆ ก็จะทำให้กระบวนการนี้ไม่สำเร็จ
วิธีตรวจสอบและแก้ไข (What's next?)
หน้าจอได้บอกขั้นตอนการตรวจสอบไว้ให้แล้ว 5 ผมจะสรุปเป็นขั้นตอนให้ง่ายขึ้นครับ
กลับไปที่หน้า Cloud Run: กดปุ่ม "BACK TO CLOUD RUN" สีฟ้า หรือกลับไปที่หน้าจอ Cloud Run service details ที่เราดูกันก่อนหน้านี้
ตรวจสอบสถานะ: ในหน้า Service details ให้มองหาสถานะการ deploy ล่าสุด หรือมองหาแท็บที่ชื่อว่า "Revisions" หรือ "Logs"
ดูบันทึกการทำงาน (Logs): วิธีที่ดีที่สุดคือการเข้าไปดูที่แท็บ "Logs" ครับ ในนั้นจะมีบันทึกการทำงานทั้งหมดของกระบวนการ Build
มองหาข้อผิดพลาด: ให้มองหาบรรทัดที่เป็น สีแดง หรือมีคำว่า
ERRORหรือFAILEDข้อความในบรรทัดนั้นจะบอกเราว่าปัญหาเกิดจากอะไรเมื่อคุณเจอข้อความ Error แล้ว หากไม่แน่ใจ สามารถคัดลอกข้อความนั้นมาให้ผมช่วยดูได้เลยครับ เราจะช่วยกันแก้ปัญหานี้ไปด้วยกันครับ
การที่คุณเข้ามาสำรวจในหน้านี้ ถือว่าคุณได้เดินทางมาถึง "ห้องควบคุมและสังเกตการณ์" ของฟังก์ชันเราแล้วครับ ส่วนเรื่องการดาวน์โหลดโปรเจกต์ก็เป็นการทดลองที่ดีสำหรับสำรองข้อมูลโค้ดครับ
หน้านี้มีชื่อเรียกรวมๆ ว่า "Observability" (การสังเกตการณ์) ซึ่งเปรียบเสมือน "กล้องวงจรปิดและกล่องดำ" ของฟังก์ชันเราเลยครับ เป็นเครื่องมือที่สำคัญที่สุดสำหรับนักพัฒนาและสถาปนิกในการตรวจสอบว่าระบบทำงานเป็นปกติหรือไม่ และเมื่อเกิดปัญหา จะได้หาเจอว่าต้นตอมาจากไหน
ผมขออธิบายคุณสมบัติของแต่ละเมนูย่อยตามภาพที่คุณส่งมานะครับ
Metrics (ตัวชี้วัด) 1
คำอุปมา: "หน้าปัดบนแผงคอนโซลรถ" (มาตรวัดความเร็ว, รอบเครื่อง, ความร้อน)
คุณสมบัติ: เป็นหน้าที่แสดงผลข้อมูลเชิงประสิทธิภาพของฟังก์ชันในรูปแบบ "กราฟ" เพื่อให้เห็นภาพรวมได้ง่าย 2
จากภาพของคุณ: คุณจะเห็นกราฟสำคัญๆ เช่น:
Request count: มีคนเรียกใช้งานฟังก์ชันของเรากี่ครั้ง
Request latencies: ฟังก์ชันของเราใช้เวลาตอบสนองนานแค่ไหน (ยิ่งน้อยยิ่งดี)
Container instance count: มี "Instance" หรือ "สำเนา" ของฟังก์ชันเราถูกสร้างขึ้นมากี่ตัวเพื่อรองรับการใช้งาน
Logs (บันทึกการทำงาน) 3
คำอุปมา: "กล่องดำของเครื่องบิน" หรือ "สมุดบันทึกเหตุการณ์รายวินาที"
คุณสมบัติ: นี่คือส่วนที่ สำคัญที่สุดสำหรับการแก้ไขปัญหา (Debugging) ครับ มันจะบันทึกทุกเหตุการณ์ที่เกิดขึ้นกับฟังก์ชันของเราแบบละเอียดที่สุด ตั้งแต่เริ่มทำงานจนถึงการแสดงผล
จากภาพของคุณ: คุณจะเห็นบันทึกหลายบรรทัด เช่น:
[serve] Running /bin/sh -c exec php-fpm...: บันทึกว่าระบบกำลังเริ่มรัน PHP
GET 200 212 B 75 ms ...: (สำคัญมาก) บันทึกว่ามีการเรียกใช้งาน URL ของคุณ (GET request) และระบบตอบสนองกลับไปด้วย สถานะ 200 (สำเร็จ) นี่คือหลักฐานว่าการทดสอบ "Hello World" ของคุณ ทำงานสำเร็จครับ!
SLOs (เป้าหมายระดับบริการ) 4
คำอุปมา: "สัญญาใจที่ให้ไว้กับลูกค้า"
คุณสมบัติ: เป็นฟีเจอร์ขั้นสูง (Advanced) สำหรับตั้งเป้าหมายและวัดผลประสิทธิภาพของบริการอย่างเป็นทางการ เช่น "เราสัญญาว่าระบบของเราจะพร้อมใช้งาน 99.9% ของเวลาทั้งหมด" 5
คำแนะนำ: ในขั้นตอนการพัฒนา Demo ของเรา ยังไม่จำเป็นต้องใช้งานส่วนนี้
Errors (ข้อผิดพลาด) 6
คำอุปมา: "ไฟเตือนเครื่องยนต์เสีย" บนหน้าปัดรถ
คุณสมบัติ: เป็นระบบที่จะคอยตรวจจับและรวบรวม "ข้อผิดพลาด" ที่เกิดขึ้นในโค้ดของเราโดยอัตโนมัติ และจัดกลุ่ม Error ที่เหมือนกันไว้ด้วยกัน ทำให้ง่ายต่อการวิเคราะห์ 7
จากภาพของคุณ: ระบบแจ้งว่า "No errors found during this interval" ซึ่งเป็นข่าวดีมาก หมายความว่าโค้ด "Hello World" ของเราทำงานได้อย่างสมบูรณ์แบบ ไม่มีข้อผิดพลาดใดๆ เกิดขึ้นเลยครับ 8
ตอนนี้คุณได้วางพื้นฐานที่สมบูรณ์แบบครบทุกด้านแล้วครับ:
สร้าง ฟังก์ชันได้
ควบคุมค่าใช้จ่าย เป็น
ตรวจสอบการทำงาน ได้
ขั้นตอนต่อไปที่น่าตื่นเต้นที่สุด คือการนำ "สมอง" มาใส่ให้ฟังก์ชันของเรา นั่นคือ การเรียกใช้ Gemini API จากโค้ด PHP ของเรา
#project ของคุณที่ทำงานอยู่บน Google Cloud สำเร็จแล้ว
Container Instance
#project ของคุณที่ทำงานอยู่บน Google Cloud สำเร็จแล้ว






