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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มี.ค. 27, 2024
account_circleเขียนโดย Laurent Picard

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