1. ภาพรวม
ชุดโค้ดแล็บนี้ (บทแนะนำแบบลงมือปฏิบัติด้วยตนเอง) มีจุดมุ่งหมายเพื่อช่วยให้นักพัฒนาแอปเข้าใจตัวเลือกต่างๆ ที่มีเมื่อติดตั้งใช้งานแอปพลิเคชัน ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีใช้ Google Cloud Translation API กับ Python และเรียกใช้ในเครื่องหรือติดตั้งใช้งานแพลตฟอร์มการประมวลผลแบบไร้เซิร์ฟเวอร์ของ Cloud (App Engine, Cloud Functions หรือ Cloud Run) แอปตัวอย่างที่อยู่ในที่เก็บของบทแนะนำนี้สามารถติดตั้งใช้งานได้ (อย่างน้อย) 8 วิธีที่แตกต่างกันโดยมีการเปลี่ยนแปลงการกำหนดค่าเพียงเล็กน้อย
- เซิร์ฟเวอร์ Flask ในเครื่อง (Python 2)
- เซิร์ฟเวอร์ Flask ในเครื่อง (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Cloud Functions (Python 3)
- Cloud Run (Python 2 ผ่าน Docker)
- Cloud Run (Python 3 ผ่าน Docker)
- Cloud Run (Python 3 ผ่าน Cloud Buildpack)
Codelab นี้มุ่งเน้นที่การติดตั้งใช้งานแอปนี้ในแพลตฟอร์มตัวหนาด้านบน
คุณจะได้เรียนรู้วิธีต่อไปนี้
- ใช้ Google Cloud APIs โดยเฉพาะ Cloud Translation API (ขั้นสูง/v3)
- เรียกใช้เว็บแอปพลิเคชันพื้นฐานในเครื่องหรือจะนำไปใช้งานในแพลตฟอร์มการประมวลผลแบบไม่ใช้เซิร์ฟเวอร์ในระบบคลาวด์ก็ได้
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud ที่มีบัญชีสำหรับการเรียกเก็บเงินใน Cloud ที่ใช้งานอยู่
- ติดตั้ง Flask เพื่อเรียกใช้ในเครื่อง หรือเปิดใช้แพลตฟอร์มการประมวลผลแบบไม่ใช้เซิร์ฟเวอร์ของ Cloud สำหรับการติดตั้งใช้งานในระบบคลาวด์
- ทักษะ Python ขั้นพื้นฐาน
- มีความรู้พื้นฐานเกี่ยวกับคำสั่งระบบปฏิบัติการพื้นฐาน
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud เท่าใด
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณสามารถอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และโดยทั่วไปจะระบุเป็น
PROJECT_ID) ดังนั้นหากไม่ชอบรหัสที่สร้างขึ้น ให้สร้างรหัสแบบสุ่มอีกรหัส หรือจะลองใช้รหัสของคุณเองและดูว่ามีรหัสนั้นหรือไม่ก็ได้ จากนั้นจะ "หยุด" หลังจากสร้างโปรเจ็กต์แล้ว - นอกจากนี้ยังมีค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
3. เปิดใช้ Translation API
สำหรับแอปตัวอย่าง คุณจะเปิดใช้ Cloud Translation API และบริการ App Engine แทนโดยใช้คำสั่งที่คล้ายกันซึ่งระบุไว้ด้านล่าง
การเปิดใช้ Cloud API
บทนำ
ไม่ว่าคุณจะต้องการใช้ Google API ใดในแอปพลิเคชัน คุณจะต้องเปิดใช้ API นั้น ตัวอย่างต่อไปนี้แสดง 2 วิธีในการเปิดใช้ Cloud Vision API หลังจากที่ทราบวิธีเปิดใช้ Cloud API แล้ว คุณจะเปิดใช้ API อื่นๆ ได้เนื่องจากกระบวนการคล้ายกัน
ตัวเลือกที่ 1: จาก Cloud Shell หรืออินเทอร์เฟซบรรทัดคำสั่ง
แม้ว่าการเปิดใช้ API จาก Cloud Console จะเป็นเรื่องปกติมากกว่า แต่ก็มีนักพัฒนาแอปบางรายที่ต้องการทำทุกอย่างจากบรรทัดคำสั่ง โดยคุณต้องค้นหา "ชื่อบริการ" ของ API ดูเหมือนว่าจะเป็น URL: SERVICE_NAME.googleapis.com คุณดูข้อมูลเหล่านี้ได้ในแผนภูมิผลิตภัณฑ์ที่รองรับ หรือจะค้นหาโดยใช้โปรแกรมด้วย Google Discovery API ก็ได้
เมื่อมีข้อมูลนี้แล้ว คุณจะเปิดใช้ API ได้โดยใช้ Cloud Shell (หรือสภาพแวดล้อมการพัฒนาในเครื่องที่ติดตั้งเครื่องมือบรรทัดคำสั่ง gcloud) ดังนี้
gcloud services enable SERVICE_NAME.googleapis.com
เช่น คำสั่งนี้จะเปิดใช้ Cloud Vision API
gcloud services enable vision.googleapis.com
คำสั่งนี้จะเปิดใช้ App Engine ดังนี้
gcloud services enable appengine.googleapis.com
นอกจากนี้ คุณยังเปิดใช้ API หลายรายการด้วยคำขอเดียวได้ด้วย ตัวอย่างเช่น บรรทัดคำสั่งนี้จะเปิดใช้ Cloud Run, Cloud Artifact Registry และ Cloud Translation API
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
ตัวเลือกที่ 2: จาก Cloud Console
นอกจากนี้ คุณยังเปิดใช้ Vision API ใน API Manager ได้ด้วย จาก Cloud Console ให้ไปที่ API Manager แล้วเลือกคลัง

