1. ภาพรวม
Codelab ชุดนี้ (บทแนะนำแบบลงมือทำด้วยตนเอง) มีจุดประสงค์เพื่อช่วยให้นักพัฒนาซอฟต์แวร์เข้าใจตัวเลือกต่างๆ ที่มีให้เมื่อทำให้แอปพลิเคชันของตนใช้งานได้ ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ Google Cloud Translation API กับ Python และเรียกใช้ภายในหรือทำให้ใช้งานได้กับแพลตฟอร์มการประมวลผลแบบ Serverless ของระบบคลาวด์ (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 API โดยเฉพาะ Cloud Translation API (ขั้นสูง/v3)
- เรียกใช้เว็บแอปพลิเคชันพื้นฐานในเครื่องหรือติดตั้งใช้งานบนแพลตฟอร์มการประมวลผลในระบบคลาวด์
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud ที่มีบัญชีสำหรับการเรียกเก็บเงินใน Cloud ที่ใช้งานอยู่
- Flask ที่ติดตั้งเพื่อการทำงานภายในหรือแพลตฟอร์มการประมวลผลของ Cloud {4/} ที่เปิดใช้การทำให้ใช้งานได้ในระบบคลาวด์
- ทักษะพื้นฐานเรื่อง 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 ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
3. เปิดใช้งาน Translation API
สำหรับแอปตัวอย่างของเรา คุณจะต้องเปิดใช้ Cloud Translation API และบริการ App Engine แทนโดยใช้วิธีการที่คล้ายคลึงกันด้านล่าง
การเปิดใช้ Cloud API
บทนำ
ไม่ว่าจะคุณต้องการใช้ Google API ใดในแอปพลิเคชันของคุณ คุณจะต้องเปิดใช้ API เหล่านั้น ตัวอย่างต่อไปนี้แสดงวิธีเปิดใช้ Cloud Vision API 2 วิธี หลังจากดูวิธีเปิดใช้ Cloud API 1 รายการแล้ว คุณจะเปิดใช้ API อื่นๆ ได้เนื่องจากกระบวนการคล้ายกัน
ตัวเลือกที่ 1: จาก Cloud Shell หรืออินเทอร์เฟซบรรทัดคำสั่ง
แม้ว่าการเปิดใช้ API จาก Cloud Console จะทำได้มากกว่า แต่นักพัฒนาซอฟต์แวร์บางรายชอบทำทุกอย่างจากบรรทัดคำสั่ง คุณต้องค้นหา "ชื่อบริการ" ของ API ก่อน ซึ่งมีลักษณะคล้ายกับ URL: SERVICE_NAME
.googleapis.com
คุณดูผลิตภัณฑ์เหล่านี้ได้ในแผนภูมิผลิตภัณฑ์ที่รองรับ หรือจะค้นหาผลิตภัณฑ์ด้วย Google Discovery API โดยใช้โปรแกรม
เมื่อได้รับข้อมูลนี้ คุณสามารถใช้ Cloud Shell (หรือสภาพแวดล้อมการพัฒนาในเครื่องที่มีติดตั้งเครื่องมือบรรทัดคำสั่ง gcloud
) แล้วเปิดใช้ API ได้ดังนี้
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 ได้ด้วย จาก Cloud Console ให้ไปที่ตัวจัดการ API แล้วเลือกไลบรารี
หากต้องการเปิดใช้ Cloud Vision API ให้เริ่มป้อน "vision" ในแถบค้นหา สิ่งที่ตรงกับสิ่งที่คุณเคยป้อนไว้จนถึงตอนนี้จะปรากฏขึ้น
เลือก API ที่ต้องการเปิดใช้แล้วคลิกเปิดใช้
ค่าใช้จ่าย
คุณสามารถใช้ Google APIs จำนวนมากได้โดยไม่เสียค่าธรรมเนียม แต่การใช้ผลิตภัณฑ์ของ Google Cloud API ไม่ใช้งานได้ฟรี เมื่อเปิดใช้ Cloud API ระบบอาจขอบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่ อย่างไรก็ตาม โปรดทราบว่าผลิตภัณฑ์ Google Cloud บางอย่างจะแสดงตัวเลือก "ฟรีไม่จำกัดเวลา" เทียร์ (รายวัน/รายเดือน) ที่คุณจะต้องเกินเพื่อเรียกเก็บค่าการเรียกเก็บเงิน มิฉะนั้น จะไม่มีการเรียกเก็บเงินจากบัตรเครดิตของคุณ (หรือเครื่องมือการเรียกเก็บเงินที่ระบุ)
ผู้ใช้ควรอ้างอิงข้อมูลราคาสำหรับ API ใดๆ ก่อนเปิดใช้งาน โดยเฉพาะอย่างยิ่งแจ้งว่ามีรุ่นฟรีหรือไม่และถ้ามี คืออะไร หากเปิดใช้ Cloud Vision API ให้ตรวจสอบหน้าข้อมูลราคา Cloud Vision มีโควต้าฟรี และคุณจะไม่เสียค่าใช้จ่ายใดๆ ตราบใดที่คุณยังใช้งานไม่เกินขีดจำกัดโดยรวม (ในแต่ละเดือน)
ราคาและระดับการใช้งานฟรีจะแตกต่างกันไปตาม Google APIs แต่ละรายการ ตัวอย่าง
- Google Cloud/GCP — แต่ละผลิตภัณฑ์จะมีการเรียกเก็บเงินแตกต่างกัน และโดยทั่วไปจะจ่ายเงินตามรอบ vCPU, ผู้บริโภคพื้นที่เก็บข้อมูล, การใช้หน่วยความจำ หรือแบบจ่ายต่อการใช้งาน ดูข้อมูลรุ่นฟรีด้านบน
- Google Maps — มีชุด API และมอบเครดิตฟรีรายเดือนมูลค่า 200 USD โดยรวมให้แก่ผู้ใช้
- Google Workspace (เดิมคือ G Suite) API — ให้การใช้งานฟรี (สูงสุดที่จำกัด) ซึ่งครอบคลุมค่าบริการรายเดือนของ Workspace ดังนั้นจึงไม่มีการเรียกเก็บเงินโดยตรงสำหรับการใช้ Gmail, Google ไดรฟ์, ปฏิทิน, เอกสาร, ชีต และสไลด์ API
ผลิตภัณฑ์ที่แตกต่างกันของ Google จะมีการเรียกเก็บเงินไม่เหมือนกัน ดังนั้น โปรดตรวจสอบข้อมูลดังกล่าวในเอกสารประกอบของ API ด้วย
สรุป
ตอนนี้คุณทราบวิธีเปิดใช้ Google API โดยทั่วไปแล้ว โปรดไปที่ตัวจัดการ API และเปิดใช้ทั้ง Cloud Translation API และบริการ App Engine (หากยังไม่ได้เปิดใช้) อันแรก เนื่องจากแอปพลิเคชันของเราจะใช้ API ดังกล่าว และอย่างหลัง เพราะคุณกำลังทำให้แอป App Engine ใช้งานได้ หากต้องการดำเนินการจากบรรทัดคำสั่ง ให้ใช้คำสั่งนี้แทน
gcloud services enable appengine.googleapis.com translate.googleapis.com
ขณะที่โควต้ารายเดือนไม่ได้แสดงใน"ฟรีไม่จำกัดเวลา" โดยรวม หน้าสรุประดับ หน้าราคาของ 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, รหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์, ไคลเอ็นต์ 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_request
หรือไม่ Cloud 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
บวกแพ็กเกจคู่นี้ด้วยคำสั่ง 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. ทำให้บริการใช้งานได้
หากต้องการทำให้บริการแปลใช้งานได้กับ Python 2 App Engine ให้เรียกใช้คำสั่งนี้
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, รับข้อมูลรับรองที่จำเป็น และทำให้เว็บแอปแบบง่ายๆ ใช้งานได้ใน Python 2 App Engine แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานนี้ได้จากตารางนี้ในที่เก็บ
ล้างข้อมูล
Cloud Translation API ให้คุณดำเนินการอักขระที่แปลแล้วตามจำนวนที่กำหนดไว้ต่อเดือนฟรี App Engine ยังมีโควต้าฟรี เช่นเดียวกับ Cloud Functions และ Cloud Run คุณจะต้องเสียค่าใช้จ่ายหากทั้ง 2 อย่างข้างต้น หากคุณวางแผนที่จะไปยัง Codelab ครั้งถัดไป ก็ไม่จำเป็นต้องปิดแอป
อย่างไรก็ตาม หากคุณยังไม่พร้อมที่จะดูบทแนะนำถัดไปหรือกังวลว่าอินเทอร์เน็ตจะพบแอปที่คุณเพิ่งทำให้ใช้งานได้ ให้ปิดใช้แอป App Engine ลบ Cloud Function หรือปิดใช้บริการ Cloud Run เพื่อหลีกเลี่ยงค่าใช้จ่าย เมื่อพร้อมที่จะไปยัง Codelab ถัดไปแล้ว คุณก็เปิดใช้อีกครั้งได้ ในทางกลับกัน หากคุณจะไม่ดำเนินการกับแอปพลิเคชันนี้หรือ Codelab อื่นๆ ต่อและต้องการลบทุกอย่างออกทั้งหมด คุณปิดโปรเจ็กต์ได้
นอกจากนี้ การติดตั้งใช้งานในแพลตฟอร์มการประมวลผลแบบ Serverless ของ Google Cloud ยังทำให้เกิดค่าใช้จ่ายในการสร้างและพื้นที่เก็บข้อมูลเล็กน้อย Cloud Build มีโควต้าฟรีของตนเอง เช่นเดียวกับ Cloud Storage Cloud Build จะสร้างอิมเมจของแอปพลิเคชันเพื่อความโปร่งใสมากขึ้น ซึ่งจากนั้นระบบจะจัดเก็บไว้ใน Cloud Container Registry หรือ Artifact Registry ซึ่งเป็นอิมเมจที่รับช่วงต่อ พื้นที่เก็บข้อมูลอิมเมจจะใช้โควต้าดังกล่าวบางส่วน เช่นเดียวกับเครือข่ายขาออกเมื่อโอนอิมเมจดังกล่าวไปยังบริการ อย่างไรก็ตาม คุณอาจอาศัยอยู่ในภูมิภาคที่ไม่มีรุ่นฟรีดังกล่าว โปรดระวังการใช้พื้นที่เก็บข้อมูลของคุณเพื่อลดค่าใช้จ่ายที่อาจเกิดขึ้น
9. แหล่งข้อมูลเพิ่มเติม
คุณสามารถดูเนื้อหาสำหรับอ่านเพิ่มเติมรวมถึงแบบฝึกหัดที่แนะนำเพื่อเพิ่มพูนความรู้ที่ได้รับจากบทแนะนำนี้ได้ในส่วนต่อไปนี้
การศึกษาเพิ่มเติม
ตอนนี้คุณได้ฝึกใช้งาน API การแปลแล้ว มาทำแบบฝึกหัดเพิ่มเติมเพื่อพัฒนาทักษะของคุณต่อไป หากต้องการดำเนินการต่อตามเส้นทางการเรียนรู้ โปรดแก้ไขแอปตัวอย่างของเราโดยทำตามขั้นตอนต่อไปนี้
- ทำ Codelab รุ่นอื่นๆ ทั้งหมดให้เสร็จสิ้นเพื่อทำงานภายในหรือทำให้ใช้งานได้กับแพลตฟอร์มประมวลผลแบบ Serverless ของ Google Cloud (โปรดดู repo README)
- ศึกษาบทแนะนำนี้จนจบโดยใช้ภาษาโปรแกรมอื่น
- เปลี่ยนแอปพลิเคชันนี้ให้รองรับภาษาต้นทางหรือภาษาเป้าหมายอื่น
- อัปเกรดแอปพลิเคชันนี้ให้แปลข้อความเป็นภาษาต่างๆ ได้มากกว่า 1 ภาษา เปลี่ยนไฟล์เทมเพลตให้มีเมนูแบบเลื่อนลงของภาษาเป้าหมายที่สนับสนุน
ดูข้อมูลเพิ่มเติม
Google App Engine
- หน้าแรกของ App Engine
- เอกสารประกอบของ App Engine
- การเริ่มต้นใช้งาน Python 3 App Engine อย่างรวดเร็ว
- บัญชีบริการเริ่มต้นสำหรับ App Engine
- รันไทม์ของ Python 2 App Engine (มาตรฐาน)
- รันไทม์ของ Python 3 App Engine (มาตรฐาน)
- ความแตกต่างระหว่าง Python 2 กับ รันไทม์ของ App Engine (มาตรฐาน) 3 รายการ
- คำแนะนำในการย้ายข้อมูล Python 2 ถึง 3 App Engine (มาตรฐาน)
Google Cloud Functions
- หน้าแรกของ Cloud Functions
- เอกสารประกอบเกี่ยวกับ Cloud Functions
- การเริ่มต้นใช้งาน Python Cloud Functions อย่างรวดเร็ว
- บัญชีบริการเริ่มต้นสำหรับ Cloud Functions
Google Cloud Run
- หน้าแรกของ Cloud Run
- เอกสารประกอบเกี่ยวกับ Cloud Run
- การเริ่มต้นใช้งาน Python Cloud Run อย่างรวดเร็ว
- บัญชีบริการเริ่มต้นสำหรับ Cloud Run
Google Cloud Buildpack, Container Registry, Artifact Registry
- ประกาศเกี่ยวกับ Cloud Buildpack
- ที่เก็บ Cloud Buildpack
- หน้าแรกของ Cloud Artifact Registry
- เอกสารประกอบ Cloud Artifact Registry
- หน้าแรกของ Cloud Container Registry
- เอกสารประกอบ Cloud Container Registry
Google Cloud Translation และ Google ML Kit
- หน้าแรกของ Cloud Translation
- เอกสารประกอบเกี่ยวกับ Cloud Translation
- หน้าการกำหนดราคา API ของการแปล
- "องค์ประกอบที่ใช้สร้างสรรค์" สำหรับ Cloud AI/ML ทั้งหมด API
- Google ML Kit (ชุดย่อย Cloud AI/ML API สำหรับอุปกรณ์เคลื่อนที่)
- Google ML Kit Translation API
ผลิตภัณฑ์/หน้า Google Cloud อื่นๆ
- การรองรับ Google Cloud Python
- ไลบรารีของไคลเอ็นต์ Google Cloud
- Google Cloud "ฟรีไม่จำกัดเวลา" ระดับ
- เอกสารประกอบทั้งหมดของ Google Cloud
Python และ Flask
ใบอนุญาต
บทแนะนำนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปสำหรับครีเอทีฟคอมมอนส์ 2.0 ส่วนซอร์สโค้ดในที่เก็บได้รับอนุญาตภายใต้ Apache 2