การเริ่มต้นใช้งาน App Engine (Python 3)

1. ภาพรวม

befa7a877ccdd35d.png

แอปพลิเคชัน 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. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

เริ่มต้น Cloud Shell

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

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

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

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.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. เขียนเว็บแอป

หลังจากเปิดใช้ 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

10af7b1a6240e9f4.gif

หากต้องการแก้ไขไฟล์โดยตรงด้วย 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 แล้ว

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป