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

1. ภาพรวม

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

คุณจะทำบทแนะนำ JavaScript นี้ได้ด้วย Node.js ที่ใช้เว็บเฟรมเวิร์ก Express.js และคุณยังจะได้ทราบวิธีเข้าถึง Google Cloud APIs จากแพลตฟอร์มแบบ Serverless แอปทุกเวอร์ชันมาจาก "nebulous Serverless" ที่เก็บโอเพนซอร์ส ซึ่งมีแอปนี้ในเวอร์ชัน Python และ Codelab อิสระ ที่เก็บนี้ยังโฮสต์แอปที่คล้ายกันซึ่งแสดงให้นักพัฒนาแอปเห็นถึงวิธีเข้าถึง Google API ที่ไม่ใช่ระบบคลาวด์จากแพลตฟอร์มแบบ 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 ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

3. เปิดใช้งาน Translation API

ในส่วนนี้ คุณจะได้ดูวิธีเปิดใช้ Google APIs โดยทั่วไป สำหรับแอปตัวอย่างของเรา คุณจะต้องเปิดใช้ 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 โดยใช้โปรแกรม

เมื่อได้รับข้อมูลนี้ คุณสามารถใช้ Cloud Shell (หรือสภาพแวดล้อมการพัฒนาในเครื่องที่มีติดตั้งเครื่องมือบรรทัดคำสั่ง gcloud) แล้วเปิดใช้ API ได้ดังนี้

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 ได้ด้วย จาก Cloud Console ให้ไปที่ตัวจัดการ API แล้วเลือกไลบรารี

fb0f1d315f122d4a.png

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

2275786a24f8f204.png

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

7960a6752a1da767.png

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

ค่าใช้จ่าย

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

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

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

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

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

ตรวจสอบ Cloud Translation API ในตัวจัดการ API ตามคำแนะนำข้างต้น หากไม่ได้เปิดใช้แพลตฟอร์มแบบ Serverless จากบรรทัดคำสั่ง คุณก็เปิดใช้ได้จากหน้าแดชบอร์ดที่เกี่ยวข้องแต่ละรายการใน 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 APIs มาดูรายละเอียดที่เจาะจงมากขึ้นสำหรับบทแนะนำนี้กัน ขณะที่โควต้ารายเดือนไม่ได้แสดงใน"ฟรีไม่จำกัดเวลา" โดยรวม หน้าสรุประดับ หน้าราคาของ Translation API จะระบุว่าผู้ใช้ทั้งหมดได้รับอักขระที่แปลแล้วตามจำนวนคงที่ต่อเดือน คุณไม่ควรเสียค่าใช้จ่ายใดๆ จาก API หากคุณใช้งานต่ำกว่าเกณฑ์ดังกล่าว โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับค่าใช้จ่ายในการใช้แพลตฟอร์มแบบ Serverless ของ 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. ตรวจสอบว่าคุณได้ติดตั้งโหนดเวอร์ชันร่วมสมัย (>=10) และ NPM (>=6) แล้ว
  2. ไปยังตำแหน่งที่คุณโคลนที่เก็บ (หรือแตกไฟล์ 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. require มาพร้อมฟังก์ชันการทำงานของเฟรมเวิร์กและเทมเพลต รวมถึงไลบรารีของไคลเอ็นต์ Cloud Translation API
  2. ตัวแปรร่วมแสดงถึงเว็บแอป, รหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์, ไคลเอ็นต์ Translation API, "เส้นทางตำแหน่ง" ระดับบนสุด สำหรับการเรียก Translation API และ SOURCE และ TARGET ภาษา ในกรณีนี้จะเป็นภาษาอังกฤษ (en) และสเปน (es) แต่คุณเปลี่ยนค่าเหล่านี้เป็นรหัสภาษาอื่นที่Cloud Translation API รองรับได้
  3. องค์ประกอบแรกของแต่ละคู่ (SOURCE และ TARGET) คือรหัสภาษา ส่วนองค์ประกอบที่ 2 คือชื่อภาษา (และใช้เพื่อการแสดงผลเท่านั้น เนื่องจากไม่เกี่ยวข้องกับ API)
  4. ข้อมูล 2-3 บรรทัดด้านล่างมีไว้เพื่อส่งคำขอ 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: เรียกใช้บริการภายในเครื่อง

Codelab ส่วนนี้ใช้สำหรับการเรียกใช้ภายในเท่านั้น หากคุณติดตั้งใช้งานได้เฉพาะบนระบบคลาวด์เท่านั้น ให้ไปยังส่วนถัดไป

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

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

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

บัญชีบริการเป็นกลไกความปลอดภัยในการเข้าถึง Google APIs สำหรับแอปพลิเคชันในระบบคลาวด์เมื่อเข้าถึงข้อมูลที่ไม่ใช่ของผู้ใช้ที่เป็นมนุษย์ เมื่อทำให้ใช้งานได้กับระบบคลาวด์ แพลตฟอร์มการประมวลผลของ 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 (สภาพแวดล้อมมาตรฐาน)

Codelab ส่วนนี้มีไว้เพื่อทำให้ใช้งานได้กับ Node App Engine เท่านั้น หากไม่สนใจก็ดูต่อได้ในส่วนถัดไป

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

runtime: nodejs16

ไฟล์ app.yaml ไม่ได้ใช้โดย Cloud Functions หรือ Cloud Run หากคุณไม่ได้วางแผนที่จะใช้ 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 ที่มีรหัสโปรเจ็กต์ และควรเห็นเอาต์พุตคล้ายกับเวอร์ชัน Local Express แต่โปรดทราบว่าแอปทํางานในระบบคลาวด์และพร้อมให้บริการทั่วโลก

da28f951c33a2c3d.png

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

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

ส่วนนี้ของ Codelab มีไว้สำหรับการทำให้ใช้งานได้กับ Node 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 ซึ่งจะแตกต่างกันไปตามภูมิภาคที่เลือกและรหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์

518f1c3165f2096d.png

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

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

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

169f6edf5f7d2068.png

แปลอะไรก็ได้เพื่อให้ใช้งานได้

31554e71cb80f1b4.png

11. บทสรุป

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

ล้างข้อมูล

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

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

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

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

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

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

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

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpack, Container Registry, Artifact Registry

Google Cloud Translation และ Google ML Kit

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

ใบอนุญาต

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