1. ภาพรวม
ชุด Codelab ของ Serverless Migration Station (บทแนะนำแบบลงมือปฏิบัติจริงที่ทำตามได้ด้วยตนเอง) และวิดีโอที่เกี่ยวข้องมีจุดมุ่งหมายเพื่อช่วยให้นักพัฒนาแอป Google Cloud แบบไร้เซิร์ฟเวอร์ปรับปรุงแอปพลิเคชันให้ทันสมัยโดยแนะนำการย้ายข้อมูลอย่างน้อย 1 รายการ ซึ่งส่วนใหญ่เป็นการย้ายข้อมูลออกจากบริการเดิม การทำเช่นนี้จะทำให้แอปของคุณพกพาได้มากขึ้น และช่วยให้คุณมีตัวเลือกและความยืดหยุ่นมากขึ้น ซึ่งจะช่วยให้คุณผสานรวมและเข้าถึงผลิตภัณฑ์ระบบคลาวด์ที่หลากหลายยิ่งขึ้น รวมถึงอัปเกรดเป็นภาษาเวอร์ชันใหม่ๆ ได้ง่ายขึ้น แม้ว่าในตอนแรกจะมุ่งเน้นไปที่ผู้ใช้ Cloud รุ่นแรกๆ ซึ่งส่วนใหญ่เป็นนักพัฒนาซอฟต์แวร์ App Engine (สภาพแวดล้อมมาตรฐาน) แต่ชุดข้อมูลนี้ก็ครอบคลุมแพลตฟอร์มแบบไร้เซิร์ฟเวอร์อื่นๆ เช่น Cloud Functions และ Cloud Run หรือที่อื่นๆ หากเกี่ยวข้อง
Codelab นี้จะสอนวิธีรวมและใช้ Memcache ของ App Engine กับแอปตัวอย่างจาก Codelab โมดูลที่ 1 เราจะเพิ่มการใช้งาน Memcache ในบทแนะนำโมดูลที่ 12 นี้ จากนั้นจะย้ายข้อมูลไปยัง Cloud Memorystore ในโมดูลที่ 13
คุณจะได้เรียนรู้วิธีต่อไปนี้
- ใช้ App Engine Memcache API/ไลบรารี
- เพิ่มการแคชลงในแอป NDB ของ App Engine ที่ใช้ Flask ใน Python 2
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud Platform ที่มีบัญชีสำหรับการเรียกเก็บเงินของ GCP ที่ใช้งานอยู่
- ทักษะ Python ขั้นพื้นฐาน
- มีความรู้พื้นฐานเกี่ยวกับคำสั่ง Linux ทั่วไป
- ความรู้พื้นฐานเกี่ยวกับการพัฒนาและการทําให้แอป App Engine ใช้งานได้
- แอป App Engine ของโมดูล 1 ที่ใช้งานได้ (ทำตามโค้ดแล็บ [แนะนำ] หรือคัดลอกแอปจากที่เก็บ)
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud เท่าใด
2. ฉากหลัง
หากต้องการย้ายข้อมูลจาก Memcache ของ App Engine ให้เพิ่มการใช้งานลงในแอป Flask และ App Engine NDB ที่มีอยู่ซึ่งเป็นผลมาจาก Codelab โมดูลที่ 1 แอปตัวอย่างจะแสดงการเข้าชม 10 ครั้งล่าสุดต่อผู้ใช้ หากผู้ใช้คนเดียวกันรีเฟรชเบราว์เซอร์ การสร้างเอนทิตีการเข้าชมใหม่และดึงข้อมูลการเข้าชมล่าสุดจาก Datastore อย่างต่อเนื่องจะไม่ใช่แนวทางที่ดีที่สุด ดังนั้นเราจึงจะแคชการเข้าชมล่าสุดเหล่านั้น
หากผู้เข้าชมรายเดียวกันเข้าชมหน้าเว็บ ระบบจะแสดงการเข้าชมเหล่านั้นจากแคช หากผู้ใช้ใหม่เข้าชมเว็บไซต์หรือผ่านไป 1 ชั่วโมง ระบบจะล้างแคชและแทนที่ด้วยรายการล่าสุด (รวมถึงลงทะเบียนการเข้าชมใหม่) เมื่อผสานรวม App Engine Memcache แล้ว เราจะย้ายข้อมูลไปยัง Cloud Memorystore ใน Codelab ถัดไป (โมดูลที่ 13) ได้
บทแนะนำนี้มีขั้นตอนต่อไปนี้
- การตั้งค่า/การเตรียมการ
- อัปเดตการกำหนดค่า
- แก้ไขโค้ดแอปพลิเคชัน
3. การตั้งค่า/การเตรียมการ
ก่อนจะไปถึงส่วนหลักของบทแนะนำนี้ เรามาตั้งค่าโปรเจ็กต์ รับโค้ด แล้วทำให้แอปพื้นฐานใช้งานได้ เพื่อให้เราทราบว่าเราเริ่มต้นด้วยโค้ดที่ใช้งานได้
1. ตั้งค่าโปรเจ็กต์
หากคุณทำ Codelab Module 1 เสร็จแล้ว เราขอแนะนำให้ใช้โปรเจ็กต์ (และโค้ด) เดียวกันนั้นซ้ำ หรือจะสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์อื่นที่มีอยู่ซ้ำก็ได้ ตรวจสอบว่าโปรเจ็กต์มีบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่และเปิดใช้ App Engine แล้ว
2. รับแอปตัวอย่างพื้นฐาน
ข้อกำหนดเบื้องต้นอย่างหนึ่งของ Codelab นี้คือการมีแอปตัวอย่างโมดูลที่ 1 ที่ใช้งานได้ หากคุณยังไม่มี ให้ทำตามบทแนะนำใดบทแนะนำหนึ่ง (ลิงก์ด้านบน) ให้เสร็จก่อนที่จะดำเนินการต่อที่นี่ หรือหากคุ้นเคยกับเนื้อหาอยู่แล้ว ก็เริ่มด้วยโค้ดโมดูลที่ 1 ด้านล่างได้เลย
ไม่ว่าคุณจะใช้โค้ดของคุณเองหรือโค้ดของเรา เราจะเริ่มที่โค้ดของโมดูลที่ 1 Codelab นี้จะแนะนำแต่ละขั้นตอนให้คุณ โดยจะปิดท้ายด้วยโค้ดที่คล้ายกับโค้ดในโฟลเดอร์ repo ของโมดูลที่ 11 (FINISH)
- เริ่มต้น: โฟลเดอร์โมดูล 1 (Python 2)
- เสร็จสิ้น: โฟลเดอร์โมดูล 12 (Python 2)
- ที่เก็บทั้งหมด (เพื่อโคลนหรือดาวน์โหลดไฟล์ ZIP)
ไดเรกทอรีของไฟล์เริ่มต้นของโมดูลที่ 1 (ของคุณหรือของเรา) ควรมีลักษณะดังนี้
$ ls README.md main.py templates app.yaml requirements.txt
3. (อีกครั้ง) ทำให้แอปพื้นฐานใช้งานได้
ขั้นตอนการเตรียมความพร้อมที่เหลือที่คุณต้องดำเนินการตอนนี้มีดังนี้
- ทำความคุ้นเคยกับ
gcloudเครื่องมือบรรทัดคำสั่งอีกครั้ง - ทำให้แอปตัวอย่างใช้งานได้อีกครั้งด้วย
gcloud app deploy - ยืนยันว่าแอปทำงานใน App Engine ได้โดยไม่มีปัญหา
เมื่อทำตามขั้นตอนเหล่านั้นสำเร็จและเห็นว่าเว็บแอปทำงานได้ (โดยมีเอาต์พุตคล้ายกับด้านล่าง) คุณก็พร้อมที่จะเพิ่มการใช้แคชลงในแอปแล้ว

