โมดูล 6: ย้ายข้อมูลจาก Cloud Datastore ไปยัง Cloud Firestore

1. ภาพรวม

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

ผู้ใช้ App Engine ที่เข้าถึงพื้นที่เก็บข้อมูลด้วยไลบรารีของไคลเอ็นต์ Cloud NDB หรือ Cloud Datastore สามารถใช้งานได้ดี และไม่ต้องย้ายข้อมูลเพิ่มเติม อย่างไรก็ตาม Cloud Firestore แสดงถึงที่เก็บข้อมูล NoSQL ล่าสุดที่มีความพร้อมใช้งานสูงและรองรับการปรับขนาด ซึ่งมาพร้อมฟีเจอร์จากฐานข้อมูลแบบเรียลไทม์ของ Firebase

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

คุณจะได้เรียนรู้วิธีการ

  • จดจำความแตกต่างระหว่าง Datastore และ Firestore
  • ย้ายข้อมูลจาก Cloud Datastore ไปยัง Cloud Firestore

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

แบบสำรวจ

คุณจะใช้ Codelab นี้อย่างไร

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

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

Datastore ของ App Engine ได้กลายมาเป็นผลิตภัณฑ์ของตัวเองในปี 2013 ซึ่งก็คือ Google Cloud Datastore และตอนนี้นักพัฒนาซอฟต์แวร์ภายนอก App Engine ก็สามารถเข้าถึงได้แล้ว ในปีต่อมา Google ก็เข้าซื้อกิจการ Firebase ในเวลานั้นอุปกรณ์เครื่องนี้เป็นที่รู้จักจากฐานข้อมูลแบบเรียลไทม์

ในช่วง 2-3 ปีข้างหน้า ทีม Firebase และ Cloud Datastore ได้ทำการผสานรวมฟีเจอร์บางอย่างของ Firebase ไว้ใน Datastore ด้วยเหตุนี้ ระบบจึงเปิดตัว Cloud Datastore รุ่นใหม่ในปี 2017 จึงได้รีแบรนด์เป็น Cloud Firestore เพื่อให้สอดคล้องกับบางฟีเจอร์ของ Firebase

Cloud Firestore กลายเป็นกลไกพื้นที่เก็บข้อมูล NoSQL เริ่มต้นสำหรับโปรเจ็กต์ Google Cloud แอปใหม่สามารถใช้ Cloud Firestore แบบดั้งเดิมได้ ในขณะที่ฐานข้อมูล Datastore ที่มีอยู่ได้รับการแปลงเป็น Firestore ขั้นสูงโดยใช้งานเป็น "Firestore ในโหมด Datastore" แล้ว เพื่อรักษาความเข้ากันได้กับการดำเนินการของ Datastore ด้วยเหตุนี้ แอปพลิเคชันจะทำงานได้บน Cloud Firestore ในโหมดใดโหมดหนึ่งเท่านั้น และเมื่อตั้งค่าแล้วจะไม่สามารถเปลี่ยนแปลงได้

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

การย้ายข้อมูลนี้ไม่ใช่การย้ายข้อมูลที่เราคาดหวังให้ผู้ใช้ดำเนินการ ซึ่งเป็นเหตุผลที่ทำให้การย้ายข้อมูลนี้เป็นแบบไม่บังคับ แม้ว่าการใช้ Cloud Firestore เป็นหลักจะมีข้อดีที่เห็นได้ชัด เช่น การตรวจสอบสิทธิ์ไคลเอ็นต์ การผสานรวมกฎของ Firebase และแน่นอนว่าการใช้ฐานข้อมูลแบบเรียลไทม์ของ Firebase แต่ขั้นตอนการย้ายข้อมูลนั้น "ไม่สะดวก"

  • คุณต้องใช้โปรเจ็กต์อื่นที่โปรเจ็กต์ของแอปปัจจุบัน
  • โปรเจ็กต์ที่แอปเพิ่มเอนทิตี Datastore ไว้ไม่สามารถเปลี่ยนเป็น Firestore ในโหมดดั้งเดิมได้
  • ในทำนองเดียวกัน โปรเจ็กต์ที่เลือก Firestore ในโหมดดั้งเดิมจะเปลี่ยนกลับไปเป็น Firestore ในโหมด Datastore ไม่ได้
  • ไม่มีเครื่องมือย้ายข้อมูลที่สตรีมข้อมูลจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์หนึ่งได้
  • ฟีเจอร์สำคัญบางอย่างใน Datastore รวมถึงเนมสเปซและอัตราการส่งข้อมูลการเขียนที่สูงขึ้น (>10k/วินาที) ไม่มีให้ใช้งานจาก Firestore
  • เครื่องมือส่งออกและนำเข้าเป็น "พื้นฐาน" และ "ทั้งหมดหรือไม่มีอะไร" สถานการณ์
    • หากแอปมีเอนทิตี Datastore หลายรายการ อาจใช้เวลาหลายชั่วโมงในการส่งออกแล้วนำเข้าไปยัง Firestore
    • ในระหว่างนี้ แอปพลิเคชัน/บริการของคุณจะไม่สามารถเขียน/อัปเดตข้อมูลได้
    • กิจกรรมการย้ายข้อมูลจะนับรวมอยู่ในการใช้งานปกติ คุณอาจต้องกระจายค่าใช้จ่าย (ให้ครอบคลุมโควต้ารายวันหากเป็นไปได้) เพื่อลดค่าใช้จ่าย
    • เนื่องจากบริการใหม่ทำงานในโปรเจ็กต์อื่น คุณจะต้องมีหน้าต่างเพื่อให้การอัปเดต DNS เผยแพร่
  • Datastore และ Firestore มีรูปแบบข้อมูลที่คล้ายกันแต่แตกต่างกัน การย้ายข้อมูลจึงต้องอัปเดตวิธีการทำงานของแอป/บริการ
    • การค้นหาระดับบนจาก Datastore เปลี่ยนเป็นการค้นหาคอลเล็กชันของ Firestore (ค่าเริ่มต้น) แล้ว
    • การค้นหาประเภทแบบกว้างจาก Datastore คือการค้นหากลุ่มคอลเล็กชันของ Firestore
    • ดัชนีและการจัดการแตกต่างกัน เป็นต้น

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

