1. ภาพรวม

แอปพลิเคชัน Google App Engine สร้าง ดูแลรักษา และปรับขนาดได้ง่ายเมื่อความต้องการด้านการเข้าชมและพื้นที่เก็บข้อมูลเปลี่ยนแปลงไป App Engine ช่วยให้คุณไม่ต้องบำรุงรักษาเซิร์ฟเวอร์ เพียงอัปโหลดแอปพลิเคชันของคุณก็พร้อมใช้งาน
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีทําให้เว็บแอป Python อย่างง่ายที่เขียนด้วยเฟรมเวิร์กเว็บ Flask ใช้งานได้ แม้ว่าตัวอย่างนี้จะใช้ Flask แต่คุณก็ใช้เฟรมเวิร์กเว็บอื่นๆ ได้ เช่น Django, Pyramid, Bottle และ web.py
บทแนะนำนี้ดัดแปลงมาจาก https://cloud.google.com/appengine/docs/standard/python3/quickstart
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างเซิร์ฟเวอร์ Python แบบง่ายบน Google App Engine
- วิธีอัปเดตโค้ดโดยไม่ต้องปิดเซิร์ฟเวอร์
สิ่งที่คุณต้องมี
- คุ้นเคยกับการใช้ Python
- คุ้นเคยกับโปรแกรมแก้ไขข้อความมาตรฐานของ Linux เช่น vim, emacs หรือ nano
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้งานบริการของ Google Cloud เท่าไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากแล็ปท็อประยะไกลได้ แต่ใน Codelab นี้คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


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

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

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์
เมื่อเชื่อมต่อกับ 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. เขียนเว็บแอป
หลังจากเปิดใช้ Cloud Shell แล้ว คุณจะใช้บรรทัดคำสั่งเพื่อเรียกใช้คำสั่ง Cloud SDK gcloud หรือเครื่องมืออื่นๆ ที่มีในอินสแตนซ์เครื่องเสมือนได้ คุณใช้ไดเรกทอรี $HOME ในที่เก็บข้อมูลดิสก์ถาวรเพื่อจัดเก็บไฟล์ในโปรเจ็กต์ต่างๆ และระหว่างเซสชัน Cloud Shell ได้ ไดเรกทอรี $HOME ของคุณจะเป็นแบบส่วนตัวและผู้ใช้รายอื่นจะเข้าถึงไม่ได้
มาเริ่มกันด้วยการสร้างโฟลเดอร์ใหม่ในไดเรกทอรี $HOME สำหรับแอปพลิเคชัน
mkdir ~/helloworld cd ~/helloworld
สร้างไฟล์ชื่อ main.py:
touch main.py
แก้ไขไฟล์ด้วยโปรแกรมแก้ไขบรรทัดคำสั่งที่คุณต้องการ (nano, vim หรือ emacs) หรือโดยคลิกปุ่ม Cloud Shell Editor

