วิธีใช้คิวงานของ App Engine (งานแบบพุช) ในแอป Flask (โมดูล 7)

1. ภาพรวม

ชุด Codelab ของ Serverless Migration Station (บทแนะนำแบบลงมือปฏิบัติจริงที่ทำตามได้ด้วยตนเอง) และวิดีโอที่เกี่ยวข้องมีจุดมุ่งหมายเพื่อช่วยให้นักพัฒนาแอป Google Cloud แบบไร้เซิร์ฟเวอร์ปรับปรุงแอปพลิเคชันให้ทันสมัยโดยแนะนำการย้ายข้อมูลอย่างน้อย 1 รายการ ซึ่งส่วนใหญ่เป็นการย้ายข้อมูลออกจากบริการเดิม การทำเช่นนี้จะทำให้แอปของคุณพกพาได้มากขึ้น และช่วยให้คุณมีตัวเลือกและความยืดหยุ่นมากขึ้น ซึ่งจะช่วยให้คุณผสานรวมและเข้าถึงผลิตภัณฑ์ระบบคลาวด์ที่หลากหลายยิ่งขึ้น รวมถึงอัปเกรดเป็นภาษาเวอร์ชันใหม่ๆ ได้ง่ายขึ้น แม้ว่าในตอนแรกจะมุ่งเน้นไปที่ผู้ใช้ Cloud รุ่นแรกๆ ซึ่งส่วนใหญ่เป็นนักพัฒนาซอฟต์แวร์ App Engine (สภาพแวดล้อมมาตรฐาน) แต่ชุดข้อมูลนี้ก็ครอบคลุมแพลตฟอร์มแบบไร้เซิร์ฟเวอร์อื่นๆ เช่น Cloud Functions และ Cloud Run หรือที่อื่นๆ หากเกี่ยวข้อง

Codelab นี้จะสอนวิธีใช้งานแบบพุชของคิวงาน App Engine ในแอปตัวอย่างจาก Codelab โมดูลที่ 1 บล็อกโพสต์และวิดีโอของโมดูลที่ 7 จะช่วยเสริมบทแนะนำนี้ โดยจะให้ภาพรวมคร่าวๆ ของเนื้อหาในบทแนะนำนี้

ในโมดูลนี้ เราจะเพิ่มการใช้งานงาน push จากนั้นจะย้ายข้อมูลการใช้งานดังกล่าวไปยัง Cloud Tasks ในโมดูลที่ 8 และย้ายไปยัง Python 3 และ Cloud Datastore ในโมดูลที่ 9 ผู้ที่ใช้คิวงานสำหรับงานดึงจะย้ายข้อมูลไปยัง Cloud Pub/Sub และควรดูโมดูลที่ 18-19 แทน

คุณจะได้เรียนรู้วิธีต่อไปนี้

  • ใช้ API คิวงาน/บริการแบบรวมของ App Engine
  • เพิ่มการใช้งานงานแบบพุชลงในแอป NDB ของ App Engine ที่ใช้ Flask ใน Python 2 แบบพื้นฐาน

สิ่งที่คุณต้องมี

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. ฉากหลัง

คิวงานของ App Engine รองรับทั้งงานแบบพุชและแบบดึง ทีม Google Cloud ขอแนะนำให้ย้ายข้อมูลจากบริการแบบแพ็กเกจเดิม เช่น Task Queue ไปยังบริการอื่นๆ แบบสแตนด์อโลนในระบบคลาวด์หรือบริการเทียบเท่าของบุคคลที่สาม เพื่อปรับปรุงความสามารถในการพกพาของแอปพลิเคชัน