ผู้ใช้ Python 2: Codelab การย้ายข้อมูลที่ไม่บังคับนี้มีเฉพาะใน Python 3 แต่เนื่องจาก Cloud Firestore รองรับ 2.x ด้วย ผู้ใช้จึงสามารถสรุปความแตกต่างในการใช้งานได้ ตัวอย่างหนึ่งคือระเบียน Firestore ใช้สตริง Unicode (แทนสตริงเป็นไบต์) ดังนั้นจึงต้องมีสัญลักษณ์นำ u'' สำหรับลิเทอรัลสตริง Python 2 ซึ่งหมายความว่าฟังก์ชัน store_visit() ขนาด 2.x จะมีหน้าตาแบบนี้

def store_visit(remote_addr, user_agent):
    doc_ref = fs_client.collection(u'Visit')
    doc_ref.add({
        u'timestamp': datetime.now(),
        u'visitor': u'{}: {}'.format(remote_addr, user_agent),
    })

นอกเหนือจากนั้น ไลบรารีของไคลเอ็นต์ควรทำงานในลักษณะเดียวกัน ปัญหาเดียวที่ต้องพิจารณาก็คือไลบรารี Cloud Firestore 2.x "ถูกตรึง" แต่ตราบใดที่ยังมีการพัฒนา ฟีเจอร์เพิ่มเติม/ใหม่กว่าจะพร้อมใช้งานในไลบรารีของไคลเอ็นต์ Firestore 3.x เท่านั้น

ในการย้ายข้อมูลนี้ ต่อไปนี้คือขั้นตอนหลักของบทแนะนำนี้

  1. การตั้งค่า/งานล่วงหน้า
  2. เพิ่มไลบรารี Cloud Firestore
  3. อัปเดตไฟล์แอปพลิเคชัน

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

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

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

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

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

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

ไม่ว่าคุณจะใช้ของคุณเองหรือของเรา โค้ดโมดูล 3 คือส่วนที่เราจะเริ่มดำเนินการ Codelab ของโมดูล 6 นี้จะแนะนำคุณทีละขั้นตอน และเมื่อดำเนินการเสร็จสมบูรณ์แล้ว โค้ดควรมีลักษณะคล้ายกับโค้ดที่จุด FINISH (บทแนะนำนี้ใช้ได้สำหรับ Python 3 เท่านั้น)

ไดเรกทอรีของไฟล์โมดูล 3 (ของคุณหรือของเรา) ควรมีลักษณะดังนี้

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

3. ทำให้แอปโมดูล 3 ใช้งานได้ (ใหม่)

ขั้นตอนก่อนการทำงานที่เหลือของคุณที่ต้องดำเนินการตอนนี้มีดังนี้

  1. ทำความคุ้นเคยกับเครื่องมือบรรทัดคำสั่ง gcloud (หากจำเป็น)
  2. (อีกครั้ง) ทำให้โค้ดโมดูล 3 ใช้งานได้กับ App Engine (หากจำเป็น)

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

