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 ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Cloud Shell ใน Codelab ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์
เมื่อเชื่อมต่อกับ 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
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0