การย้ายข้อมูลงานแบบดึงจะครอบคลุมในโมดูลการย้ายข้อมูล 18-19 ขณะที่โมดูล 7-9 จะเน้นที่การย้ายข้อมูลงานแบบพุช หากต้องการย้ายข้อมูลจากงานแบบพุชของคิวงาน App Engine ให้เพิ่มการใช้งานลงในแอป Flask และ App Engine NDB ที่มีอยู่ซึ่งเป็นผลมาจาก Codelab โมดูลที่ 1 ในแอปดังกล่าว การดูหน้าเว็บใหม่จะบันทึกการเข้าชมใหม่และแสดงการเข้าชมล่าสุดต่อผู้ใช้ เนื่องจากระบบจะไม่แสดงการเข้าชมที่เก่ากว่าอีก และการเข้าชมดังกล่าวจะใช้พื้นที่ใน Datastore เราจึงจะสร้างงานแบบพุชเพื่อลบการเข้าชมที่เก่าที่สุดโดยอัตโนมัติ ในโมดูลที่ 8 เราจะย้ายข้อมูลแอปดังกล่าวจากคิวงานไปยัง Cloud Tasks

บทแนะนำนี้มีขั้นตอนต่อไปนี้

  1. การตั้งค่า/การเตรียมการ
  2. อัปเดตการกำหนดค่า
  3. แก้ไขโค้ดแอปพลิเคชัน

3. การตั้งค่า/การเตรียมการ

ส่วนนี้จะอธิบายวิธี

  1. ตั้งค่าโปรเจ็กต์ Cloud
  2. รับแอปตัวอย่างพื้นฐาน
  3. (อีกครั้ง) นำไปใช้งานและตรวจสอบแอปพื้นฐาน

ขั้นตอนเหล่านี้จะช่วยให้คุณเริ่มต้นด้วยโค้ดที่ใช้งานได้

1. ตั้งค่าโปรเจ็กต์

หากคุณทำ Codelab โมดูลที่ 1 เสร็จแล้ว เราขอแนะนำให้ใช้โปรเจ็กต์ (และโค้ด) เดียวกันนั้นซ้ำ หรือจะสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์อื่นที่มีอยู่ซ้ำก็ได้ ตรวจสอบว่าโปรเจ็กต์มีบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่และเปิดใช้ App Engine แล้ว

2. รับแอปตัวอย่างพื้นฐาน

ข้อกำหนดเบื้องต้นอย่างหนึ่งของ Codelab นี้คือการมีแอป App Engine ของโมดูล 1 ที่ใช้งานได้ ให้ทำตาม Codelab โมดูล 1 (แนะนำ) หรือคัดลอกแอปโมดูล 1 จากที่เก็บ ไม่ว่าคุณจะใช้โค้ดของคุณเองหรือโค้ดของเรา โค้ดโมดูล 1 คือจุดที่เราจะ "เริ่มต้น" Codelab นี้จะแนะนำแต่ละขั้นตอนให้คุณ โดยจะจบด้วยโค้ดที่คล้ายกับโค้ดในโฟลเดอร์ "FINISH" ของที่เก็บโมดูลที่ 7

ไม่ว่าคุณจะใช้แอป Module 1 ใด โฟลเดอร์ควรมีลักษณะดังต่อไปนี้ และอาจมีโฟลเดอร์ lib ด้วย

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

3. (อีกครั้ง) ทำให้แอปพื้นฐานใช้งานได้

ทำตามขั้นตอนต่อไปนี้เพื่อ (อีกครั้ง) ทำให้แอปโมดูล 1 ใช้งานได้

  1. ลบโฟลเดอร์ lib หากมี แล้วเรียกใช้ pip install -t lib -r requirements.txt เพื่อสร้าง lib ใหม่ คุณอาจต้องใช้คำสั่ง pip2 แทนหากติดตั้งทั้ง Python 2 และ 3
  2. ตรวจสอบว่าคุณได้ติดตั้งและเริ่มต้นเครื่องมือบรรทัดคำสั่ง gcloud และตรวจสอบการใช้งานแล้ว
  3. ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์ด้วย gcloud config set project PROJECT_ID หากไม่ต้องการป้อน PROJECT_ID ทุกครั้งที่ออกคำสั่ง gcloud
  4. ทำให้แอปตัวอย่างใช้งานได้ด้วย gcloud app deploy
  5. ยืนยันว่าแอปโมดูล 1 ทำงานได้ตามที่คาดไว้โดยไม่มีปัญหาในการแสดงการเข้าชมล่าสุด (ดังภาพด้านล่าง)

a7a9d2b80d706a2b.png

4. อัปเดตการกำหนดค่า

ไม่จำเป็นต้องเปลี่ยนแปลงไฟล์การกำหนดค่า App Engine มาตรฐาน (app.yaml, requirements.txt, appengine_config.py)

5. แก้ไขไฟล์แอปพลิเคชัน

ไฟล์แอปพลิเคชันหลักคือ main.py และการอัปเดตทั้งหมดในส่วนนี้เกี่ยวข้องกับไฟล์ดังกล่าว นอกจากนี้ เรายังได้อัปเดตเทมเพลตเว็บ templates/index.html เล็กน้อยด้วย การเปลี่ยนแปลงที่ต้องดำเนินการในส่วนนี้มีดังนี้

  1. อัปเดตการนำเข้า
  2. เพิ่มงานพุช
  3. เพิ่มตัวแฮนเดิลงาน
  4. อัปเดตเทมเพลตเว็บ

1. อัปเดตการนำเข้า

การนำเข้า google.appengine.api.taskqueue จะนำฟังก์ชันคิวของงานเข้ามา นอกจากนี้ ยังต้องใช้แพ็กเกจไลบรารีมาตรฐานของ Python บางแพ็กเกจด้วย

  • เนื่องจากเราจะเพิ่มงานเพื่อลบการเข้าชมที่เก่าที่สุด แอปจึงต้องจัดการกับการประทับเวลา ซึ่งหมายถึงการใช้ time และ datetime
  • เราต้องมี logging เพื่อบันทึกข้อมูลที่เป็นประโยชน์เกี่ยวกับการดำเนินการงาน

เมื่อเพิ่มการนำเข้าทั้งหมดเหล่านี้แล้ว โค้ดของคุณจะมีลักษณะดังนี้ก่อนและหลังการเปลี่ยนแปลงเหล่านี้

ก่อน:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

หลังจากนั้น

from datetime import datetime
import logging
import time
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb

2. เพิ่มงานแบบพุช (รวบรวมข้อมูลสำหรับงาน จัดคิวงานใหม่)

เอกสารประกอบของคิวแบบพุชระบุว่า "หากต้องการประมวลผลงาน คุณต้องเพิ่มงานนั้นลงในคิวแบบพุช App Engine มีคิวแบบพุชเริ่มต้นชื่อ default ซึ่งได้รับการกำหนดค่าและพร้อมใช้งานกับการตั้งค่าเริ่มต้น หากต้องการ คุณก็เพิ่มงานทั้งหมดลงในคิวเริ่มต้นได้เลยโดยไม่ต้องสร้างและกำหนดค่าคิวอื่นๆ" Codelab นี้ใช้คิว default เพื่อความกระชับ ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดคิวแบบพุชของคุณเองที่มีลักษณะเหมือนกันหรือแตกต่างกันได้ที่เอกสารประกอบเกี่ยวกับการสร้างคิวแบบพุช

เป้าหมายหลักของ Codelab นี้คือการเพิ่มงาน (ไปยังdefaultคิวแบบพุช) ซึ่งมีหน้าที่ลบการเข้าชมเก่าออกจาก Datastore ที่ไม่ได้แสดงอีกต่อไป แอปพื้นฐานจะบันทึกการเข้าชมแต่ละครั้ง (GET คำขอไปยัง /) โดยการสร้างเอนทิตี Visit ใหม่ จากนั้นจะดึงและแสดงการเข้าชมล่าสุด ระบบจะไม่แสดงหรือใช้การเข้าชมที่เก่าที่สุดอีกต่อไป ดังนั้นงานพุชจะลบการเข้าชมทั้งหมดที่เก่ากว่าการเข้าชมที่เก่าที่สุดที่แสดง ในการดำเนินการนี้ คุณจะต้องเปลี่ยนลักษณะการทำงานของแอปเล็กน้อย ดังนี้

  1. เมื่อค้นหาการเข้าชมล่าสุด ให้แก้ไขแอปเพื่อบันทึกการประทับเวลาของ Visit ล่าสุด ซึ่งเป็นรายการที่เก่าที่สุดที่แสดง แทนที่จะแสดงการเข้าชมเหล่านั้นทันที คุณสามารถลบการเข้าชมทั้งหมดที่เก่ากว่านี้ได้
  2. สร้างงานพุชโดยใช้การประทับเวลาเป็นเพย์โหลด และส่งไปยังเครื่องจัดการงานที่เข้าถึงได้ผ่าน HTTP POST ไปยัง /trim โดยเฉพาะอย่างยิ่ง ให้ใช้ยูทิลิตี Python มาตรฐานเพื่อแปลงการประทับเวลา Datastore และส่ง (เป็น Float) ไปยังงาน แต่ก็บันทึก (เป็นสตริง) และส่งคืนสตริงนั้นเป็นค่า Sentinel เพื่อแสดงต่อผู้ใช้ด้วย

การดำเนินการทั้งหมดนี้เกิดขึ้นใน fetch_visits() และลักษณะของฟีเจอร์ก่อนและหลังการอัปเดตมีดังนี้

ก่อน:

def fetch_visits(limit):
    return (v.to_dict() for v in Visit.query().order(
            -Visit.timestamp).fetch(limit))

หลังจากนั้น

def fetch_visits(limit):
    'get most recent visits and add task to delete older visits'
    data = Visit.query().order(-Visit.timestamp).fetch(limit)
    oldest = time.mktime(data[-1].timestamp.timetuple())
    oldest_str = time.ctime(oldest)
    logging.info('Delete entities older than %s' % oldest_str)
    taskqueue.add(url='/trim', params={'oldest': oldest})
    return (v.to_dict() for v in data), oldest_str

3. เพิ่มตัวแฮนเดิลงาน (โค้ดที่เรียกใช้เมื่อมีการเรียกใช้งาน)

แม้ว่าการลบการเข้าชมเก่าจะทำได้ง่ายใน fetch_visits() แต่โปรดทราบว่าฟังก์ชันนี้ไม่ได้เกี่ยวข้องกับผู้ใช้ปลายทางมากนัก เป็นฟังก์ชันเสริมและเป็นตัวเลือกที่ดีในการประมวลผลแบบไม่พร้อมกันนอกคำขอแอปมาตรฐาน ผู้ใช้ปลายทางจะได้รับประโยชน์จากคำค้นหาที่เร็วขึ้นเนื่องจากจะมีข้อมูลใน Datastore น้อยลง สร้างฟังก์ชันใหม่ trim() ที่เรียกใช้ผ่านคำขอ Task Queue POST ไปยัง /trim ซึ่งจะทำสิ่งต่อไปนี้

  1. ดึงข้อมูลเพย์โหลดการประทับเวลา "การเข้าชมที่เก่าที่สุด"
  2. ออกการค้นหา Datastore เพื่อค้นหาเอนทิตีทั้งหมดที่เก่ากว่าการประทับเวลานั้น
  3. เลือกใช้การค้นหา "คีย์เท่านั้น" ที่เร็วกว่าเนื่องจากไม่จำเป็นต้องใช้ข้อมูลผู้ใช้จริง
  4. บันทึกจำนวนเอนทิตีที่จะลบ (รวมถึง 0)
  5. เรียกใช้ ndb.delete_multi() เพื่อลบเอนทิตี (ข้ามหากไม่มี)
  6. แสดงผลสตริงว่าง (พร้อมกับรหัสการคืนค่า HTTP 200 โดยนัย)

คุณดูข้อมูลทั้งหมดได้ใน trim() ด้านล่าง เพิ่มลงใน main.py หลัง fetch_visits() ดังนี้

@app.route('/trim', methods=['POST'])
def trim():
    '(push) task queue handler to delete oldest visits'
    oldest = request.form.get('oldest', type=float)
    keys = Visit.query(
            Visit.timestamp < datetime.fromtimestamp(oldest)
    ).fetch(keys_only=True)
    nkeys = len(keys)
    if nkeys:
        logging.info('Deleting %d entities: %s' % (
                nkeys, ', '.join(str(k.id()) for k in keys)))
        ndb.delete_multi(keys)
    else:
        logging.info('No entities older than: %s' % time.ctime(oldest))
    return ''   # need to return SOME string w/200

4. อัปเดตเทมเพลตเว็บ

อัปเดตเทมเพลตเว็บ templates/index.html ด้วยเงื่อนไข Jinja2 นี้เพื่อแสดงการประทับเวลาที่เก่าที่สุดหากมีตัวแปรดังกล่าว

{% if oldest is defined %}
    <b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}

เพิ่มข้อมูลโค้ดนี้หลังจากรายการการเข้าชมที่แสดง แต่ก่อนแท็กปิดเนื้อหาเพื่อให้เทมเพลตมีลักษณะดังนี้

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

{% if oldest is defined %}
    <b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}
</body>
</html>

6. สรุป/ล้างข้อมูล

ส่วนนี้จะสรุป Codelab นี้ด้วยการติดตั้งใช้งานแอป ยืนยันว่าแอปทำงานได้ตามที่ต้องการและในเอาต์พุตที่แสดง หลังจากตรวจสอบแอปแล้ว ให้ล้างข้อมูลและพิจารณาขั้นตอนถัดไป

ทำให้แอปพลิเคชันใช้งานได้และยืนยัน

ทําให้แอปใช้งานได้ด้วย gcloud app deploy เอาต์พุตควรเหมือนกับแอปโมดูล 1 ยกเว้นบรรทัดใหม่ที่ด้านล่างซึ่งแสดงการเข้าชมที่จะถูกลบ

4aa8a2cb5f527079.png

ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์ ตอนนี้โค้ดของคุณควรตรงกับโค้ดในโฟลเดอร์ที่เก็บโมดูล 7 ตอนนี้คุณพร้อมที่จะย้ายข้อมูลไปยัง Cloud Tasks ในโมดูลที่ 8 แล้ว

ล้างข้อมูล

ทั่วไป

หากคุณดำเนินการเสร็จแล้วในตอนนี้ เราขอแนะนำให้ปิดใช้แอป 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/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • ลิงก์พื้นที่เก็บข้อมูลด้านบนจะขึ้นอยู่กับPROJECT_IDและ *LOC*ation ของคุณ เช่น "us" หากแอปโฮสต์อยู่ในสหรัฐอเมริกา

ในทางกลับกัน หากคุณจะไม่ดำเนินการต่อกับแอปพลิเคชันนี้หรือ Codelab การย้ายข้อมูลอื่นๆ ที่เกี่ยวข้อง และต้องการลบทุกอย่างออกทั้งหมด ให้ปิดโปรเจ็กต์

เฉพาะสำหรับ Codelab นี้

บริการที่ระบุไว้ด้านล่างเป็นบริการเฉพาะสำหรับโค้ดแล็บนี้ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของแต่ละผลิตภัณฑ์

ขั้นตอนถัดไป

ในการ "ย้ายข้อมูล" นี้ คุณได้เพิ่มการใช้งานคิวแบบพุชของคิวงานลงในแอปตัวอย่างของโมดูลที่ 1 ซึ่งเป็นการเพิ่มการรองรับการติดตามผู้เข้าชม จึงทำให้เกิดแอปตัวอย่างของโมดูลที่ 7 การย้ายข้อมูลครั้งถัดไปจะสอนวิธีอัปเกรดจากงานแบบพุชของ App Engine เป็น Cloud Tasks ในกรณีที่คุณเลือกที่จะทำเช่นนั้น ตั้งแต่ช่วงฤดูใบไม้ร่วงปี 2021 เป็นต้นมา ผู้ใช้ไม่จำเป็นต้องย้ายข้อมูลไปยัง Cloud Tasks เมื่ออัปเกรดเป็น Python 3 อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในส่วนถัดไป

หากต้องการย้ายไปใช้ Cloud Tasks ให้ไปที่Codelab โมดูลที่ 8 นอกจากนี้ ยังมีการย้ายข้อมูลเพิ่มเติมที่ควรพิจารณา เช่น Cloud Datastore, Cloud Memorystore, Cloud Storage หรือ Cloud Pub/Sub (คิวแบบดึง) นอกจากนี้ยังมีการย้ายข้อมูลข้ามผลิตภัณฑ์ไปยัง Cloud Run และ Cloud Functions ด้วย คุณเข้าถึงเนื้อหาทั้งหมดของ Serverless Migration Station (Codelab, วิดีโอ, ซอร์สโค้ด [หากมี]) ได้ที่ที่เก็บแบบโอเพนซอร์ส

7. การย้ายข้อมูลไปยัง Python 3

ในฤดูใบไม้ร่วงปี 2021 ทีม App Engine ได้ขยายการรองรับบริการแบบรวมหลายรายการไปยังรันไทม์รุ่นที่ 2 (เดิมมีให้บริการเฉพาะในรันไทม์รุ่นที่ 1) ซึ่งหมายความว่าคุณไม่จำเป็นต้องย้ายข้อมูลจากบริการแบบรวม เช่น คิวงานของ App Engine ไปยัง Cloud แบบสแตนด์อโลนหรือบริการเทียบเท่าของบุคคลที่สาม เช่น Cloud Tasks เมื่อพอร์ตแอปไปยัง Python 3 กล่าวคือ คุณยังคงใช้คิวงานในแอป Python 3 App Engine ได้ตราบใดที่คุณปรับโค้ดให้เข้าถึงบริการที่รวมไว้จากรันไทม์รุ่นถัดไป

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีย้ายข้อมูลการใช้งานบริการที่รวมไว้ไปยัง Python 3 ได้ใน Codelab โมดูลที่ 17 และวิดีโอที่เกี่ยวข้อง แม้ว่าหัวข้อดังกล่าวจะอยู่นอกขอบเขตของโมดูลที่ 7 แต่เราได้ลิงก์แอปทั้งในโมดูลที่ 1 และ 7 เวอร์ชัน Python 3 ไว้ด้านล่าง ซึ่งพอร์ตไปยัง Python 3 และยังคงใช้ NDB ของ App Engine และคิวงาน

8. แหล่งข้อมูลเพิ่มเติม

ด้านล่างนี้คือแหล่งข้อมูลเพิ่มเติมสำหรับนักพัฒนาแอปที่ต้องการสำรวจโมดูลการย้ายข้อมูลนี้หรือโมดูลที่เกี่ยวข้อง รวมถึงผลิตภัณฑ์ที่เกี่ยวข้องเพิ่มเติม ซึ่งรวมถึงส่วนที่ให้ความคิดเห็นเกี่ยวกับเนื้อหานี้ ลิงก์ไปยังโค้ด และเอกสารต่างๆ ที่คุณอาจเห็นว่ามีประโยชน์

ปัญหา/ความคิดเห็นเกี่ยวกับ Codelab

หากพบปัญหาเกี่ยวกับ Codelab นี้ โปรดค้นหาปัญหาของคุณก่อนที่จะยื่นเรื่อง ลิงก์สำหรับค้นหาและสร้างปัญหาใหม่

แหล่งข้อมูลเกี่ยวกับการย้ายข้อมูล

คุณจะเห็นลิงก์ไปยังโฟลเดอร์ที่เก็บสำหรับโมดูลที่ 2 (START) และโมดูลที่ 7 (FINISH) ในตารางด้านล่าง

Codelab

Python 2

Python 3

โมดูล 1

รหัส

โค้ด (ไม่ได้กล่าวถึงในบทแนะนำนี้)

โมดูล 7 (Codelab นี้)

รหัส

โค้ด (ไม่ได้กล่าวถึงในบทแนะนำนี้)

แหล่งข้อมูลออนไลน์

ด้านล่างนี้คือแหล่งข้อมูลออนไลน์ที่อาจเกี่ยวข้องกับบทแนะนำนี้

คิวงานของ App Engine

แพลตฟอร์ม App Engine

ข้อมูลอื่นๆ เกี่ยวกับระบบคลาวด์

วิดีโอ

ใบอนุญาต

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