ข้อกำหนดของ Python 2

  • ตรวจสอบว่า app.yaml (ยัง) อ้างอิงแพ็กเกจที่รวมกลุ่มของบุคคลที่สาม: grpcio และ setuptools
  • ตรวจสอบว่า appengine_config.py ยังคงใช้ pkg_resources และ google.appengine.ext.vendor เพื่อชี้แอปไปยังทรัพยากรของบุคคลที่สาม
  • ในส่วนถัดไปที่อัปเดต requirements.txt คุณต้องใช้ google-cloud-firestore==1.9.0 เนื่องจากเวอร์ชันสุดท้ายของไลบรารีไคลเอ็นต์ Python Firestore ที่ใช้ร่วมกับเวอร์ชัน 2.x ได้
    • หาก requirements.txt มีรายการสำหรับ google-cloud-core ให้ปล่อยไว้ตามเดิม
    • ลบ lib และติดตั้งอีกครั้งโดยใช้ pip install -t lib -r requirements.txt

4. อัปเดตไฟล์การกำหนดค่า (เพิ่มไลบรารี Cloud Firestore)

นอกเหนือจากการตั้งค่าแล้ว ขั้นตอนถัดไปที่จำเป็นคือการอัปเดตการกำหนดค่า ตามด้วยไฟล์แอปพลิเคชัน สำหรับอย่างแรก การเปลี่ยนแปลงการกำหนดค่าเพียงอย่างเดียวคือการสลับแพ็กเกจเล็กน้อยในไฟล์ requirements.txt งั้นเรามาเริ่มกันเลย

แทนที่บรรทัด google-cloud-datastore ด้วย google-cloud-firestore ใน requirements.txt เพื่อให้มีลักษณะเช่นนี้

Flask==1.1.2
google-cloud-firestore==2.0.2

เราขอแนะนำให้ใช้ไลบรารีแต่ละรายการในเวอร์ชันล่าสุด หมายเลขเวอร์ชันข้างต้นเป็นเวอร์ชันล่าสุด ณ เวลาที่เขียนบทความนี้ โค้ดในโฟลเดอร์ที่เก็บ FINISH ได้รับการอัปเดตบ่อยขึ้นและอาจมีเวอร์ชันใหม่กว่า

และจะไม่มีการเปลี่ยนแปลงการกําหนดค่าอื่นๆ ดังนั้น app.yaml และ templates/index.html จึงไม่มีการเปลี่ยนแปลงใดๆ

5. อัปเดตไฟล์แอปพลิเคชัน

มีไฟล์แอปพลิเคชันเพียงไฟล์เดียว ซึ่งก็คือ main.py ดังนั้นการเปลี่ยนแปลงทั้งหมดในส่วนนี้จึงมีผลกับไฟล์นั้นเท่านั้น

1. การนำเข้า

การเปลี่ยนการนำเข้าแพ็กเกจจะมีการเปลี่ยนแปลงเล็กน้อยจาก datastore เป็น firestore:

  • ก่อน:
from google.cloud import datastore
  • หลัง:
from google.cloud import firestore

2. สิทธิ์เข้าถึง Firestore

หลังจากเริ่มต้น Flask แล้ว ให้สร้างไคลเอ็นต์ Firestore ทำการเปลี่ยนแปลงที่คล้ายกับข้างต้น แต่สำหรับการเริ่มต้นไคลเอ็นต์ ให้ทำดังนี้

  • ก่อน:
app = Flask(__name__)
ds_client = datastore.Client()
  • หลัง:
app = Flask(__name__)
fs_client = firestore.Client()

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

สำหรับ Datastore คุณจะทำการค้นหาตามประเภทเอนทิตีพร้อมกับเกณฑ์การกรองและการจัดเรียงได้ สำหรับ Firestore ข้อมูลการค้นหาจะคล้ายคลึงกัน เรามาดูตัวอย่างกันสั้นๆ โดยสมมติว่าค่าข้อความค้นหาเหล่านี้คือ ไคลเอ็นต์ (ds_client หรือ fs_client ตามลำดับ) และการนำเข้า

from datetime import datetime
from firestore.Query import DESCENDING

OCT1 = datetime(2020, 10, 1)
LIMIT = 10

สำหรับ Datastore ลองค้นหาเอนทิตี Visit ล่าสุด 10 รายการล่าสุดที่ใหม่กว่าปี 2020 ในวันที่ 1 ตุลาคม 2020 ตามลำดับจากมากไปน้อย

query = ds_client.query(kind='Visit')
query.add_filter('timestamp', '>=', datetime(2020, 10, 1))
query.order = ['-timestamp']
return query.fetch(limit=LIMIT)

ดำเนินการแบบเดียวกันนี้กับ Firestore จากคอลเล็กชัน Visit ได้ดังนี้