หากต้องการเปิดใช้ Cloud Vision API ให้เริ่มป้อน "vision" ในแถบค้นหา แล้วรายการที่ตรงกับสิ่งที่คุณป้อนไว้จะปรากฏขึ้น

เลือก API ที่ต้องการเปิดใช้ แล้วคลิกเปิดใช้

ค่าใช้จ่าย
แม้ว่า Google API หลายรายการจะใช้งานได้โดยไม่มีค่าธรรมเนียม แต่การใช้ผลิตภัณฑ์และ API ของ Google Cloud จะไม่มีค่าใช้จ่าย เมื่อเปิดใช้ Cloud API ระบบอาจขอให้คุณระบุบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่ อย่างไรก็ตาม โปรดทราบว่าผลิตภัณฑ์ Google Cloud บางอย่างมีระดับ "ฟรีตลอดเวลา" (รายวัน/รายเดือน) ซึ่งคุณต้องใช้เกินจึงจะมีการเรียกเก็บเงิน มิฉะนั้นระบบจะไม่เรียกเก็บเงินจากบัตรเครดิต (หรือเครื่องมือการเรียกเก็บเงินที่ระบุ)
ผู้ใช้ควรอ้างอิงข้อมูลการกำหนดราคาของ API ก่อนที่จะเปิดใช้ โดยเฉพาะอย่างยิ่งให้สังเกตว่า API นั้นมีระดับฟรีหรือไม่ และหากมี ระดับฟรีนั้นคืออะไร หากคุณเปิดใช้ Cloud Vision API คุณจะต้องตรวจสอบหน้าข้อมูลการกำหนดราคา Cloud Vision มีโควต้าฟรี และตราบใดที่คุณยังคงอยู่ภายในขีดจำกัดโดยรวม (ภายในแต่ละเดือน) คุณก็ไม่ควรถูกเรียกเก็บเงิน
ราคาและระดับฟรีจะแตกต่างกันไปในแต่ละ Google API ตัวอย่าง
- Google Cloud/GCP - ผลิตภัณฑ์แต่ละรายการจะมีการเรียกเก็บเงินแตกต่างกัน และโดยทั่วไปจะมีการเรียกเก็บเงินต่อรอบ vCPU, ผู้ใช้พื้นที่เก็บข้อมูล, การใช้หน่วยความจำ หรือแบบจ่ายตามการใช้งาน โปรดดูข้อมูลระดับฟรีด้านบน
- Google Maps - มีชุด API และมอบเครดิตฟรีรายเดือนมูลค่า$200 USD ให้แก่ผู้ใช้โดยรวม
- API ของ Google Workspace (เดิมคือ G Suite) - ให้การใช้งานฟรี (สูงสุดตามขีดจำกัดที่กำหนด) ซึ่งครอบคลุมค่าธรรมเนียมการสมัครใช้บริการ Workspace รายเดือน จึงไม่มีการเรียกเก็บเงินโดยตรงสำหรับการใช้ API ของ Gmail, Google ไดรฟ์, ปฏิทิน, เอกสาร, ชีต และสไลด์
ผลิตภัณฑ์ต่างๆ ของ Google จะมีการเรียกเก็บเงินที่แตกต่างกัน ดังนั้นโปรดดูข้อมูลดังกล่าวในเอกสารประกอบของ API
สรุป
ตอนนี้คุณทราบวิธีเปิดใช้ Google API โดยทั่วไปแล้ว โปรดไปที่ API Manager แล้วเปิดใช้ทั้ง Cloud Translation API และบริการ App Engine (หากยังไม่ได้เปิดใช้) โดยเปิดใช้ Cloud Translation API เนื่องจากแอปพลิเคชันของเราจะใช้ API นี้ และเปิดใช้บริการ App Engine เนื่องจากคุณกำลังจะติดตั้งใช้งานแอป App Engine หากต้องการเปิดใช้จากบรรทัดคำสั่ง ให้ใช้คำสั่งนี้แทน
gcloud services enable appengine.googleapis.com translate.googleapis.com
แม้ว่าโควต้ารายเดือนของ Translation API จะไม่ได้แสดงอยู่ในหน้าสรุประดับ "ฟรีตลอดเวลา" โดยรวม แต่หน้าการกำหนดราคาของ Translation API ระบุว่าผู้ใช้ทุกคนจะได้รับอักขระที่แปลแล้วจำนวนคงที่ในแต่ละเดือน คุณไม่ควรถูกเรียกเก็บเงินจาก API หากใช้งานต่ำกว่าเกณฑ์ดังกล่าว หากมีค่าใช้จ่ายอื่นๆ ที่เกี่ยวข้องกับ Google Cloud เราจะกล่าวถึงค่าใช้จ่ายเหล่านั้นในส่วน "ล้างข้อมูล" ตอนท้าย
4. รับโค้ดแอปตัวอย่าง
โคลนโค้ดในที่เก็บในเครื่องหรือใน Cloud Shell (โดยใช้คำสั่ง git clone) หรือดาวน์โหลดไฟล์ ZIP จากปุ่มโค้ดสีเขียวตามที่แสดงในภาพหน้าจอด้านล่าง

