1. ภาพรวม
ชุดโปรแกรม Codelab สำหรับการย้ายข้อมูลแบบ Serverless (บทแนะนำแบบลงมือทำด้วยตนเอง) และวิดีโอที่เกี่ยวข้องมีจุดประสงค์เพื่อช่วยให้นักพัฒนาแอป Google Cloud Serverless ปรับการดำเนินการให้ทันสมัยได้ด้วยคำแนะนำการย้ายข้อมูลอย่างน้อย 1 รายการ โดยให้ย้ายออกจากบริการเดิมเป็นหลัก การดำเนินการดังกล่าวทำให้แอปพกพาไปได้ทุกที่ รวมถึงมอบตัวเลือกและความยืดหยุ่นที่มากขึ้น ทำให้สามารถผสานรวมและเข้าถึงผลิตภัณฑ์ Cloud ที่หลากหลายยิ่งขึ้น และอัปเกรดเป็นรุ่นภาษาใหม่ๆ ได้ง่ายยิ่งขึ้น แม้ว่าในช่วงแรกจะมุ่งเน้นที่ผู้ใช้ Cloud รุ่นแรกสุด ซึ่งเป็นนักพัฒนา App Engine (สภาพแวดล้อมมาตรฐาน) เป็นหลัก แต่ชุดโซลูชันนี้ก็กว้างพอที่จะรวมแพลตฟอร์มแบบ Serverless อื่นๆ เช่น Cloud Functions และ Cloud Run หรือแพลตฟอร์มอื่นๆ ที่เกี่ยวข้อง
Codelab นี้จะสอนวิธีรวมและใช้งานดึงคิวงานของ App Engine ไปยังแอปตัวอย่างจาก Codelab ของโมดูล 1 เราเพิ่มการใช้งานงานพุลในบทแนะนำของโมดูล 18 นี้ จากนั้นจึงย้ายข้อมูลการใช้งานดังกล่าวไปยัง Cloud Pub/Sub ไปข้างหน้าในโมดูล 19 ผู้ที่ใช้คิวงานสำหรับงานพุชจะย้ายข้อมูลไปยัง Cloud Tasks แทน และควรอ้างอิงโมดูล 7-9 แทน
คุณจะได้เรียนรู้วิธีต่อไปนี้
- ใช้ API/บริการแพ็กเกจของ App Engine Task Queue
- เพิ่มการใช้พุลคิวลงในแอป Python 2 Flask App Engine NDB พื้นฐาน
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud Platform ที่มีบัญชีสำหรับการเรียกเก็บเงิน GCP ที่ใช้งานอยู่
- ทักษะพื้นฐานเรื่อง Python
- ความรู้เกี่ยวกับคำสั่งทั่วไปของ Linux
- ความรู้พื้นฐานเกี่ยวกับการพัฒนาและการทำให้แอป App Engine ใช้งานได้
- แอป App Engine โมดูล 1 ที่ใช้งานได้ (ดำเนินการ Codelab [แนะนำ] หรือคัดลอกแอปจากที่เก็บ)
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Python อย่างไร
คุณจะให้คะแนนความพึงพอใจในการใช้บริการ Google Cloud อย่างไร
2. ข้อมูลเบื้องต้น
หากต้องการย้ายข้อมูลจากงานพุลคิวงานของ App Engine ให้เพิ่มการใช้งานในแอป Flask และ App Engine NDB ที่มีอยู่ซึ่งเกิดจาก Codelab ของโมดูล 1 แอปตัวอย่างจะแสดงการเข้าชมล่าสุดของผู้ใช้ปลายทาง ก็ไม่เป็นไร แต่ก็ยังน่าสนใจอีก ที่จะติดตามผู้เข้าชมเพื่อดูว่าใครเข้ามามากที่สุดด้วย
แม้ว่าเราจะใช้งานแบบพุชเพื่อนับจำนวนผู้เข้าชมได้ แต่เราก็ต้องการแบ่งความรับผิดชอบระหว่างแอปตัวอย่างที่มีหน้าที่ลงทะเบียนการเข้าชมและตอบกลับผู้ใช้ทันที กับ "ผู้ปฏิบัติงาน" ที่ได้รับมอบหมาย มีหน้าที่รวบรวมจำนวนผู้เข้าชมที่อยู่นอกกระบวนการตอบกลับคำขอปกติ
เพื่อนำการออกแบบนี้ไปใช้ เราจะเพิ่มการใช้พุลคิวลงในแอปพลิเคชันหลัก รวมถึงสนับสนุนฟังก์ชันสำหรับผู้ปฏิบัติงาน ผู้ปฏิบัติงานสามารถเรียกใช้เป็นกระบวนการแยกต่างหาก (เช่น อินสแตนซ์แบ็กเอนด์หรือโค้ดที่ทํางานบน VM ที่อัปเดตอยู่เสมอ) งาน cron หรือคำขอ HTTP บรรทัดคำสั่งพื้นฐานโดยใช้ curl
หรือ wget
หลังจากการผสานรวมนี้แล้ว คุณจะย้ายข้อมูลแอปไปยัง Cloud Pub/Sub ได้ใน Codelab ถัดไป (โมดูล 19)
บทแนะนำนี้มีขั้นตอนต่อไปนี้
- การตั้งค่า/งานล่วงหน้า
- อัปเดตการกำหนดค่า
- แก้ไขโค้ดของแอปพลิเคชัน
3. การตั้งค่า/งานล่วงหน้า
ส่วนนี้จะอธิบายวิธี:
- ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์
- รับแอปตัวอย่างพื้นฐาน
- (อีกครั้ง) ติดตั้งใช้งานและตรวจสอบแอปพื้นฐาน
ขั้นตอนเหล่านี้จะช่วยให้มั่นใจว่าคุณกำลังเริ่มต้นด้วยโค้ดที่ใช้งานได้
1. สร้างโปรเจ็กต์
หากคุณทำ Codelab โมดูล 1 เสร็จแล้ว ให้ใช้โปรเจ็กต์ (และโค้ด) เดียวกันนั้นซ้ำ หรือสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์อื่นที่มีอยู่ซ้ำ ตรวจสอบว่าโปรเจ็กต์มีบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่และแอป App Engine ที่เปิดใช้แล้ว ค้นหารหัสโปรเจ็กต์เนื่องจากคุณจะต้องใช้รหัสดังกล่าวหลายครั้งใน Codelab นี้และใช้ทุกครั้งที่พบตัวแปร PROJECT_ID
2. รับแอปตัวอย่างพื้นฐาน
ข้อกำหนดเบื้องต้นอย่างหนึ่งของ Codelab นี้คือแอป App Engine โมดูล 1 ที่ใช้งานได้ ทำ Codelab ของโมดูล 1 ให้เสร็จสิ้น (แนะนำ) หรือคัดลอกแอปโมดูล 1 จากที่เก็บ ไม่ว่าคุณจะใช้โค้ดของคุณเองหรือของเรา โค้ดโมดูล 1 คือส่วนที่เราจะ "เริ่ม" Codelab นี้จะแนะนำแต่ละขั้นตอน สรุปด้วยโค้ดที่คล้ายคลึงกับสิ่งที่อยู่ในโฟลเดอร์ที่เก็บโมดูล 18 "FINISH"
- START: โฟลเดอร์โมดูล 1 (Python 2)
- FINISH: โฟลเดอร์โมดูล 18 (Python 2)
- ทั้งที่เก็บ (เพื่อโคลนหรือดาวน์โหลดไฟล์ ZIP)
ไม่ว่าคุณจะใช้แอป Module 1 ใด โฟลเดอร์ควรมีลักษณะตามเอาต์พุตด้านล่าง ซึ่งอาจมีโฟลเดอร์ lib
ด้วยก็ได้
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. (อีกครั้ง) ทำให้แอปพื้นฐานใช้งานได้
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อทำให้แอปโมดูล 1 ใช้งานได้
- ลบโฟลเดอร์
lib
หากมี แล้วเรียกใช้:pip install -t lib -r requirements.txt
เพื่อเติมข้อมูลlib
ใหม่ คุณอาจต้องใช้คำสั่งpip2
แทนหากติดตั้งทั้ง Python 2 และ 3 ไว้ - ตรวจสอบว่าคุณได้ติดตั้งและเริ่มต้นเครื่องมือบรรทัดคำสั่ง
gcloud
และตรวจสอบการใช้งานแล้ว - ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์ด้วย
gcloud config set project
PROJECT_ID
หากไม่ต้องการป้อนPROJECT_ID
ด้วยคำสั่งgcloud
แต่ละคำสั่ง - ทำให้แอปตัวอย่างใช้งานได้ด้วย
gcloud app deploy
- ยืนยันว่าแอปโมดูล 1 ทำงานตามที่คาดไว้และแสดงการเข้าชมล่าสุด (ตามภาพด้านล่าง)
4. อัปเดตการกำหนดค่า
ไม่จำเป็นต้องเปลี่ยนแปลงไฟล์การกำหนดค่า App Engine มาตรฐาน (app.yaml
, requirements.txt
, appengine_config.py
) แต่ให้เพิ่มไฟล์การกำหนดค่า queue.yaml
ใหม่ที่มีเนื้อหาต่อไปนี้แทน และใส่ไว้ในไดเรกทอรีระดับบนสุดเดียวกัน
queue:
- name: pullq
mode: pull
ไฟล์ queue.yaml
ระบุคิวงานทั้งหมดที่มีสำหรับแอปของคุณ (ยกเว้นคิว [push] default
ซึ่ง App Engine สร้างขึ้นโดยอัตโนมัติ) ในกรณีนี้มีเพียงพุลคิวชื่อ pullq
เพียงรายการเดียว App Engine กำหนดให้ต้องระบุคำสั่ง mode
เป็น pull
มิเช่นนั้นแอปจะสร้างพุชคิวโดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างพุลคิวในเอกสารประกอบ ดูตัวเลือกอื่นๆ ที่หน้าอ้างอิง queue.yaml
ติดตั้งใช้งานไฟล์นี้แยกต่างหากจากแอป คุณจะยังคงใช้ gcloud app deploy
แต่ต้องระบุ queue.yaml
ในบรรทัดคำสั่งด้วย
$ gcloud app deploy queue.yaml Configurations to update: descriptor: [/tmp/mod18-gaepull/queue.yaml] type: [task queues] target project: [my-project] WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at https://cloud.google.com/tasks/docs/queue-yaml Do you want to continue (Y/n)? Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location. Updating config [queue]...done. Task queues have been updated. Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs. $
5. แก้ไขโค้ดของแอปพลิเคชัน
ส่วนนี้ประกอบด้วยการอัปเดตไฟล์ต่อไปนี้
main.py
— เพิ่มการใช้พุลคิวลงในแอปพลิเคชันหลักtemplates/index.html
— อัปเดตเทมเพลตเว็บเพื่อแสดงข้อมูลใหม่
การนำเข้าและค่าคงที่
ขั้นตอนแรกคือการเพิ่มการนำเข้าใหม่ 1 รายการและค่าคงที่หลายรายการเพื่อรองรับการดึงคิว ดังนี้
- เพิ่มการนำเข้าของไลบรารีคิวงาน
google.appengine.api.taskqueue
- เพิ่มค่าคงที่ 3 รายการเพื่อรองรับการเช่าจำนวนงานพุลสูงสุด (
TASKS
) เป็นเวลา 1 ชั่วโมง (HOUR
) จากพุลคิว (QUEUE
) - เพิ่มค่าคงที่เพื่อแสดงการเข้าชมล่าสุดและผู้เข้าชมอันดับต้นๆ (
LIMIT
)
ด้านล่างนี้เป็นโค้ดต้นฉบับและลักษณะของโค้ดหลังจากที่ทำการอัปเดตเหล่านี้แล้ว:
ก่อนหน้า:
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 taskqueue
from google.appengine.ext import ndb
HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)
เพิ่มงานพุล (รวบรวมข้อมูลสำหรับงานและสร้างงานในพุลคิว)
โมเดลข้อมูล Visit
จะยังคงเดิม เช่นเดียวกับการค้นหาการเข้าชมที่จะแสดงใน fetch_visits()
การเปลี่ยนแปลงที่จำเป็นในส่วนนี้ของโค้ดมีอยู่ใน store_visit()
นอกจากการลงทะเบียนการเข้าชมแล้ว ให้เพิ่มงานลงในพุลคิวด้วยที่อยู่ IP ของผู้เข้าชม เพื่อให้ผู้ปฏิบัติงานสามารถเพิ่มตัวนับผู้เข้าชมได้
ก่อนหน้า:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
หลัง:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit in Datastore and queue request to bump visitor count'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
สร้างโมเดลข้อมูลและฟังก์ชันการค้นหาสำหรับการติดตามผู้เข้าชม
เพิ่มโมเดลข้อมูล VisitorCount
เพื่อติดตามผู้เข้าชม ควรมีช่องสำหรับ visitor
รวมถึงจำนวนเต็ม counter
เพื่อติดตามจำนวนการเข้าชม จากนั้นเพิ่มฟังก์ชันใหม่ (หรืออาจเป็น Python classmethod
) ที่ตั้งชื่อว่า fetch_counts()
เพื่อค้นหาและแสดงผลผู้เข้าชมสูงสุดตามลำดับจากมากไปน้อย เพิ่มคลาสและฟังก์ชันไว้ด้านล่างเนื้อหาของ fetch_visits()
:
class VisitorCount(ndb.Model):
visitor = ndb.StringProperty(repeated=False, required=True)
counter = ndb.IntegerProperty()
def fetch_counts(limit):
'get top visitors'
return VisitCount.query().order(-VisitCount.counter).fetch(limit)
เพิ่มรหัสผู้ปฏิบัติงาน
เพิ่มฟังก์ชันใหม่ log_visitors()
เพื่อบันทึกผู้เข้าชมผ่านคำขอ GET ไปยัง /log
ใช้พจนานุกรม/แฮชเพื่อติดตามจำนวนผู้เข้าชมล่าสุด โดยแบ่งเบางานต่างๆ ให้มากที่สุดใน 1 ชั่วโมง สำหรับแต่ละงาน ระบบจะนับรวมการเข้าชมทั้งหมดของผู้เข้าชมรายเดียวกัน เมื่อมีรายการนับถอยหลังแล้ว แอปจะอัปเดตเอนทิตี VisitorCount
ที่เกี่ยวข้องทั้งหมดซึ่งมีอยู่แล้วใน Datastore หรือสร้างเอนทิตีใหม่หากจำเป็น ขั้นตอนสุดท้ายจะแสดงข้อความธรรมดาที่ระบุจำนวนผู้เข้าชมที่ลงทะเบียนจากจำนวนงานที่ประมวลผลแล้ว เพิ่มฟังก์ชันนี้ใน main.py
ใต้ fetch_counts()
:
@app.route('/log')
def log_visitors():
'worker processes recent visitor counts and updates them in Datastore'
# tally recent visitor counts from queue then delete those tasks
tallies = {}
tasks = QUEUE.lease_tasks(HOUR, TASKS)
for task in tasks:
visitor = task.payload
tallies[visitor] = tallies.get(visitor, 0) + 1
if tasks:
QUEUE.delete_tasks(tasks)
# increment those counts in Datastore and return
for visitor in tallies:
counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
if not counter:
counter = VisitorCount(visitor=visitor, counter=0)
counter.put()
counter.counter += tallies[visitor]
counter.put()
return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
len(tasks), len(tallies))
อัปเดตตัวแฮนเดิลหลักด้วยข้อมูลที่แสดงใหม่
หากต้องการแสดงผู้เข้าชมอันดับต้นๆ ให้อัปเดตตัวแฮนเดิลหลัก root()
ให้เรียกใช้ fetch_counts()
นอกจากนี้ เทมเพลตจะได้รับการอัปเดตเพื่อแสดงจำนวนผู้เข้าชมสูงสุดและการเข้าชมล่าสุด จัดกลุ่มจำนวนผู้เข้าชมพร้อมกับการเข้าชมล่าสุดจากการโทรมาที่ fetch_visits()
แล้ววางลงใน context
รายการเดียวเพื่อส่งต่อไปยังเทมเพลตเว็บ ด้านล่างนี้เป็นโค้ดก่อนและหลังการเปลี่ยนแปลง
ก่อนหน้า:
@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'
store_visit(request.remote_addr, request.user_agent)
context = {
'limit': LIMIT,
'visits': fetch_visits(LIMIT),
'counts': fetch_counts(LIMIT),
}
return render_template('index.html', **context)
นี่คือการเปลี่ยนแปลงทั้งหมดที่จำเป็นของ main.py
และด้านล่างนี้เป็นภาพประกอบของการอัปเดตเหล่านั้นเพื่อวัตถุประสงค์ในการอธิบายให้คุณเห็นภาพกว้างๆ ของการเปลี่ยนแปลงที่คุณกำลังทำกับ main.py
อัปเดตเทมเพลตเว็บด้วยข้อมูลที่แสดงใหม่
เทมเพลตเว็บ templates/index.html
ต้องอัปเดตเพื่อแสดงผู้เข้าชมอันดับต้นๆ นอกเหนือจากเพย์โหลดปกติของผู้เข้าชมล่าสุด วางผู้เข้าชมอันดับต้นๆ และจํานวนผู้เข้าชมเหล่านั้นลงในตารางที่ด้านบนสุดของหน้า และแสดงการเข้าชมล่าสุดต่อไปตามเดิม การเปลี่ยนแปลงอีกเพียงอย่างเดียวคือการระบุตัวเลขที่แสดงผ่านตัวแปร limit
แทนที่จะฮาร์ดโค้ดหมายเลข การอัปเดตเทมเพลตเว็บที่คุณควรทำมีดังนี้
ก่อนหน้า:
<!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>
หลัง:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
<tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
<tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>
<h3>Last {{ limit }} visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
นี่เป็นการสรุปการเปลี่ยนแปลงที่จำเป็นโดยเพิ่มการใช้งานการดึงคิวงานของ App Engine ลงในแอปตัวอย่างโมดูล 1 ตอนนี้ไดเรกทอรีจะแสดงแอปตัวอย่างโมดูล 18 และควรมีไฟล์เหล่านี้อยู่
$ ls README.md appengine_config.py queue.yaml templates app.yaml main.py requirements.txt
6. สรุป/ล้างข้อมูล
ส่วนนี้จะสรุป Codelab นี้โดยการทำให้แอปใช้งานได้ ซึ่งจะช่วยยืนยันว่าแอปทำงานได้ตามที่ต้องการและอยู่ในเอาต์พุตที่แสดงขึ้น เรียกใช้ผู้ปฏิบัติงานแยกกันเพื่อประมวลผลจำนวนผู้เข้าชม หลังจากตรวจสอบแอปแล้ว ให้ทำตามขั้นตอนการทำความสะอาดและพิจารณาขั้นตอนถัดไป
ติดตั้งใช้งานและยืนยันแอปพลิเคชัน
ตรวจสอบว่าคุณได้ตั้งค่าพุลคิวแล้วเช่นเดียวกับที่เราทำใกล้กับด้านบนของ Codelab นี้กับ gcloud app deploy queue.yaml
หากการดำเนินการดังกล่าวเสร็จสมบูรณ์และแอปตัวอย่างพร้อมใช้งานแล้ว ให้ทำให้แอปใช้งานได้ด้วย gcloud app deploy
ผลลัพธ์ควรจะเหมือนกับแอปโมดูล 1 เพียงแต่ว่าตอนนี้จะมี "ผู้เข้าชมยอดนิยม" อยู่ ตารางด้านบน
แม้ว่าฟรอนท์เอนด์ของเว็บที่อัปเดตจะแสดงผู้เข้าชมยอดนิยมและการเข้าชมล่าสุด แต่โปรดทราบว่าจำนวนผู้เข้าชมจะไม่รวมการเข้าชมนี้ไว้ด้วย แอปจะแสดงจำนวนผู้เข้าชมก่อนหน้าในขณะที่ทิ้งงานใหม่ที่เพิ่มจำนวนของผู้เข้าชมรายนี้ในคิวการดึงข้อมูล ซึ่งเป็นงานที่รอประมวลผลอยู่
คุณสามารถทำงานนี้โดยเรียกใช้ /log
ได้หลายวิธีดังนี้
- บริการแบ็กเอนด์ของ App Engine
- งาน
cron
- เว็บเบราว์เซอร์
- คำขอ HTTP จากบรรทัดคำสั่ง (
curl
,wget
ฯลฯ)
ตัวอย่างเช่น หากคุณใช้ curl
เพื่อส่งคำขอ GET ไปยัง /log
เอาต์พุตจะมีลักษณะดังนี้ เนื่องจากคุณระบุ PROJECT_ID
ไว้แล้ว
$ curl https://PROJECT_ID.appspot.com/log DONE (with 1 task[s] logging 1 visitor[s])
จำนวนที่อัปเดตจะแสดงเมื่อเข้าชมเว็บไซต์ครั้งต่อไป เท่านี้ก็เรียบร้อย
ขอแสดงความยินดีที่ Codelab นี้เสร็จสมบูรณ์สำหรับการเพิ่มการใช้บริการพุลคิวงานของ App Engine ในแอปตัวอย่างเรียบร้อยแล้ว และตอนนี้ก็พร้อมที่จะย้ายข้อมูลไปยัง Cloud Pub/Sub, Cloud NDB และ Python 3 ในโมดูล 19 แล้ว
ล้างข้อมูล
ทั่วไป
หากดำเนินการเสร็จแล้ว เราขอแนะนำให้คุณปิดใช้แอป 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 นี้ โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบของผลิตภัณฑ์แต่ละรายการ
- บริการคิวงานของ App Engine จะไม่มีการเรียกเก็บเงินเพิ่มเติมตามหน้าการกำหนดราคาสำหรับบริการแบบกลุ่มแบบเดิม เช่น คิวงาน
- บริการ App Engine Datastore ให้บริการโดย Cloud Datastore (Cloud Firestore ในโหมด Datastore) ซึ่งมีรุ่นฟรีเช่นกัน ดูข้อมูลเพิ่มเติมได้ที่หน้าราคา
ขั้นตอนถัดไป
ใน "การย้ายข้อมูล" นี้ คุณเพิ่มการใช้พุชคิวของคิวงานลงในแอปตัวอย่างโมดูล 1 โดยเพิ่มการสนับสนุนสำหรับการติดตามผู้เข้าชม ซึ่งจะทำให้แอปตัวอย่างของโมดูล 18 ใช้งานได้ ในการย้ายข้อมูลครั้งถัดไป คุณจะอัปเกรดงานการพุลของ App Engine ไปยัง Cloud Pub/Sub ตั้งแต่ช่วงปลายปี 2021 เป็นต้นไป ผู้ใช้ไม่จำเป็นต้องย้ายข้อมูลไปยัง Cloud Pub/Sub อีกต่อไปเมื่ออัปเกรดเป็น Python 3 อ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในส่วนถัดไป
สำหรับการย้ายข้อมูลไปยัง Cloud Pub/Sub โปรดดู Codelab ของโมดูล 19 นอกเหนือจากนั้นยังมีการย้ายข้อมูลอื่นๆ ที่ต้องพิจารณาด้วย เช่น Cloud Datastore, Cloud Memorystore, Cloud Storage หรือ Cloud Tasks (พุชคิว) นอกจากนี้ยังมีการย้ายข้อมูลข้ามผลิตภัณฑ์ไปยัง Cloud Run และ Cloud Functions ด้วย เนื้อหาของสถานีย้ายข้อมูลแบบ Serverless (โค้ดแล็บ วิดีโอ ซอร์สโค้ด [หากมี]) ทั้งหมดสามารถเข้าถึงได้ที่ที่เก็บโอเพนซอร์ส
7. การย้ายข้อมูลไปยัง Python 3
ในฤดูใบไม้ร่วงปี 2021 ทีม App Engine ได้ขยายการรองรับบริการที่รวมอยู่ในแพ็กเกจไปยังรันไทม์รุ่นที่ 2 (ที่มีรันไทม์รุ่นที่ 1) ด้วยเหตุนี้ คุณจึงไม่จำเป็นต้องย้ายข้อมูลจากบริการที่รวมอยู่ในแพ็กเกจ เช่น คิวงานของ App Engine ไปยังระบบคลาวด์แบบสแตนด์อโลนหรือบริการของบุคคลที่สาม เช่น Cloud Pub/Sub อีกต่อไป เมื่อพอร์ตแอปไปยัง Python 3 กล่าวคือ คุณจะใช้คิวงานในแอป Python 3 App Engine ต่อไปได้ตราบใดที่คุณปรับเปลี่ยนโค้ดเพื่อเข้าถึงบริการในแพ็กเกจจากรันไทม์รุ่นถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีย้ายข้อมูลการใช้บริการในแพ็กเกจไปยัง Python 3 ได้ใน Codelab ของโมดูล 17 และวิดีโอที่เกี่ยวข้อง แม้ว่าหัวข้อดังกล่าวจะอยู่นอกขอบเขตของโมดูล 18 แต่ลิงก์ด้านล่างนี้เป็นแอปโมดูล 1 เวอร์ชัน Python 3 ที่ย้ายไปยัง Python 3 และยังคงใช้ App Engine NDB (ในบางครั้งจะมีแอปโมดูล 18 เวอร์ชัน Python 3 ให้ใช้งานด้วย)
8. แหล่งข้อมูลเพิ่มเติม
รายการด้านล่างนี้เป็นแหล่งข้อมูลเพิ่มเติมสำหรับนักพัฒนาซอฟต์แวร์ที่ศึกษาเพิ่มเติมเกี่ยวกับโมดูลการย้ายข้อมูลนี้หรือที่เกี่ยวข้อง รวมถึงผลิตภัณฑ์ที่เกี่ยวข้อง ซึ่งรวมถึงพื้นที่สำหรับแสดงความคิดเห็นเกี่ยวกับเนื้อหานี้ ลิงก์ไปยังโค้ด และเอกสารประกอบต่างๆ ที่อาจเป็นประโยชน์กับคุณ
ปัญหา/ความคิดเห็นของ Codelab
หากมีปัญหาใดๆ เกี่ยวกับ Codelab นี้ โปรดค้นหาปัญหาของคุณก่อนยื่น ลิงก์สำหรับค้นหาและสร้างปัญหาใหม่
ทรัพยากรการย้ายข้อมูล
ดูลิงก์ไปยังโฟลเดอร์ที่เก็บสำหรับโมดูล 1 (START) และโมดูล 18 (FINISH) ได้ในตารางด้านล่าง นอกจากนี้ ยังเข้าถึงได้จากที่เก็บสำหรับการย้ายข้อมูล Codelab ทั้งหมดของ App Engine โคลนหรือดาวน์โหลดไฟล์ ZIP
Codelab | Python 2 | Python 3 |
รหัส (ไม่มีในบทแนะนำนี้) | ||
โมดูล 18 (Codelab นี้) | ไม่มี |
ข้อมูลอ้างอิงออนไลน์
ด้านล่างนี้คือแหล่งข้อมูลที่เกี่ยวข้องกับบทแนะนำนี้
คิวงานของ App Engine
- ภาพรวมคิวงานของ App Engine
- ภาพรวมการดึงคิวงานของ App Engine
- แอปตัวอย่างแบบเต็มของคิวการดึงคิวงานของ App Engine
- การสร้างพุลคิวงาน
- วิดีโอเปิดตัวพุลคิวงาน Google I/O 2011 ( แอปตัวอย่างสำหรับการโหวต)
- ข้อมูลอ้างอิง
queue.yaml
รายการ queue.yaml
กับ Cloud Tasks- พุลคิวไปยังคำแนะนำในการย้ายข้อมูล Pub/Sub
- คิวการดึงคิวงานของ App Engine ไปยังตัวอย่างเอกสาร Cloud Pub/Sub
แพลตฟอร์ม App Engine
เอกสารประกอบของ App Engine
รันไทม์ของ Python 2 App Engine (สภาพแวดล้อมมาตรฐาน)
รันไทม์ของ Python 3 App Engine (สภาพแวดล้อมมาตรฐาน)
ความแตกต่างระหว่าง Python 2 กับ รันไทม์ของ App Engine (สภาพแวดล้อมมาตรฐาน) 3 รายการ
คำแนะนำในการย้ายข้อมูล Python 2 ถึง 3 App Engine (สภาพแวดล้อมมาตรฐาน)
ข้อมูลราคาและโควต้าของ App Engine
เปิดตัวแพลตฟอร์ม App Engine รุ่นที่ 2 (2018)
การรองรับรันไทม์เดิมในระยะยาว
ตัวอย่างการย้ายข้อมูลเอกสารประกอบ
ข้อมูลอื่นๆ เกี่ยวกับระบบคลาวด์
- Python บน Google Cloud Platform
- ไลบรารีของไคลเอ็นต์ Google Cloud Python
- Google Cloud "ฟรีไม่จำกัดเวลา" ระดับ
- Google Cloud SDK (เครื่องมือบรรทัดคำสั่ง
gcloud
) - เอกสารประกอบทั้งหมดของ Google Cloud
วิดีโอ
- สถานีย้ายข้อมูลแบบ Serverless
- การสำรวจแบบ Serverless
- สมัครใช้บริการ Google Cloud Tech
- สมัครใช้บริการ Google Developers
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0