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

1. ภาพรวม

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

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

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

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

  • ใช้ API/บริการแพ็กเกจของ App Engine Task Queue
  • เพิ่มการใช้งานงานพุชลงในแอป Python 2 Flask App Engine NDB พื้นฐาน

สิ่งที่ต้องมี

แบบสำรวจ

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

อ่านเท่านั้น อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์การใช้งาน Python อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

คุณจะให้คะแนนความพึงพอใจในการใช้บริการ Google Cloud อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

2. ข้อมูลเบื้องต้น

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

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

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

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

3. การตั้งค่า/งานล่วงหน้า

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

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

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

1. สร้างโปรเจ็กต์

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

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

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

ไม่ว่าคุณจะใช้แอป 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 และส่ง (เป็นแบบลอย) ไปยังงาน แต่ยังบันทึกรายการดังกล่าว (เป็นสตริง) และส่งสตริงนั้นเป็นค่าที่ส่งเพื่อแสดงต่อผู้ใช้

ทั้งหมดนี้เกิดขึ้นใน 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() ซึ่งเรียกใช้ผ่านคำขอของคิวงาน 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 ที่เกี่ยวข้องด้วย ดังนั้นโปรดดูข้อมูลเพิ่มเติมในหน้าราคา หากการย้ายข้อมูลนี้เกี่ยวข้องกับบริการระบบคลาวด์อื่นๆ ระบบจะเรียกเก็บเงินแยกต่างหาก ในทั้ง 2 กรณี หากมี โปรดดูส่วน "เฉพาะสำหรับ 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*ของคุณ เช่น "us" หากแอปของคุณโฮสต์ในสหรัฐอเมริกา

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

เฉพาะสำหรับ 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 (โค้ดแล็บ วิดีโอ ซอร์สโค้ด [หากมี]) ทั้งหมดสามารถเข้าถึงได้ที่ที่เก็บโอเพนซอร์ส

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

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

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

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

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

ปัญหา/ความคิดเห็นของ Codelab

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

ทรัพยากรการย้ายข้อมูล

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

Codelab

Python 2

Python 3

โมดูล 1

รหัส

รหัส (ไม่มีในบทแนะนำนี้)

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

รหัส

รหัส (ไม่มีในบทแนะนำนี้)

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

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

คิวงานของ App Engine

แพลตฟอร์ม App Engine

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

วิดีโอ

ใบอนุญาต

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