ตอนนี้คุณมีทุกอย่างพร้อมแล้ว ให้สร้างสำเนาแบบเต็มของโฟลเดอร์เพื่อทำตามบทแนะนำนี้โดยเฉพาะ เนื่องจากอาจต้องลบหรือเปลี่ยนไฟล์ หากต้องการทําการติดตั้งใช้งานอื่น คุณสามารถเริ่มใหม่ได้โดยการคัดลอกต้นฉบับเพื่อไม่ต้องโคลนหรือดาวน์โหลดอีกครั้ง
5. ทัวร์ชมแอปตัวอย่าง
แอปตัวอย่างเป็นแอปที่ดัดแปลงมาจาก Google แปลภาษาแบบง่ายๆ ซึ่งจะแจ้งให้ผู้ใช้ป้อนข้อความเป็นภาษาอังกฤษและรับคำแปลที่เทียบเท่าของข้อความนั้นเป็นภาษาสเปน ตอนนี้ให้เปิดไฟล์ main.py เพื่อดูวิธีการทำงาน หากไม่รวมบรรทัดที่แสดงความคิดเห็นเกี่ยวกับการอนุญาตให้ใช้สิทธิ โค้ดจะปรากฏที่ด้านบนและด้านล่างดังนี้
from flask import Flask, render_template, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
# . . . [translate() function definition] . . .
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
- การนำเข้าจะนำฟังก์ชันการทำงานของ Flask, โมดูล
google.authและไลบรารีของไคลเอ็นต์ Cloud Translation API เข้ามา - ตัวแปรส่วนกลางแสดงถึงแอป Flask, รหัสโปรเจ็กต์ Cloud, ไคลเอ็นต์ Translation API, "เส้นทางตำแหน่ง" หลักสำหรับการเรียก Translation API รวมถึงภาษาต้นฉบับและภาษาเป้าหมาย ในกรณีนี้คือภาษาอังกฤษ (
en) และภาษาสเปน (es) แต่คุณสามารถเปลี่ยนค่าเหล่านี้เป็นรหัสภาษาอื่นๆ ที่ Cloud Translation API รองรับได้ - บล็อก
ifขนาดใหญ่ที่ด้านล่างใช้ในบทแนะนำสำหรับการเรียกใช้แอปนี้ในเครื่อง โดยจะใช้เซิร์ฟเวอร์การพัฒนา Flask เพื่อให้บริการแอปของเรา ส่วนนี้ยังมีไว้สำหรับบทแนะนำการติดตั้งใช้งาน Cloud Run ในกรณีที่ไม่ได้รวมเว็บเซิร์ฟเวอร์ไว้ในคอนเทนเนอร์ ระบบจะขอให้คุณเปิดใช้การรวมเซิร์ฟเวอร์ไว้ในคอนเทนเนอร์ แต่ในกรณีที่คุณมองข้ามขั้นตอนนี้ไป โค้ดแอปจะกลับไปใช้เซิร์ฟเวอร์การพัฒนา Flask (นี่ไม่ใช่ปัญหาเกี่ยวกับ App Engine หรือ Cloud Functions เนื่องจากแพลตฟอร์มเหล่านั้นเป็นแพลตฟอร์มที่อิงตามแหล่งที่มา ซึ่งหมายความว่า Google Cloud จะจัดหาและเรียกใช้เว็บเซิร์ฟเวอร์เริ่มต้น)
สุดท้าย ตรงกลางของ main.py คือหัวใจของแอปพลิเคชัน ซึ่งก็คือฟังก์ชัน translate()
@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
"""
main handler - show form and possibly previous translation
"""
# Flask Request object passed in for Cloud Functions
# (use gcf_request for GCF but flask.request otherwise)
local_request = gcf_request if gcf_request else request
# reset all variables (GET)
text = translated = None
# if there is data to process (POST)
if local_request.method == 'POST':
text = local_request.form['text']
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context & render template
context = {
'orig': {'text': text, 'lc': SOURCE},
'trans': {'text': translated, 'lc': TARGET},
}
return render_template('index.html', **context)
ฟังก์ชันหลักจะทำหน้าที่รับอินพุตของผู้ใช้และเรียกใช้ Translation API เพื่อทำงานหนัก มาดูรายละเอียดกัน
- ตรวจสอบว่าคำขอมาจาก Cloud Functions หรือไม่โดยใช้ตัวแปร
local_requestCloud Functions จะส่งออบเจ็กต์คำขอ Flask ของตัวเอง ในขณะที่ฟังก์ชันอื่นๆ ทั้งหมด (ที่เรียกใช้ในเครื่องหรือที่ทำให้ใช้งานได้ใน App Engine หรือ Cloud Run) จะรับออบเจ็กต์คำขอจาก Flask โดยตรง - รีเซ็ตตัวแปรพื้นฐานสำหรับแบบฟอร์ม โดยส่วนใหญ่จะใช้กับคำขอ GET เนื่องจากคำขอ POST จะมีข้อมูลที่แทนที่ข้อมูลเหล่านี้
- หากเป็น POST ให้คัดลอกข้อความที่จะแปล แล้วสร้างโครงสร้าง JSON ที่แสดงข้อกำหนดของข้อมูลเมตา API จากนั้นเรียกใช้ API โดยเปลี่ยนกลับไปใช้ API เวอร์ชันก่อนหน้าหากผู้ใช้ใช้ไลบรารีเวอร์ชันเก่า
- ไม่ว่าจะอย่างไรก็ตาม ให้จัดรูปแบบผลลัพธ์จริง (POST) หรือไม่มีข้อมูล (GET) ลงในบริบทของเทมเพลต แล้วแสดงผล
ส่วนภาพของแอปพลิเคชันอยู่ในไฟล์เทมเพลต index.html โดยจะแสดงผลการแปลก่อนหน้า (หากไม่มีจะแสดงเป็นช่องว่าง) ตามด้วยแบบฟอร์มที่ขอให้แปล
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
6. ติดตั้งแพ็กเกจ/การอ้างอิงในเครื่อง (ลงใน lib)
ดังที่ได้กล่าวไว้ก่อนหน้านี้ แอปตัวอย่างใช้เฟรมเวิร์กเว็บขนาดเล็ก Flask และไลบรารีของไคลเอ็นต์ Google Cloud Translation API สำหรับ Python ติดตั้งและอัปเดต pip รวมถึงแพ็กเกจ 2 รายการนี้ด้วยคำสั่ง pip (หรือ pip3) ดังนี้
pip install -t lib -r requirements.txt
หลังจากเรียกใช้ความคิดเห็นข้างต้น คุณจะเห็นเอาต์พุตการติดตั้งซึ่งอาจมีลักษณะดังนี้
$ pip install -t lib -r requirements.txt
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting flask>=1.1.2
Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB)
Collecting google-cloud-translate>=2.0.1
Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB)
Collecting click<8.0,>=5.1
Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Jinja2<3.0,>=2.10.1
Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB)
Collecting Werkzeug<2.0,>=0.15
Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous<2.0,>=0.24
Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0
Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB)
|████████████████████████████████| 93 kB 2.1 MB/s
Collecting google-cloud-core<2.0dev,>=1.1.0
Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB)
Collecting MarkupSafe>=0.23
Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB)
Collecting protobuf>=3.12.0
Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB)
|████████████████████████████████| 958 kB 21.6 MB/s
Collecting futures>=3.2.0; python_version < "3.2"
Using cached futures-3.3.0-py2-none-any.whl (16 kB)
Collecting six>=1.13.0
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting packaging>=14.3
Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting googleapis-common-protos<2.0dev,>=1.6.0
Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB)
Collecting requests<3.0.0dev,>=2.18.0
Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting google-auth<2.0dev,>=1.25.0
Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)
Collecting pytz
Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Collecting setuptools>=40.3.0
Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc"
Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB)
Collecting pyparsing>=2.0.2
Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting chardet<5,>=3.0.2
Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting urllib3<1.27,>=1.21.1
Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)
Collecting idna<3,>=2.5
Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting certifi>=2017.4.17
Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
|████████████████████████████████| 145 kB 61.1 MB/s
Collecting pyasn1-modules>=0.2.1
Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting rsa<4.6; python_version < "3.6"
Using cached rsa-4.5-py2.py3-none-any.whl (36 kB)
Collecting cachetools<5.0,>=2.0.0
Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB)
Collecting enum34>=1.0.4; python_version < "3.4"
Using cached enum34-1.1.10-py2-none-any.whl (11 kB)
Collecting pyasn1<0.5.0,>=0.4.6
Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate
ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
matplotlib 1.3.1 requires nose, which is not installed.
matplotlib 1.3.1 requires tornado, which is not installed.
Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5
7. ติดตั้งใช้งานบริการ
หากต้องการทําให้บริการแปลภาษาใช้งานได้กับ App Engine ของ Python 2 ให้เรียกใช้คําสั่งนี้
gcloud app deploy
เอาต์พุตควรมีลักษณะดังนี้ และมีข้อความแจ้งสำหรับขั้นตอนถัดไป
$ gcloud app deploy Services to deploy: descriptor: [/private/tmp/nebulous-serverless-python/app.yaml] source: [/private/tmp/nebulous-serverless-python] target project: [PROJECT_ID] target service: [default] target version: [20210422t161025] target url: [https://PROJECT_ID.appspot.com] Do you want to continue (Y/n)? Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 1290 files to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse
ตอนนี้แอปของคุณพร้อมให้บริการทั่วโลกแล้ว คุณควรเข้าถึงแอปได้ที่ URL (ซึ่งมีรหัสโปรเจ็กต์ของคุณ) ที่ระบุไว้ในเอาต์พุตการติดตั้งใช้งาน

แปลข้อความเพื่อดูการทำงานของฟีเจอร์นี้

8. บทสรุป
ยินดีด้วย คุณได้เรียนรู้วิธีเปิดใช้ Cloud Translation API, รับข้อมูลเข้าสู่ระบบที่จำเป็น และทำให้เว็บแอปอย่างง่ายใช้งานได้กับ App Engine ของ Python 2 แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานนี้ได้จากตารางนี้ในที่เก็บ
ล้างข้อมูล
Cloud Translation API ช่วยให้คุณแปลอักขระในจำนวนที่กำหนดได้ฟรีต่อเดือน App Engine ยังมีโควต้าฟรี เช่นเดียวกับ Cloud Functions และ Cloud Run ระบบจะเรียกเก็บเงินจากคุณหากมีการใช้งานเกินขีดจำกัด หากวางแผนที่จะทำ Codelab ถัดไปต่อ คุณไม่จำเป็นต้องปิดแอป
อย่างไรก็ตาม หากคุณยังไม่พร้อมที่จะไปยังบทแนะนำถัดไป หรือกังวลว่าอินเทอร์เน็ตจะค้นพบแอปที่คุณเพิ่งติดตั้งใช้งาน ให้ปิดใช้แอป App Engine, ลบ Cloud Function หรือปิดใช้บริการ Cloud Run เพื่อหลีกเลี่ยงการเรียกเก็บเงิน เมื่อพร้อมที่จะไปที่ Codelab ถัดไป คุณก็เปิดใช้ฟีเจอร์นี้อีกครั้งได้ ในทางกลับกัน หากคุณไม่ต้องการใช้แอปพลิเคชันนี้หรือ Codelab อื่นๆ ต่อไป และต้องการลบทุกอย่างออกทั้งหมด คุณสามารถปิดโปรเจ็กต์ได้
นอกจากนี้ การติดตั้งใช้งานแพลตฟอร์มการประมวลผลแบบ Serverless ของ Google Cloud ยังทำให้เกิดค่าใช้จ่ายในการสร้างและจัดเก็บเล็กน้อย Cloud Build มีโควต้าฟรีของตัวเอง เช่นเดียวกับ Cloud Storage Cloud Build จะสร้างอิมเมจแอปพลิเคชันของคุณเพื่อเพิ่มความโปร่งใส ซึ่งจะจัดเก็บไว้ใน Cloud Container Registry หรือ Artifact Registry ซึ่งเป็นรุ่นต่อจาก Cloud Container Registry การจัดเก็บรูปภาพดังกล่าวจะใช้โควต้าบางส่วน เช่นเดียวกับการส่งข้อมูลออกของเครือข่ายเมื่อโอนรูปภาพไปยังบริการ อย่างไรก็ตาม คุณอาจอาศัยอยู่ในภูมิภาคที่ไม่มีระดับการใช้งานฟรีดังกล่าว ดังนั้นโปรดทราบการใช้พื้นที่เก็บข้อมูลเพื่อลดค่าใช้จ่ายที่อาจเกิดขึ้น
9. แหล่งข้อมูลเพิ่มเติม
ในส่วนต่อไปนี้ คุณจะเห็นสื่อการอ่านเพิ่มเติม รวมถึงแบบฝึกหัดที่แนะนำเพื่อเพิ่มพูนความรู้ที่ได้รับจากการทำแบบฝึกหัดนี้
การศึกษาเพิ่มเติม
ตอนนี้คุณมีประสบการณ์การใช้งาน Translation API บ้างแล้ว มาฝึกเพิ่มเติมเพื่อพัฒนาทักษะกัน หากต้องการดำเนินการตามเส้นทางการเรียนรู้ต่อ ให้แก้ไขแอปตัวอย่างของเราเพื่อทำสิ่งต่อไปนี้
- ทำ Codelab นี้ให้เสร็จสมบูรณ์ในรุ่นอื่นๆ ทั้งหมดเพื่อเรียกใช้ในเครื่องหรือติดตั้งใช้งานในแพลตฟอร์มการประมวลผลแบบไร้เซิร์ฟเวอร์ของ Google Cloud (ดูREADME ของที่เก็บ)
- ทำบทแนะนำนี้ให้เสร็จโดยใช้ภาษาโปรแกรมอื่น
- เปลี่ยนแอปพลิเคชันนี้ให้รองรับภาษาต้นฉบับหรือภาษาเป้าหมายอื่นๆ
- อัปเกรดแอปพลิเคชันนี้เพื่อให้แปลข้อความเป็นภาษาต่างๆ ได้มากกว่า 1 ภาษา หรือเปลี่ยนไฟล์เทมเพลตให้มีเมนูแบบเลื่อนลงของภาษาเป้าหมายที่รองรับ
ดูข้อมูลเพิ่มเติม
Google App Engine
- หน้าแรกของ App Engine
- เอกสารประกอบของ App Engine
- การเริ่มต้นใช้งาน App Engine สำหรับ Python 3 อย่างรวดเร็ว
- บัญชีบริการเริ่มต้นสำหรับ App Engine
- รันไทม์ Python 2 App Engine (มาตรฐาน)
- รันไทม์ Python 3 App Engine (มาตรฐาน)
- ความแตกต่างระหว่างรันไทม์ Python 2 และ 3 ของ App Engine (มาตรฐาน)
- คู่มือการย้ายข้อมูลจาก Python 2 ไปยัง 3 ใน App Engine (มาตรฐาน)
Google Cloud Functions
- หน้าแรกของ Cloud Functions
- เอกสารประกอบของ Cloud Functions
- คู่มือเริ่มต้นใช้งาน Cloud Functions ด้วย Python ฉบับย่อ
- บัญชีบริการเริ่มต้นสำหรับ Cloud Functions
Google Cloud Run
- หน้าแรกของ Cloud Run
- เอกสารประกอบของ Cloud Run
- การเริ่มต้นใช้งาน Cloud Run ด้วย Python อย่างรวดเร็ว
- บัญชีบริการเริ่มต้นสำหรับ Cloud Run
Google Cloud Buildpacks, Container Registry, Artifact Registry
- ประกาศเกี่ยวกับ Cloud Buildpacks
- ที่เก็บ Cloud Buildpacks
- หน้าแรกของ Cloud Artifact Registry
- เอกสารประกอบของ Cloud Artifact Registry
- หน้าแรกของ Cloud Container Registry
- เอกสารประกอบของ Cloud Container Registry
Google Cloud Translation และ Google ML Kit
- หน้าแรกของ Cloud Translation
- เอกสารประกอบของ Cloud Translation
- หน้าการกำหนดราคาของ Translation API
- API "Building Block" ของ Cloud AI/ML ทั้งหมด
- Google ML Kit (ชุดย่อยของ Cloud AI/ML API สำหรับอุปกรณ์เคลื่อนที่)
- Google ML Kit Translation API
ผลิตภัณฑ์/หน้าอื่นๆ ของ Google Cloud
- การสนับสนุน Python ของ Google Cloud
- ไลบรารีของไคลเอ็นต์ Google Cloud
- ระดับ "ฟรีตลอด" ของ Google Cloud
- เอกสารประกอบทั้งหมดของ Google Cloud
Python และ Flask
ใบอนุญาต
บทแนะนำนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0 ทั่วไป ส่วนซอร์สโค้ดในที่เก็บได้รับอนุญาตภายใต้ Apache 2