หากต้องการแก้ไขไฟล์โดยตรงด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
return "Hello World!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
4. กำหนดทรัพยากร Dependency
หากต้องการระบุทรัพยากร Dependency ของเว็บแอป ให้กลับไปที่เทอร์มินัลแล้วสร้างไฟล์ requirements.txt ในไดเรกทอรีรากของโปรเจ็กต์ โดยใช้ Flask เวอร์ชันที่ต้องการ
touch requirements.txt
หากต้องการแก้ไขไฟล์ด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5. กำหนดค่าการทำให้ใช้งานได้
หากต้องการทําให้เว็บแอปใช้งานได้ใน App Engine คุณต้องมีไฟล์ app.yaml ไฟล์กำหนดค่านี้จะกำหนดการตั้งค่าของเว็บแอปสำหรับ App Engine
จากเทอร์มินัล ให้สร้างและแก้ไขไฟล์ app.yaml ในไดเรกทอรีรากของโปรเจ็กต์
touch app.yaml
หากต้องการแก้ไขไฟล์ด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit app.yaml
app.yaml
runtime: python312
6. ติดตั้งใช้งานเว็บแอป
จากเทอร์มินัล ให้ตรวจสอบเนื้อหาของไดเรกทอรีโดยทำดังนี้
ls
คุณควรมีไฟล์ 3 ไฟล์ต่อไปนี้
app.yaml main.py requirements.txt
ทำให้เว็บแอปใช้งานได้ด้วยคำสั่งต่อไปนี้
gcloud app deploy
ในครั้งแรก คุณต้องเลือกภูมิภาคการทำให้ใช้งานได้
Please choose the region where you want your App Engine application located: [1] asia-east2 ... [7] australia-southeast1 [8] europe-west [9] europe-west2 ... [12] northamerica-northeast1 [13] southamerica-east1 ... [19] us-west4 ... Please enter your numeric choice:
ยืนยันเพื่อเปิดใช้การติดตั้งใช้งาน
Creating App Engine application in project [PROJECT_ID] and region [REGION]....done. Services to deploy: descriptor: [~/helloworld/app.yaml] source: [~/helloworld] target project: [PROJECT_ID] target service: [default] target version: [YYYYMMDDtHHMMSS] target url: [https://PROJECT_ID.REGION_ID.r.appspot.com] Do you want to continue (Y/n)?
ระบบจะติดตั้งใช้งานแอปของคุณ
Beginning deployment of service [default]... Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Uploading 3 files to Google Cloud Storage 100% File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
ตอนนี้เว็บแอปพร้อมตอบสนองต่อคำขอ HTTP ใน https://PROJECT_ID.REGION_ID.r.appspot.com แล้ว
7. ทดสอบเว็บแอป
เว็บแอปพร้อมที่จะตอบสนองต่อคำขอ HTTP ใน https://PROJECT_ID.REGION_ID.r.appspot.com แล้ว
ก่อนอื่น ให้ดึงชื่อโฮสต์ของเว็บแอปด้วยคำสั่ง gcloud app describe
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
ทดสอบเว็บแอปด้วยคำขอ HTTP GET อย่างง่ายนี้
curl https://$APPENGINE_HOSTNAME
คุณควรได้รับคำตอบต่อไปนี้
Hello World!
สรุป
ในขั้นตอนก่อนหน้า คุณได้ตั้งค่าเว็บแอป Python อย่างง่าย เรียกใช้ และทำให้แอปพลิเคชันใช้งานได้บน App Engine
8. อัปเดตเว็บแอป
แก้ไขเว็บแอปโดยเปลี่ยนเนื้อหาฟังก์ชัน hello() ในไฟล์ main.py
หากต้องการแก้ไขไฟล์ด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
# return "Hello World!\n" # ← Replace this line
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
จากเทอร์มินัล ให้ทำการติดตั้งใช้งานอีกครั้งเพื่ออัปเดตเว็บแอปโดยใช้คำสั่งต่อไปนี้
gcloud app deploy --quiet
ระบบจะนำแอปเวอร์ชันใหม่ไปใช้งาน
Beginning deployment of service [default]... Uploading 1 file to Google Cloud Storage ... Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
ทดสอบเว็บแอปเวอร์ชันใหม่เหมือนกับที่เคยทำ
curl https://$APPENGINE_HOSTNAME
คุณควรได้รับคำตอบเดียวกัน
Hello World!
ทดสอบด้วยพารามิเตอร์ที่ไม่บังคับ
curl https://$APPENGINE_HOSTNAME?who=Universe
คุณควรได้รับคำตอบต่อไปนี้
Hello Universe!
สรุป
ในขั้นตอนนี้ คุณได้อัปเดตและติดตั้งเว็บแอปอีกครั้งโดยไม่มีการหยุดชะงักของบริการ
9. ยินดีด้วย
คุณได้เรียนรู้วิธีเขียนเว็บแอปพลิเคชัน App Engine แรกใน Python แล้ว
ดูข้อมูลเพิ่มเติม
- เอกสารประกอบของ App Engine: https://cloud.google.com/appengine
- ดูบทแนะนำนี้เพื่อเขียนแอป Python ที่สมบูรณ์บน App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป