ปรับใช้ Google แปลภาษาพื้นฐาน" แอป Express.js ใน App Engine, Cloud Functions และ Cloud Run

1. ภาพรวม

ชุดโค้ดแล็บนี้ (บทแนะนำแบบลงมือปฏิบัติด้วยตนเอง) มีจุดมุ่งหมายเพื่อช่วยให้นักพัฒนาแอปเข้าใจตัวเลือกต่างๆ ที่มีเมื่อติดตั้งใช้งานแอปพลิเคชัน คุณจะได้ดูวิธีใช้ Google Cloud Translation API ในเว็บแอปพลิเคชันอย่างง่าย แอปนี้เรียกใช้ได้ในเครื่องหรือทำให้ใช้งานได้กับแพลตฟอร์มการประมวลผลแบบไร้เซิร์ฟเวอร์ของระบบคลาวด์ (App Engine, Cloud Functions หรือ Cloud Run)

คุณจะทำบทแนะนำ JavaScript นี้ด้วย Node.js โดยใช้เฟรมเวิร์กเว็บ Express.js นอกจากนี้ คุณยังจะได้เรียนรู้วิธีเข้าถึง Google Cloud APIs จากแพลตฟอร์มแบบ Serverless ของเราด้วย แอปเวอร์ชันทั้งหมดมาจากที่เก็บข้อมูลโอเพนซอร์ส "nebulous serverless" ซึ่งมีแอปเวอร์ชัน Python และ Codelab แบบอิสระ นอกจากนี้ ที่เก็บยังมีแอปที่คล้ายกันซึ่งแสดงให้นักพัฒนาซอฟต์แวร์เห็นวิธีเข้าถึง Google API ที่ไม่ใช่ Cloud จากแพลตฟอร์มแบบ Serverless ของเรา

Codelab นี้มุ่งเน้นที่การติดตั้งใช้งานแอปนี้ในแพลตฟอร์มตัวหนาด้านบน

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

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

  • โปรเจ็กต์ Google Cloud ที่มีบัญชีสำหรับการเรียกเก็บเงินใน Cloud ที่ใช้งานอยู่
  • เฟรมเวิร์กเว็บที่ติดตั้งไว้เพื่อเรียกใช้ในเครื่อง ( Flask สำหรับผู้ที่ทำบทแนะนำ Python หรือ Express สำหรับผู้ที่ทำบทแนะนำ JavaScript/Node.js)
  • เปิดใช้แพลตฟอร์มการประมวลผลแบบไร้เซิร์ฟเวอร์อย่างน้อย 1 แพลตฟอร์มสำหรับการติดตั้งใช้งาน Google Cloud
  • ทักษะการเขียนโปรแกรมขั้นพื้นฐาน (Python หรือ JavaScript/Node.js)
  • มีความรู้พื้นฐานเกี่ยวกับคำสั่งระบบปฏิบัติการพื้นฐาน

แบบสำรวจ

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

อ่านและทำแบบฝึกหัด อ่านอย่างเดียว

คุณจะให้คะแนนประสบการณ์ในการพัฒนาใน Python หรือ Node.js เท่าไร

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณสามารถอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และโดยทั่วไปจะระบุเป็น PROJECT_ID) ดังนั้นหากไม่ชอบรหัสที่สร้างขึ้น ให้สร้างรหัสแบบสุ่มอีกรหัส หรือจะลองใช้รหัสของคุณเองและดูว่ามีรหัสนั้นหรือไม่ก็ได้ จากนั้นจะ "หยุด" หลังจากสร้างโปรเจ็กต์แล้ว
  • นอกจากนี้ยังมีค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

3. เปิดใช้ Translation API

ในส่วนนี้ คุณจะได้เรียนรู้วิธีเปิดใช้ Google API โดยทั่วไป สำหรับแอปตัวอย่าง คุณจะต้องเปิดใช้ Cloud Translation API นอกจากนี้ คุณยังจะเปิดใช้ App Engine, Cloud Functions และ/หรือ Cloud Run (รวมถึง Cloud Artifact Registry) ด้วย ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มที่คุณต้องการทำให้แอปตัวอย่างใช้งานได้

การเปิดใช้ Google API

บทนำ

ไม่ว่าคุณจะต้องการใช้ Google API ใดในแอปพลิเคชัน คุณจะต้องเปิดใช้ API นั้น คุณเปิดใช้ API ได้จากบรรทัดคำสั่งหรือจาก Cloud Console กระบวนการเปิดใช้ API นั้นเหมือนกัน ดังนั้นเมื่อเปิดใช้ API หนึ่งแล้ว คุณก็จะเปิดใช้ API อื่นได้ในลักษณะเดียวกัน

ตัวเลือกที่ 1: gcloud อินเทอร์เฟซบรรทัดคำสั่ง (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

ตัวอย่างที่ 1: เปิดใช้ Cloud Vision API

gcloud services enable vision.googleapis.com

ตัวอย่างที่ 2: เปิดใช้ Google App Engine

gcloud services enable appengine.googleapis.com

ตัวอย่างที่ 3: เปิดใช้ API หลายรายการด้วยคำขอเดียว เช่น หาก Codelab นี้มีผู้ชมที่กำลังติดตั้งใช้งานแอปโดยใช้ Cloud Translation API กับ App Engine, Cloud Functions และ Cloud Run บรรทัดคำสั่งจะเป็นดังนี้

gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

คำสั่งนี้จะเปิดใช้ App Engine, Cloud Functions, Cloud Run และ Cloud Translation API นอกจากนี้ ยังเปิดใช้ Cloud Artifact Registry เนื่องจากเป็นที่ที่ระบบ Cloud Build ต้องลงทะเบียนอิมเมจคอนเทนเนอร์เพื่อทำให้ใช้งานได้ใน Cloud Run

ตัวเลือกที่ 2: Cloud Console

นอกจากนี้ คุณยังเปิดใช้ Google API ใน API Manager ได้ด้วย จาก Cloud Console ให้ไปที่ API Manager แล้วเลือกคลัง

fb0f1d315f122d4a.png

เริ่มป้อนชื่อ API ลงในแถบค้นหาเพื่อดูผลลัพธ์ที่ตรงกัน

2275786a24f8f204.png

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

7960a6752a1da767.png

กระบวนการเปิดใช้ API ทั้งหมดจะคล้ายกัน ไม่ว่าคุณจะต้องการใช้ Google API ใดก็ตาม

ค่าใช้จ่าย

คุณใช้ Google API หลายรายการได้โดยไม่มีค่าธรรมเนียม แต่จะมีค่าใช้จ่ายเมื่อใช้ผลิตภัณฑ์และ API ของ Google Cloud ส่วนใหญ่ เมื่อเปิดใช้ Cloud API ระบบอาจขอให้คุณระบุบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่ อย่างไรก็ตาม ผลิตภัณฑ์ Google Cloud บางอย่างมีระดับ"ฟรีไม่จำกัดเวลา" ซึ่งคุณต้องใช้เกินจึงจะมีการเรียกเก็บเงิน

ผู้ใช้ GCP รายใหม่มีสิทธิ์ใช้ช่วงทดลองใช้ฟรี ซึ่งปัจจุบันมีมูลค่า $300 USD และใช้ได้นาน 90 วันแรก โดยทั่วไปแล้ว Codelabs จะไม่มีการเรียกเก็บเงินมากนักหรือไม่มีเลย ดังนั้นเราขอแนะนำให้คุณรอจนกว่าจะพร้อมทดลองใช้จริงๆ ก่อนที่จะเริ่มช่วงทดลองใช้ฟรี โดยเฉพาะอย่างยิ่งเนื่องจากข้อเสนอนี้เป็นข้อเสนอแบบครั้งเดียว โควต้าของรุ่นฟรีจะไม่มีวันหมดอายุและจะมีผลไม่ว่าคุณจะใช้ช่วงทดลองใช้ฟรีหรือไม่ก็ตาม

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

ผลิตภัณฑ์ต่างๆ ของ Google จะมีการเรียกเก็บเงินที่แตกต่างกัน ดังนั้นโปรดดูเอกสารประกอบที่เหมาะสมเพื่อดูข้อมูลดังกล่าว

ตรวจสอบว่าได้เปิดใช้บริการที่ต้องการแล้ว

ตรวจสอบว่า Cloud Translation API ใน API Manager เป็นไปตามที่ระบุไว้ข้างต้น หากไม่ได้เปิดใช้แพลตฟอร์มแบบไร้เซิร์ฟเวอร์จากบรรทัดคำสั่ง คุณสามารถเปิดใช้ได้จากแดชบอร์ดของแต่ละแพลตฟอร์มใน Cloud Console ได้แก่ App Engine, Cloud Functions และ Cloud Run

แม้ว่าการเปิดใช้ API จาก Cloud Console จะให้ข้อมูลที่มองเห็นได้ แต่การใช้gcloudเครื่องมือจะเร็วกว่า ซึ่งใช้เวลาเพียงไม่กี่วินาทีในการเปิดใช้บริการทั้งหมด

$ gcloud services enable appengine.googleapis.com \
cloudfunctions.googleapis.com artifactregistry.googleapis.com \
run.googleapis.com translate.googleapis.com
Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.

ข้อมูลเพิ่มเติมเกี่ยวกับค่าใช้จ่าย

ส่วนด้านบนเกี่ยวกับต้นทุนเป็นข้อมูลทั่วไปใน Google API มาดูรายละเอียดเพิ่มเติมสำหรับบทแนะนำนี้กัน แม้ว่าโควต้ารายเดือนของ Translation API จะไม่ได้แสดงอยู่ในหน้าสรุประดับ "ฟรีตลอดเวลา" โดยรวม แต่หน้าการกำหนดราคาของ Translation API ระบุว่าผู้ใช้ทุกคนจะได้รับอักขระที่แปลแล้วจำนวนคงที่ในแต่ละเดือน คุณไม่ควรถูกเรียกเก็บเงินจาก API หากใช้งานต่ำกว่าเกณฑ์ดังกล่าว ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าใช้จ่ายในการใช้แพลตฟอร์มแบบไม่ใช้เซิร์ฟเวอร์ของ Google Cloud ได้ที่ส่วนค่าใช้จ่ายของที่เก็บ ส่วน "ล้างข้อมูล" ที่ท้ายบทจะอธิบายวิธีหยุดการเรียกเก็บเงินหลังจากทำ Codelab นี้เสร็จแล้ว

4. รับโค้ดแอปตัวอย่าง

ดาวน์โหลด ZIP หรือโคลนที่เก็บ

  • ดาวน์โหลดไฟล์ ZIP หรือโคลนที่เก็บด้วย git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • หากไม่มีสภาพแวดล้อมการพัฒนาในเครื่องและต้องการทำตามบทแนะนำนี้ใน Cloud Shell คุณสามารถโคลนที่เก็บด้วยคำสั่ง git clone เดียวกันได้
  • นอกจากนี้ คุณยังเข้าถึงไฟล์ ZIP ได้จากปุ่มโค้ดสีเขียว ดังที่แสดงในภาพหน้าจอต่อไปนี้

5cd6110c4414cf65.png

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

5. ยืนยันสภาพแวดล้อม Node.js

หากต้องการตั้งค่าสภาพแวดล้อม Node.js ให้ทำดังนี้

  1. ตรวจสอบว่าคุณได้ติดตั้ง Node (>=10) และ NPM (>=6) เวอร์ชันล่าสุดแล้ว
  2. ไปที่ตำแหน่งที่คุณโคลน repo (หรือแตกไฟล์ ZIP) จากนั้นไปที่โฟลเดอร์ cloud/nodejs
  3. ยืนยันว่า package.json อยู่ในรายการ แล้วเรียกใช้ npm install

สำหรับข้อ 1 ด้านบน คุณสามารถตรวจสอบเวอร์ชันที่มีในบรรทัดคำสั่งได้โดยทำดังนี้

$ node -v
v17.0.1
$ npm -v
8.1.0

6. ทัวร์ชมแอปตัวอย่าง

แอปตัวอย่างเป็นแอปที่ดัดแปลงมาจาก Google แปลภาษาแบบง่ายๆ ซึ่งจะแจ้งให้ผู้ใช้ป้อนข้อความเป็นภาษาอังกฤษและรับคำแปลที่เทียบเท่าของข้อความนั้นเป็นภาษาสเปน

ไฟล์การกำหนดค่า package.json จะระบุแพ็กเกจของบุคคลที่สามที่จำเป็นสำหรับแอปพลิเคชัน (โปรดทราบว่าอาจมีการอัปเดตเวอร์ชันของแพ็กเกจนอกเหนือจากที่ระบุไว้ที่นี่)

{
  "name": "cloud-nebulous-serverless-nodejs",
  "version": "0.0.1",
  "description": "Nebulous Serverless sample app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/test_neb.js"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/translate": "^6.3.1",
    "express": "^4.17.1",
    "nunjucks": "^3.2.3"
  },
  "devDependencies": {
    "mocha": "^9.1.3",
    "supertest": "^6.1.6"
  }
}

ตอนนี้ให้เปิดไฟล์ index.js เพื่อดูวิธีการทำงาน หากไม่รวมบรรทัดที่แสดงความคิดเห็นเกี่ยวกับการอนุญาตให้ใช้สิทธิ โค้ดจะปรากฏที่ด้านบนและด้านล่างดังนี้

const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');

const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();

const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
    parent = `projects/${result}`;
});


if (!process.env.FUNCTION_TARGET) {
    app.listen(PORT, () =>
        console.log(`Listening on port ${PORT}`)
    );
}

# . . . [translate() function definition] . . .

app.all('/', translate);
module.exports = {
    app
};
  1. requires จะนำฟังก์ชันการทำงานของเฟรมเวิร์กและการสร้างเทมเพลต รวมถึงไลบรารีของไคลเอ็นต์ Cloud Translation API มาให้
  2. ตัวแปรส่วนกลางแสดงถึงเว็บแอป รหัสโปรเจ็กต์ Cloud ไคลเอ็นต์ Translation API "เส้นทางตำแหน่ง" หลักสำหรับการเรียก Translation API และภาษา SOURCE และ TARGET ในกรณีนี้คือภาษาอังกฤษ (en) และภาษาสเปน (es) แต่คุณสามารถเปลี่ยนค่าเหล่านี้เป็นรหัสภาษาอื่นๆ ที่ Cloud Translation API รองรับได้
  3. องค์ประกอบแรกของแต่ละคู่ (SOURCE และ TARGET) คือรหัสภาษา ส่วนองค์ประกอบที่ 2 คือชื่อภาษา (และใช้เพื่อการแสดงผลเท่านั้นเนื่องจากไม่เกี่ยวข้องกับ API)
  4. บรรทัดไม่กี่บรรทัดที่ด้านล่างใช้เพื่อส่งคำขอ HTTP ทั้งหมดไปยัง translate() จากนั้นส่งออกออบเจ็กต์แอปพลิเคชัน app

สุดท้าย ตรงกลางของ index.js คือหัวใจของแอปพลิเคชัน ซึ่งก็คือฟังก์ชัน translate()

async function translate(req, rsp) {
    let text = null;
    let translated = null;
    if (req.method === 'POST') {
        text = req.body.text.trim();
        if (text) {
            const data = {
                contents: [text],
                parent: parent,
                targetLanguageCode: TARGET[0]
            };
            const [response] = await TRANSLATE.translateText(data);
            translated = response.translations[0].translatedText;
        }
    }
    const context = {
        orig:  {text: text, lc: SOURCE},
        trans: {text: translated, lc: TARGET}
    };
    rsp.render('index.html', context);
}

ฟังก์ชันหลักจะทำหน้าที่รับอินพุตของผู้ใช้และเรียกใช้ Translation API เพื่อทำงานหนัก มาดูรายละเอียดกัน

  1. รีเซ็ตตัวแปรพื้นฐานสำหรับแบบฟอร์ม โดยส่วนใหญ่จะใช้กับคำขอ GET เนื่องจากคำขอ POST จะมีข้อมูลที่แทนที่ข้อมูลเหล่านี้
  2. หากเป็น POST ให้คัดลอกข้อความที่จะแปล และหากข้อความไม่ว่างเปล่า ให้สร้างโครงสร้าง JSON ที่แสดงข้อกำหนดข้อมูลเมตาของ API จากนั้นเรียก API สำหรับบริการ
  3. เราไม่ได้ส่ง SOURCE[0] ไปยัง API ไปยังแหล่งที่มาภาษาอังกฤษที่เฉพาะเจาะจง เมื่อไม่ระบุภาษาต้นฉบับ คุณจะขอให้ API ตรวจหาภาษาต้นฉบับโดยอัตโนมัติ (ดู sourceLanguageCode ในเอกสาร)
  4. ไม่ว่าจะอย่างไรก็ตาม ให้จัดรูปแบบผลลัพธ์จริง (POST) หรือไม่มีข้อมูล (GET) ลงในบริบทของเทมเพลต แล้วแสดงผล

ส่วนภาพของแอปพลิเคชันอยู่ในไฟล์เทมเพลต index.html โดยจะแสดงผลการแปลก่อนหน้า (หากไม่มีจะแสดงเป็นช่องว่าง) ตามด้วยแบบฟอร์มที่ขอให้แปล

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #DDDDDD;
}
</style>
<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>

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

  1. เรียกใช้บริการในเครื่อง
  2. ทำให้ใช้งานได้กับ App Engine (สภาพแวดล้อมมาตรฐาน)
  3. ทำให้ใช้งานได้กับ Cloud Functions
  4. ทำให้ใช้งานได้กับ Cloud Run

7. ตัวเลือกที่ 1: เรียกใช้บริการในเครื่อง

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

หากต้องการเรียกใช้แอปตัวอย่างในเครื่อง คุณต้องทำตาม 3 ขั้นตอนต่อไปนี้

  1. สร้างบัญชีบริการ
  2. สร้างคู่คีย์สาธารณะ/ส่วนตัวของบัญชีบริการ
  3. ดาวน์โหลดไฟล์ข้อมูลเข้าสู่ระบบและรวมไว้กับโค้ดแอปพลิเคชัน
  4. เริ่มบริการ

ดูข้อมูลเกี่ยวกับบัญชีบริการ

บัญชีบริการเป็นกลไกการรักษาความปลอดภัยในการเข้าถึง Google API สำหรับแอปพลิเคชันบนระบบคลาวด์เมื่อเข้าถึงข้อมูลที่ไม่ได้เป็นของผู้ใช้ที่เป็นบุคคล เมื่อทำการติดตั้งใช้งานในระบบคลาวด์ แพลตฟอร์มการประมวลผลทั้งหมดของ Google Cloud (แบบไร้เซิร์ฟเวอร์และอื่นๆ) จะมีบัญชีบริการเริ่มต้นเพื่อลดเวลาในการเริ่มต้นใช้งานของผู้ใช้ใหม่ในระบบคลาวด์

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

สร้างคู่คีย์บัญชีบริการและดาวน์โหลดไฟล์ข้อมูลเข้าสู่ระบบ

ทำตามวิธีการในหน้านี้เพื่อสร้างบัญชีบริการและคู่คีย์สาธารณะ/ส่วนตัวสำหรับการเรียกใช้ในเครื่อง เมื่อสร้างคีย์บัญชีบริการ ระบบจะแจ้งให้คุณระบุสิทธิ์ที่ต้องการ อย่าลืมเลือก roles/cloudtranslate.user เพื่อให้คุณเข้าถึง API ได้สำเร็จ

เมื่อสร้างคู่คีย์เรียบร้อยแล้ว ระบบจะแจ้งให้คุณดาวน์โหลดไฟล์คีย์บัญชีบริการ ตั้งชื่อว่า credentials.json แล้วย้ายไปไว้ในโฟลเดอร์ระดับบนสุดของแอปพลิเคชัน ตอนนี้คุณต้องบอก Cloud SDK ให้ใช้ข้อมูลเข้าสู่ระบบเหล่านั้นโดยตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS ให้ชี้ไปยังไฟล์นั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการนี้ได้ในหน้านี้ซึ่งครอบคลุมการใช้งานบัญชีบริการ

เริ่มบริการ

เมื่อพร้อมที่จะดำเนินการต่อ ให้เปิดเซิร์ฟเวอร์ Express ในเครื่องด้วยคำสั่งต่อไปนี้

$ npm start

> cloud-nebulous-serverless-nodejs@0.0.1 start
> node index.js

Listening on port 8080

ไปที่เว็บเบราว์เซอร์เพื่อเชื่อมต่อกับ localhost:8080 แล้วคุณจะเห็นสิ่งที่คล้ายกับต่อไปนี้

adc6665b7ae13c40.png

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

fc154326080bf14f.png

เมื่อพอใจแล้ว ให้ออกจากเซิร์ฟเวอร์ด้วย ^C (control-C) แล้วออก ขอแสดงความยินดีที่ติดตั้งใช้งานในพื้นที่ได้สำเร็จ ข่าวดีคือการติดตั้งใช้งานในระบบคลาวด์นั้นง่ายกว่ามาก

การแก้ปัญหา

คุณได้รับข้อผิดพลาดเช่นนี้เมื่อขอคำแปลใช่ไหม

node:fs:2486
      handleErrorFromBinding(ctx);
      ^

Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
    . . .

วิธีแก้ปัญหา: ข้อผิดพลาดนี้หมายความว่าคุณสร้างบัญชีบริการและดาวน์โหลดไฟล์คู่คีย์สาธารณะ/ส่วนตัว credentials.json ไม่เสร็จสมบูรณ์ โปรดกลับไปที่ "ตัวเลือกที่ 1: เรียกใช้บริการในเครื่อง" และทำกระบวนการนี้ให้เสร็จสมบูรณ์ รวมถึงติดตั้งข้อมูลเข้าสู่ระบบในโฟลเดอร์หลักก่อนดำเนินการต่อ

8. ตัวเลือกที่ 2: ทำให้ใช้งานได้กับ App Engine (สภาพแวดล้อมมาตรฐาน)

ส่วนนี้ของโค้ดแล็บมีไว้สำหรับการติดตั้งใช้งานใน Node App Engine เท่านั้น หากไม่สนใจ ให้ไปที่ส่วนถัดไป

การติดตั้งใช้งานนี้ใช้ไฟล์การกำหนดค่า app.yaml ซึ่งจะบอก App Engine ว่าจะใช้รันไทม์ใดด้วยบรรทัดเดียว

runtime: nodejs16

ทั้ง Cloud Functions และ Cloud Run ไม่ได้ใช้ไฟล์ app.yaml หากคุณไม่ได้วางแผนที่จะใช้ App Engine คุณสามารถลบไฟล์นี้ได้อย่างปลอดภัย เมื่อพร้อมที่จะติดตั้งใช้งานใน App Engine ให้เรียกใช้คำสั่งนี้

$ gcloud app deploy

เมื่อเลือกภูมิภาคแล้ว เอาต์พุต gcloud app deploy จะมีรายละเอียดน้อยลงมากและควรมีลักษณะดังนี้

Services to deploy:

descriptor:                  [/private/tmp/nodejs/app.yaml]
source:                      [/private/tmp/nodejs]
target project:              [PROJECT_ID]
target service:              [default]
target version:              [2021...]
target url:                  [https://PROJECT_ID.REG_ABBR.appspot.com]
target service account:      [App Engine default service account]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                          ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json.

Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.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

To take a quick anonymous survey, run:
  $ gcloud survey

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

da28f951c33a2c3d.png

หากส่งคำขอ คุณจะพบว่าการทำงานจะเหมือนกับการติดตั้งใช้งานอื่นๆ ทั้งหมด

9. ตัวเลือกที่ 3: ติดตั้งใช้งานใน Cloud Functions

ส่วนนี้ของโค้ดแล็บมีไว้สำหรับการทำให้ Cloud Functions ของ Node ใช้งานได้เท่านั้น หากไม่สนใจ ให้ไปที่ส่วนถัดไป

ไม่มีไฟล์การกำหนดค่าใน Cloud Functions ดังนั้นเมื่อพร้อมที่จะทำให้ใช้งานได้ใน Cloud Functions ให้เรียกใช้คำสั่งนี้

$ gcloud functions deploy translate \
  --runtime nodejs16 \
  --entry-point app \
  --trigger-http \
  --region REGION \
  --allow-unauthenticated

โปรเจ็กต์ GCP อาจมี REGION เริ่มต้น แต่คุณใช้แฟล็ก --region เพื่อทำให้ฟังก์ชันใช้งานได้ในภูมิภาคที่เฉพาะเจาะจงได้ Cloud Functions จะไม่แจ้งให้คุณทราบเหมือนผลิตภัณฑ์ Cloud อื่นๆ ไม่ว่าคุณจะเลือกภูมิภาคใด เอาต์พุต gcloud functions deploy ควรมีลักษณะดังนี้

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
entryPoint: app
httpsTrigger:
  securityLevel: SECURE_OPTIONAL
  url: https://REGION-PROJECT_ID.cloudfunctions.net/translate
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/PROJECT_ID/locations/REGION/functions/translate
runtime: nodejs16
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip
status: ACTIVE
timeout: 60s
updateTime: '2021...'
versionId: '...'

ตอนนี้แอปของคุณพร้อมให้บริการทั่วโลกแล้ว คุณควรเข้าถึงแอปได้ที่ URL ที่มีรหัสโปรเจ็กต์ของคุณตามที่แสดงในเอาต์พุตการติดตั้งใช้งาน (ในส่วน "httpsTrigger/url") URL ควรมีลักษณะดังนี้ https://REGION-PROJECT_ID.cloudfunctions.net/translate ซึ่งจะแตกต่างกันไปตามภูมิภาคที่คุณเลือกและรหัสโปรเจ็กต์ Cloud ของคุณ

518f1c3165f2096d.png

10. ตัวเลือกที่ 4: ทำให้ใช้งานได้กับ Cloud Run

ส่วนนี้ของโค้ดแล็บมีไว้สำหรับการติดตั้งใช้งานใน Cloud Run เท่านั้น หากไม่สนใจ ให้ไปที่ส่วนถัดไป

Cloud Run ไม่มีไฟล์การกำหนดค่า ดังนั้นเมื่อพร้อมที่จะทําให้ใช้งานได้กับ Cloud Run ให้ทําตามวิธีการด้านล่าง

ตอนนี้คุณพร้อมที่จะทำให้บริการแปลภาษาใช้งานได้ใน Cloud Run แล้วโดยการเรียกใช้คำสั่งนี้

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed

เอาต์พุตควรมีลักษณะดังนี้ และมีข้อความแจ้งสำหรับขั้นตอนถัดไป

Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

Cloud Buildpacks จะสร้างแอปของคุณไปยัง Cloud Run คล้ายกับวิธีที่คุณจะทำหากเรียกใช้แอปในเครื่อง สำหรับผู้ใช้ Node.js จะเรียกใช้ npm install และ npm start สำหรับ Python จะเรียกใช้ pip install -r requirements.txt และเริ่มแอปจากวิธีการใน Procfile (หลักการเดียวกันนี้ใช้กับภาษาอื่นๆ ทั้งหมดที่ Cloud Buildpacks รองรับ) แอปจะพร้อมใช้งานเมื่อกระบวนการบิลด์เสร็จสมบูรณ์

จากนั้นแอปของคุณจะพร้อมให้บริการทั่วโลก (แม้ว่าจะติดตั้งใช้งานในระดับภูมิภาค) และเข้าถึงได้ที่ URL ที่มีรหัสโปรเจ็กต์ของคุณตามที่แสดงในเอาต์พุตการติดตั้งใช้งาน (ในส่วน "Service URL:"

169f6edf5f7d2068.png

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

31554e71cb80f1b4.png

11. บทสรุป

ยินดีด้วย คุณได้เรียนรู้วิธีเปิดใช้และใช้ Cloud Translation API, รับข้อมูลเข้าสู่ระบบที่จำเป็น และทำให้เว็บแอปอย่างง่ายใช้งานได้ใน Express ภายในเครื่อง, App Engine, Cloud Functions และ/หรือ Cloud Run โปรดดูข้อมูลเพิ่มเติมหรือเข้าถึงแอปเวอร์ชันอื่นๆ รวมถึง Codelab อื่นๆ ได้ที่โฟลเดอร์ repo

ล้างข้อมูล

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

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

ในส่วนต่อไปนี้ คุณจะเห็นสื่อการอ่านเพิ่มเติม รวมถึงแบบฝึกหัดที่แนะนำเพื่อเพิ่มพูนความรู้ที่ได้รับจากการทำแบบฝึกหัดนี้

การศึกษาเพิ่มเติม

ตอนนี้คุณมีประสบการณ์การใช้งาน Translation API บ้างแล้ว มาฝึกเพิ่มเติมเพื่อพัฒนาทักษะกัน หากต้องการดำเนินการตามเส้นทางการเรียนรู้ต่อ ให้แก้ไขแอปตัวอย่างของเราเพื่อทำสิ่งต่อไปนี้

  1. ทำ Codelab นี้ให้เสร็จสมบูรณ์ในรุ่นอื่นๆ ทั้งหมดเพื่อเรียกใช้ในเครื่องหรือติดตั้งใช้งานในแพลตฟอร์มการประมวลผลแบบไร้เซิร์ฟเวอร์ของ Google Cloud (ดูREADME ของที่เก็บ)
  2. ทำบทแนะนำนี้ให้เสร็จโดยใช้ภาษาโปรแกรมอื่น
  3. เปลี่ยนแอปพลิเคชันนี้ให้รองรับภาษาต้นฉบับหรือภาษาเป้าหมายอื่นๆ
  4. อัปเกรดแอปพลิเคชันนี้เพื่อให้แปลข้อความเป็นภาษาต่างๆ ได้มากกว่า 1 ภาษา หรือเปลี่ยนไฟล์เทมเพลตให้มีเมนูแบบเลื่อนลงของภาษาเป้าหมายที่รองรับ

ดูข้อมูลเพิ่มเติม

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation และ Google ML Kit

ผลิตภัณฑ์/หน้าอื่นๆ ของ Google Cloud

ใบอนุญาต

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