4. อัปเดตการกำหนดค่า
ไม่จำเป็นต้องเปลี่ยนแปลงไฟล์การกำหนดค่า App Engine มาตรฐาน (app.yaml, requirements.txt, appengine_config.py)
5. แก้ไขไฟล์แอปพลิเคชัน
เนื่องจากเราจะเพิ่มเฉพาะ App Engine API จึงไม่มีแพ็กเกจภายนอกที่เกี่ยวข้อง ซึ่งหมายความว่าไม่จำเป็นต้องอัปเดตไฟล์กำหนดค่า (app.yaml, requirements.txt, appengine_config.py) มีไฟล์แอปพลิเคชันเพียงไฟล์เดียวคือ main.py ดังนั้นการเปลี่ยนแปลงทั้งหมดในส่วนนี้จึงมีผลกับไฟล์นั้นเท่านั้น
การนำเข้า
ขั้นตอนที่สำคัญที่สุดคือการนำเข้าไลบรารี Memcache google.appengine.api.memcache เนื่องจากเราจะแคชการเข้าชมล่าสุดเป็นเวลา 1 ชั่วโมง เราจึงเพิ่มค่าคงที่สำหรับจำนวนวินาทีใน 1 ชั่วโมงด้วย โค้ดของคุณจะมีลักษณะดังนี้ก่อนและหลังการเปลี่ยนแปลงนี้
ก่อน:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
หลังจากนั้น
from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb
app = Flask(__name__)
HOUR = 3600
เพิ่มการแคชด้วยการรองรับ Memcache
การเปลี่ยนแปลงที่สำคัญที่สุดคือการเพิ่มการใช้แคชในแอปพลิเคชัน กล่าวโดยละเอียดคือ เราควรแคชการเข้าชมล่าสุด ตรวจสอบว่ามีการเข้าชมที่แคชไว้หรือไม่ และพยายามใช้ผลลัพธ์ที่แคชไว้ให้มากที่สุดตามแผนของเรา แอปจะทำตามขั้นตอนต่อไปนี้เพื่อให้บรรลุเป้าหมายของเรา
- ตั้งค่าการเข้าชมปัจจุบันและตั้งชื่อว่า
visitor - พยายามดึงข้อมูล
visitsล่าสุดจากแคช - หากแคชว่างเปล่าหรือผู้เข้าชมล่าสุด (
visits[0]['visitor']) แตกต่างจากผู้เข้าชมปัจจุบันvisitorให้จัดเก็บการเข้าชมล่าสุดนี้ ดึงข้อมูลการเข้าชมล่าสุด และแคชไว้เป็นเวลา 1 ชั่วโมง - แสดง
visitsต่อผู้ใช้ผ่านเทมเพลตเว็บ
ตัวอย่างก่อนและหลังการอัปเดตมีดังนี้
ก่อน:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
หลังจากนั้น
@app.route('/')
def root():
'main application (GET) handler'
# check for (hour-)cached visits
ip_addr, usr_agt = request.remote_addr, request.user_agent
visitor = '{}: {}'.format(ip_addr, usr_agt)
visits = memcache.get('visits')
# register visit & run DB query if cache empty or new visitor
if not visits or visits[0]['visitor'] != visitor:
store_visit(ip_addr, usr_agt)
visits = list(fetch_visits(10))
memcache.set('visits', visits, HOUR) # set() not add()
return render_template('index.html', visits=visits)
ภาพแสดงการเปลี่ยนแปลงที่เกิดขึ้นมีดังนี้

การดำเนินการนี้เป็นการเปลี่ยนแปลงที่จำเป็นทั้งหมดสำหรับการเพิ่มการใช้ App Engine memcache ลงในแอปตัวอย่างของโมดูลที่ 1 มาสร้างและทําให้แอปนี้ใช้งานได้เพื่อดูว่าแอปทํางานอย่างไร
6. สรุป/ล้างข้อมูล
ส่วนนี้จะสรุป Codelab นี้ด้วยการติดตั้งใช้งานแอป ยืนยันว่าแอปทำงานได้ตามที่ต้องการและในเอาต์พุตที่แสดง หลังจากตรวจสอบแอปแล้ว ให้ทำขั้นตอนการล้างข้อมูลและพิจารณาขั้นตอนถัดไป
ทำให้แอปพลิเคชันใช้งานได้และยืนยัน
นำแอปไปใช้งานอีกครั้งด้วย gcloud app deploy และยืนยันว่าแอปทำงานได้ ตอนนี้โค้ดของคุณควรตรงกับโค้ดใน FINISH ซึ่งอยู่ในโฟลเดอร์โมดูล 12 เอาต์พุตควรเหมือนกับแอปโมดูล 1 ที่คุณติดตั้งใช้งานก่อนหน้านี้

สิ่งที่เราทำคือการเพิ่มความเร็วประสบการณ์ของผู้ใช้สำหรับผู้ใช้รายเดียวกัน เมื่อรีเฟรช คุณควรได้รับผลลัพธ์จากแคชโดยตรง ซึ่งจะไม่สร้างการเข้าชมใหม่หรือทำให้ Datastore ดึงข้อมูล
ขอแสดงความยินดีที่คุณทำ Codelab โมดูลที่ 12 เสร็จสมบูรณ์เพื่อเพิ่มการใช้บริการ App Engine memcache ลงในแอปพลิเคชันตัวอย่าง ตอนนี้คุณมีตัวเลือกในการพอร์ตแอป Python 2 นี้ไปยัง Python 3 ในขั้นตอนโบนัสแล้ว
ล้างข้อมูล
ทั่วไป
หากคุณดำเนินการเสร็จแล้วในตอนนี้ เราขอแนะนำให้ปิดใช้แอป App Engine เพื่อไม่ให้มีการเรียกเก็บเงิน อย่างไรก็ตาม หากต้องการทดสอบหรือทดลองเพิ่มเติม แพลตฟอร์ม App Engine มีโควต้าฟรี ดังนั้นตราบใดที่คุณไม่เกินระดับการใช้งานดังกล่าว คุณก็จะไม่ถูกเรียกเก็บเงิน ซึ่งเป็นค่าบริการสำหรับการประมวลผล แต่อาจมีค่าบริการสำหรับบริการ App Engine ที่เกี่ยวข้องด้วย ดังนั้นโปรดดูข้อมูลเพิ่มเติมในหน้าการกำหนดราคา หากการย้ายข้อมูลนี้เกี่ยวข้องกับบริการอื่นๆ ของระบบคลาวด์ ระบบจะเรียกเก็บเงินสำหรับบริการเหล่านั้นแยกต่างหาก ไม่ว่าจะในกรณีใดก็ตาม หากมี ให้ดูส่วน "เฉพาะสำหรับ Codelab นี้" ด้านล่าง
เพื่อความโปร่งใสอย่างเต็มที่ การติดตั้งใช้งานแพลตฟอร์มการประมวลผลแบบ Serverless ของ Google Cloud เช่น App Engine จะทำให้เกิดค่าใช้จ่ายในการสร้างและพื้นที่เก็บข้อมูลเล็กน้อย Cloud Build มีโควต้าฟรีของตัวเอง เช่นเดียวกับ Cloud Storage การจัดเก็บรูปภาพนั้นจะใช้โควต้าบางส่วน อย่างไรก็ตาม คุณอาจอาศัยอยู่ในภูมิภาคที่ไม่มีระดับการใช้งานฟรีดังกล่าว ดังนั้นโปรดทราบการใช้พื้นที่เก็บข้อมูลเพื่อลดค่าใช้จ่ายที่อาจเกิดขึ้น "โฟลเดอร์" ของ Cloud Storage ที่คุณควรตรวจสอบ ได้แก่
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- ลิงก์พื้นที่เก็บข้อมูลด้านบนจะขึ้นอยู่กับ
PROJECT_IDและ *LOC*ation ของคุณ เช่น "us" หากแอปโฮสต์อยู่ในสหรัฐอเมริกา
ในทางกลับกัน หากคุณจะไม่ดำเนินการต่อกับแอปพลิเคชันนี้หรือ Codelab การย้ายข้อมูลอื่นๆ ที่เกี่ยวข้อง และต้องการลบทุกอย่างออกทั้งหมด ให้ปิดโปรเจ็กต์
เฉพาะสำหรับ Codelab นี้
บริการที่ระบุไว้ด้านล่างเป็นบริการเฉพาะสำหรับโค้ดแล็บนี้ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของแต่ละผลิตภัณฑ์
- บริการ Memcache ของ App Engine มี 2 รูปแบบที่แตกต่างกัน โดยแต่ละรูปแบบมีโครงสร้างการกำหนดราคาของตัวเอง คุณจึงต้องติดตามการใช้งานที่เกี่ยวข้องกับการเรียกเก็บเงิน
- บริการ App Engine Datastore ให้บริการโดย Cloud Datastore (Cloud Firestore ในโหมด Datastore) ซึ่งมีระดับฟรีด้วย ดูข้อมูลเพิ่มเติมได้ที่หน้าการกำหนดราคา
ขั้นตอนถัดไป
การย้ายข้อมูลที่สมเหตุสมผลถัดไปที่ควรพิจารณาจะกล่าวถึงในโมดูลที่ 13 ซึ่งจะแสดงให้นักพัฒนาแอปเห็นวิธีย้ายข้อมูลจากบริการ App Engine memcache ไปยัง Cloud Memorystore การย้ายข้อมูลเหล่านี้เป็นตัวเลือกที่ไม่บังคับและพร้อมให้บริการแก่ผู้ใช้ที่ต้องการดำเนินการตามขั้นตอนต่างๆ เพื่อปรับปรุงแอปพลิเคชันให้ทันสมัย บริการ Cloud Memorystore เป็นการอัปเกรดที่สำคัญสำหรับ memcache ของ App Engine ด้วยเหตุผลหลายประการ ดังนี้
- Cloud Memorystore ไม่ใช่แบบไร้เซิร์ฟเวอร์ ซึ่งหมายความว่าคุณต้องจัดสรรเซิร์ฟเวอร์สำหรับแคช นอกจากนี้ Cloud Memorystore ยังไม่มีรุ่นฟรีด้วย ปัจจัยทั้ง 2 อย่างนี้อาจส่งผลอย่างมากต่อต้นทุน
- Cloud Memorystore รองรับกลไกการจัดเก็บข้อมูลพื้นฐานที่แตกต่างกัน 2 แบบ (เครื่องมือแคช) ได้แก่ Redis และ Memcached
- Cloud Memorystore (สำหรับ Redis) มีชุดฟีเจอร์ที่ครอบคลุมและเจาะลึกกว่า App Engine Memcache มาก
- หากต้องการใช้ Cloud Memorystore คุณต้องตั้งค่าเซิร์ฟเวอร์ Cloud Memorystore เพิ่มลงในเครือข่าย VPC ของ Google Cloud จากนั้นให้แอป App Engine ใช้เครือข่ายดังกล่าวเพื่อสื่อสารกับเซิร์ฟเวอร์ Memorystore
หากคุณไม่คิดว่าจำเป็นต้องใช้ฟีเจอร์ทั้งหมดที่มีจาก Cloud Memorystore หรือกังวลเกี่ยวกับผลกระทบต่อต้นทุน คุณสามารถใช้ App Engine Memcache ต่อไปได้
นอกจากโมดูลที่ 13 แล้ว ยังมีการย้ายข้อมูลอื่นๆ ที่เป็นไปได้อีกมากมาย เช่น Cloud NDB และ Cloud Datastore หรือ Cloud Tasks นอกจากนี้ยังมีการย้ายข้อมูลข้ามผลิตภัณฑ์ไปยัง Cloud Run และ Cloud Functions ด้วย คุณจะดูข้อมูลทั้งหมดได้ที่ที่เก็บการย้ายข้อมูล
อีกขั้นตอนถัดไปที่อาจทำได้คือการย้ายข้อมูลไปยัง Python 3 ซึ่งจะกล่าวถึงในส่วนถัดไปเป็นขั้นตอนที่ไม่บังคับ
7. โบนัส: การย้ายข้อมูลไปยัง Python 3
ภาพรวม
ส่วนนี้ประกอบด้วยเนื้อหาโบนัสที่ไม่บังคับซึ่งจะย้ายข้อมูลแอปพลิเคชันโมดูลที่ 12 ที่เราเพิ่งทำเสร็จไปข้างต้นไปยัง Python 3 เราเริ่มด้วยการกำหนดค่า ตามด้วยแอปพลิเคชัน
ลดความซับซ้อนของ app.yaml
ข้อดีอย่างหนึ่งของรันไทม์ Python 3 คือapp.yamlสามารถลดความซับซ้อนลงได้อย่างมาก
ก่อน:
เนื้อหาใน app.yaml เมื่อสิ้นสุดโมดูลที่ 12 มีดังนี้
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
เนื่องจากรันไทม์ Python 3 กำหนดให้เฟรมเวิร์กเว็บต้องทำการกำหนดเส้นทางเอง จึงต้องเปลี่ยนตัวแฮนเดิลเส้นทางทั้งหมดใน app.yaml เป็น auto หากไม่มีไฟล์แบบคงที่ที่แสดง ผู้ใช้สามารถนำส่วน handlers: ทั้งหมดออกได้เลย นอกจากนี้ เราเลิกใช้งานทั้ง threadsafe และ api_version แล้ว
หลังจากนั้น
การเปลี่ยนแปลงที่จำเป็นซึ่งอธิบายไปข้างต้นทำให้ app.yaml เป็นตัวแทนของ Python 3
runtime: python39
app_engine_apis: true
บรรทัดเดียวที่ต้องมีคำอธิบายคือ app_engine_apis: true เมื่อบริการ App Engine รุ่นเดิมพร้อมให้บริการแก่รันไทม์รุ่นที่ 2 ในปี 2021 รันไทม์บางรายการ รวมถึง Python 3 ต้องมีการเริ่มต้นระบบเพิ่มเติมเพื่อเข้าถึง API เหล่านั้น เช่น ndb, taskqueue และ memcache บรรทัดนี้ในการกำหนดค่ามีไว้เพื่อวัตถุประสงค์ดังกล่าว
อัปเดต requirements.txt
ต้องมีการเริ่มต้นอีกครั้งของ API เดิมใน requirements.txt: ต้องรวมการเข้าถึง App Engine SDK ใหม่
ก่อน:
เนื้อหาใน app.yaml เมื่อสิ้นสุดโมดูลที่ 12 มีดังนี้
flask
หลังจากนั้น
เพียงเพิ่ม App Engine Python SDK คุณก็จะมีสิ่งต่อไปนี้
flask
appengine-python-standard
ลบ appengine_config.py และ lib
รันไทม์ App Engine รุ่นถัดไปปรับปรุงการใช้งานแพ็กเกจของบุคคลที่สามดังนี้
- ไลบรารีในตัวคือไลบรารีที่ Google ตรวจสอบแล้วและพร้อมใช้งานในเซิร์ฟเวอร์ App Engine ซึ่งอาจเป็นเพราะมีโค้ด C/C++ ที่นักพัฒนาซอฟต์แวร์ไม่ได้รับอนุญาตให้ติดตั้งใช้งานในระบบคลาวด์ และไลบรารีเหล่านี้จะไม่มีให้บริการในรันไทม์รุ่นที่ 2 อีกต่อไป
- คุณไม่จำเป็นต้องคัดลอกไลบรารีที่ไม่ได้บิลต์อิน (บางครั้งเรียกว่า "การจัดหา" หรือ "การรวมด้วยตนเอง") ในรันไทม์รุ่นที่ 2 อีกต่อไป แต่ควรระบุไว้ใน
requirements.txtซึ่งระบบบิลด์จะติดตั้งโดยอัตโนมัติในนามของคุณเมื่อถึงเวลาที่ต้องติดตั้งใช้งาน
การเปลี่ยนแปลงการจัดการแพ็กเกจของบุคคลที่สามดังกล่าวทำให้ไม่จำเป็นต้องใช้ทั้งไฟล์ appengine_config.py และโฟลเดอร์ lib ดังนั้นให้ลบออก ในรันไทม์รุ่นที่ 2 App Engine จะติดตั้งแพ็กเกจของบุคคลที่สามที่ระบุไว้ใน requirements.txt โดยอัตโนมัติ การสรุป
- ไม่มีไลบรารีของบุคคลที่สามที่รวมไว้เองหรือคัดลอกมา ให้ระบุไว้ใน
requirements.txt - ห้าม
pip installลงในโฟลเดอร์libซึ่งหมายความว่าห้ามมีโฟลเดอร์lib - ไม่มีไลบรารีของบุคคลที่สามในตัวสำหรับรายการ (จึงไม่มีส่วน
libraries) ในapp.yamlให้แสดงรายการในrequirements.txt - การไม่มีไลบรารีของบุคคลที่สามเพื่ออ้างอิงจากแอปหมายความว่าไม่มีไฟล์
appengine_config.py
การระบุไลบรารีของบุคคลที่สามที่ต้องการทั้งหมดใน requirements.txt เป็นข้อกำหนดเดียวสำหรับนักพัฒนาแอป
อัปเดตแอปพลิเคชันเพื่อใช้ App Engine SDK
ดังที่กล่าวไว้ข้างต้น แอป Python 3 ต้องมีการแก้ไขบางอย่างเพื่อเข้าถึงบริการ App Engine แบบรวมกลุ่ม
- รวม App Engine SDK (ใน
requirements.txt) - เปิดใช้งาน App Engine SDK (ใน
app.yaml) - Wrap WSGI object (ใน
main.py)
คู่แรกเสร็จสมบูรณ์แล้วข้างต้น ดังนั้นข้อกำหนดสุดท้ายคือการอัปเดต main.py
ก่อน:
ด้านล่างนี้คือ Python 2 main.py เมื่อสิ้นสุดโมดูลที่ 12
from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb
app = Flask(__name__)
HOUR = 3600
หลังจากนั้น
สําหรับพอร์ต Python 3 ให้นําเข้า SDK และห่อออบเจ็กต์แอป Flask ด้วย (Wrapper ของ SDK) ซึ่งจะส่งผลให้เกิดสิ่งต่อไปนี้
from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb
app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600
นักพัฒนาแอปต้องทำการเปลี่ยนแปลงเหล่านี้กับแอป Python เมื่อพอร์ตจาก 2.x เป็น 3.x เพื่อเข้าถึงบริการที่รวมไว้ หากไม่ได้ใช้ Flask ก็มีตัวอย่าง Django และ Pyramid ในเอกสารด้วย หากโค้ด Python 2 ไม่ใช่เว็บแอป การรวมแพ็กเกจ SDK ก็เพียงพอแล้วเมื่อพอร์ตไปยัง Python 3 โค้ดแอปพลิเคชันของเราได้รับการออกแบบมาให้ทำงานภายใต้ Python 2 และ 3 ตั้งแต่แรก จึงไม่จำเป็นต้องทำการเปลี่ยนแปลงความเข้ากันได้เพิ่มเติม
ติดตั้งใช้งานแอปพลิเคชัน
หลังจากทำการเปลี่ยนแปลงข้างต้นเสร็จแล้ว คุณจะทำให้แอปตัวอย่างที่อัปเดตใช้งานได้ (ไม่มีปัญหาเมื่อทำให้แอปเวอร์ชัน Python 3 ใช้งานได้แทนที่แอปเวอร์ชัน Python 2 เดิมในโปรเจ็กต์ GCP เดียวกัน) ลักษณะการทำงานของแอปควรจะยังคงเหมือนเดิม หากต้องการเปรียบเทียบแอปที่อัปเดตแล้วกับแอปของเรา โปรดดูโฟลเดอร์ Module 12b ในที่เก็บการย้ายข้อมูล ดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับบริการ App Engine แบบรวมในรันไทม์ล่าสุด เช่น Python 3 ได้ที่ประกาศการเปิดตัวฟีเจอร์และ Codelab โมดูลที่ 17
ขอแสดงความยินดีที่คุณทำขั้นตอนโบนัสในโมดูลที่ 12 เสร็จแล้ว นอกจากนี้ โปรดดูเอกสารประกอบเกี่ยวกับการเตรียมไฟล์การกำหนดค่าสำหรับรันไทม์ Python 3 ด้วย ดูส่วนสรุป/การล้างข้อมูลด้านบนเพื่อดูขั้นตอนถัดไปและการล้างข้อมูล
8. แหล่งข้อมูลเพิ่มเติม
ด้านล่างนี้คือแหล่งข้อมูลเพิ่มเติมสำหรับนักพัฒนาแอปที่ต้องการสำรวจโมดูลการย้ายข้อมูลนี้หรือโมดูลที่เกี่ยวข้อง รวมถึงผลิตภัณฑ์ที่เกี่ยวข้องเพิ่มเติม ซึ่งรวมถึงส่วนที่ให้ความคิดเห็นเกี่ยวกับเนื้อหานี้ ลิงก์ไปยังโค้ด และเอกสารต่างๆ ที่คุณอาจเห็นว่ามีประโยชน์
ปัญหา/ความคิดเห็นเกี่ยวกับ Codelab
หากพบปัญหาเกี่ยวกับ Codelab นี้ โปรดค้นหาปัญหาของคุณก่อนที่จะยื่นเรื่อง ลิงก์สำหรับค้นหาและสร้างปัญหาใหม่
แหล่งข้อมูลเกี่ยวกับการย้ายข้อมูล
คุณจะเห็นลิงก์ไปยังโฟลเดอร์ที่เก็บสำหรับโมดูลที่ 2 (START) และโมดูลที่ 12 (FINISH) ในตารางด้านล่าง นอกจากนี้ คุณยังเข้าถึงได้จากที่เก็บสำหรับการย้ายข้อมูล Codelab ของ App Engine ทั้งหมด ซึ่งคุณสามารถโคลนหรือดาวน์โหลดไฟล์ ZIP ได้
Codelab | Python 2 | Python 3 |
โค้ด (ไม่ได้กล่าวถึงในบทแนะนำนี้) | ||
โมดูล 12 (Codelab นี้) |
ข้อมูลอ้างอิงออนไลน์
ด้านล่างนี้คือแหล่งข้อมูลออนไลน์ที่อาจเกี่ยวข้องกับบทแนะนำนี้
App Engine
- เอกสารประกอบของ App Engine
- รันไทม์ของ App Engine (สภาพแวดล้อมมาตรฐาน) สำหรับ Python 2
- รันไทม์ Python 3 App Engine (สภาพแวดล้อมมาตรฐาน)
- ความแตกต่างระหว่างรันไทม์ของ Python 2 และ 3 ใน App Engine (สภาพแวดล้อมมาตรฐาน)
- คู่มือการย้ายข้อมูลจาก Python 2 ไปยัง 3 ใน App Engine (สภาพแวดล้อมมาตรฐาน)
- ข้อมูลราคาและโควต้าของ App Engine
- เปิดตัวแพลตฟอร์ม App Engine รุ่นที่ 2 (2018)
- การเปรียบเทียบแพลตฟอร์มรุ่นที่ 1 และรุ่นที่ 2
- การสนับสนุนรันไทม์เวอร์ชันเดิมในระยะยาว
- ที่เก็บตัวอย่างการย้ายข้อมูลเอกสารประกอบ
- ที่เก็บตัวอย่างการย้ายข้อมูลที่ชุมชนมีส่วนร่วม
Cloud Memorystore และ Cloud Datastore
- หน้าผลิตภัณฑ์ Cloud Memorystore
- เอกสารประกอบของ Cloud Memorystore สำหรับ Redis
- เอกสารประกอบของ Cloud Memorystore for Memcached
- ข้อมูลการกำหนดราคา Cloud Memorystore (สำหรับ Redis)
- เอกสารประกอบของ Cloud Datastore
- ข้อมูลราคาของ Cloud Datastore
ข้อมูลอื่นๆ เกี่ยวกับระบบคลาวด์
- Python ใน Google Cloud Platform
- ไลบรารีของไคลเอ็นต์ Python สำหรับ Google Cloud
- ระดับ "ฟรีตลอด" ของ Google Cloud
- Google Cloud SDK (
gcloudเครื่องมือบรรทัดคำสั่ง) - เอกสารประกอบทั้งหมดของ Google Cloud
วิดีโอ
- Serverless Migration Station
- Expeditions แบบ Serverless
- ติดตาม Google Cloud Tech
- ติดตาม Google Developers
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป