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

เริ่มต้น Cloud Shell

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

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

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

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

เมื่อเชื่อมต่อกับ 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 แล้ว

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0