query = fs_client.collection('Visit')
query.where('timestamp', '>=', datetime(2020, 10, 1))
query.order_by('timestamp', direction=DESCENDING)
return query.limit(LIMIT).stream()

ตัวอย่างการค้นหาแอปจะง่ายกว่า (ไม่มีวลี "WHERE") ในส่วนของการตรวจสอบ โปรดดูโค้ด Cloud Datastore ดังนี้

  • ก่อน:
def store_visit(remote_addr, user_agent):
    entity = datastore.Entity(key=ds_client.key('Visit'))
    entity.update({
        'timestamp': datetime.now(),
        'visitor': '{}: {}'.format(remote_addr, user_agent),
    })
    ds_client.put(entity)

def fetch_visits(limit):
    query = ds_client.query(kind='Visit')
    query.order = ['-timestamp']
    return query.fetch(limit=limit)

เมื่อย้ายข้อมูลไปยัง Firestore คุณจะสร้างเอกสารใหม่ที่คล้ายกับเอนทิตี และการค้นหาดังที่แสดงข้างต้น

  • หลัง:
def store_visit(remote_addr, user_agent):
    doc_ref = fs_client.collection('Visit')
    doc_ref.add({
        'timestamp': datetime.now(),
        'visitor': '{}: {}'.format(remote_addr, user_agent),
    })

def fetch_visits(limit):
    visits_ref = fs_client.collection('Visit')
    visits = (v.to_dict() for v in visits_ref.order_by('timestamp',
            direction=firestore.Query.DESCENDING).limit(limit).stream())
    return visits

ฟังก์ชันหลัก root() จะยังคงเดิมกับไฟล์เทมเพลต index.html ตรวจสอบการเปลี่ยนแปลงอีกครั้ง บันทึก ทำให้ใช้งานได้ และยืนยัน

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

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

ทำให้แอปใช้งานได้อีกครั้งกับ gcloud app deploy และยืนยันว่าแอปใช้งานได้ ตอนนี้โค้ดของคุณควรตรงกับสิ่งที่อยู่ในที่เก็บโมดูล 6 (หรือเวอร์ชัน 2.x หากคุณต้องการ)

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

แอปvisitme

ขอแสดงความยินดีสำหรับการย้ายข้อมูลโมดูล 6 ที่ไม่บังคับนี้ ซึ่งน่าจะเป็นหนึ่งในการย้ายข้อมูลที่คุณไม่สามารถย้ายข้อมูลได้เท่าที่ App Engine ยังเก็บข้อมูล การย้ายข้อมูลอีกวิธีหนึ่งที่คุณควรพิจารณาคือการปรับแอปให้เป็นคอนเทนเนอร์สำหรับ Cloud Run หากยังไม่ได้ทำ (ดูโมดูล 4 และ 5 Codelab ที่ลิงก์ไว้ด้านล่าง)

ไม่บังคับ: ล้างข้อมูล

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

ไม่บังคับ: ปิดใช้แอป

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

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

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

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

  • โมดูล 7: คิวงานพุชของ App Engine (จำเป็นหากคุณใช้คิวงาน [push])
    • เพิ่มงานพุช taskqueue งานของ App Engine ลงในแอปโมดูล 1
    • เตรียมความพร้อมให้กับผู้ใช้สำหรับการย้ายข้อมูลไปยัง Cloud Tasks ในโมดูล 8
  • โมดูล 4: ย้ายข้อมูลไปยัง Cloud Run ด้วย Docker
    • สร้างคอนเทนเนอร์เพื่อให้แอปทำงานบน Cloud Run ด้วย Docker
    • การย้ายข้อมูลนี้ช่วยให้คุณใช้ Python 2 ต่อไปได้
  • โมดูล 5: ย้ายข้อมูลไปยัง Cloud Run ด้วย Cloud Buildpack
    • สร้างคอนเทนเนอร์เพื่อให้แอปทำงานบน Cloud Run ด้วย Cloud Buildpack
    • คุณไม่จำเป็นต้องทราบเกี่ยวกับ Docker, คอนเทนเนอร์ หรือ Dockerfile
    • ต้องย้ายข้อมูลแอปของคุณไปยัง Python 3 แล้ว (Buildpack ไม่รองรับ Python 2)

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

ปัญหา/ข้อเสนอแนะเกี่ยวกับ Codelab ของโมดูลการย้ายข้อมูล App Engine

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

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

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

Codelab

Python 2

Python 3

โมดูล 3

(รหัส)

รหัส

โมดูล 6

(ไม่มี)

รหัส

ทรัพยากร App Engine

ด้านล่างนี้คือแหล่งข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลครั้งนี้