部署基本 ";Google 翻譯"App Engine、Cloud Functions 和 Cloud Run 上的 Express.js 應用程式

1. 總覽

這個系列的程式碼研究室 (循序漸進的實作教學課程) 旨在協助開發人員瞭解部署應用程式時有哪些不同的選項。您將瞭解如何在簡單的網頁應用程式中使用 Google Cloud Translation API。這個應用程式可以在本機執行,或部署至 Cloud 無伺服器運算平台 (App Engine、Cloud FunctionsCloud Run)。

您將使用採用 Express.js 網路架構的 Node.js 執行 JavaScript 教學課程。您也將學到如何從我們的無伺服器平台存取 Google Cloud API。這個應用程式的所有版本都來自「神經無伺服器」開放原始碼存放區,其中包含這個應用程式的 Python 版本和獨立程式碼研究室。這個存放區也會託管類似的應用程式,方便開發人員瞭解如何從我們的無伺服器平台存取非雲端的 Google API。

本程式碼研究室著重於將應用程式部署至上述粗體的平台。

你將瞭解如何

軟硬體需求

  • Google Cloud 專案,且具備有效的 Cloud Billing 帳戶
  • 安裝在本機環境中執行的網路架構 ( 適用於 Python 教學課程的使用者 Flask,或為執行 JavaScript/Node.js 教學課程的人員使用 Express)
  • 至少一個已啟用 Google Cloud 部署作業的無伺服器運算平台
  • 基本程式設計技能 (Python 或 JavaScript/Node.js)
  • 具備基本作業系統指令的知識

問卷調查

您會如何使用這個教學課程?

閱讀並完成練習 唯讀

針對以 Python 或 Node.js 開發的經驗,您會給予什麼評價?

新手 中級 還算容易

針對使用 Google Cloud 服務的經驗,您會給予什麼評價?

新手 中級 還算容易

2. 設定和需求

自修環境設定

  1. 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,請隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  • 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

3. 啟用 Translation API

在本節中,您將大致瞭解如何啟用 Google API。在範例應用程式中,您將啟用 Cloud Translation API。也會啟用 App Engine、Cloud Functions 和/或 Cloud Run (加上 Cloud Artifact Registry),這取決於您要部署範例應用程式的目標平台。

啟用 Google API

簡介

無論您在應用程式中要使用哪個 Google API,都必須啟用 API。API 可透過指令列或 Cloud 控制台啟用。API 的啟用程序完全相同,因此您只要啟用一個 API,就能以同樣的方式執行其他 API。

選項 1: gcloud 指令列介面 (Cloud Shell 或本機環境)

雖然透過 Cloud 控制台啟用 API 較為常見,但有些開發人員偏好透過指令列完成所有事項。方法是查詢 API 的「服務名稱」。網址類似於: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。舉例來說,如果本程式碼研究室的檢視者使用 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 控制台

您也可以在 API 管理員中啟用 Google API。在 Cloud 控制台中,前往「API 管理員」,然後選取「程式庫」

fb0f1d315f122d4a.png

開始在搜尋列中輸入 API 名稱即可查看相符結果:

2275786a24f8f204.png

選取您要啟用的 API,然後按一下「Enable」按鈕:

7960a6752a1da767.png

無論您要使用哪一個 Google API,啟用所有 API 的程序都大同小異。

費用

許多 Google API 都無須付費即可使用,但大部分的 Google Cloud 產品與 API 使用都需要付費。啟用 Cloud API 時,系統可能會要求您提供有效的帳單帳戶。不過,部分 Google Cloud 產品提供的是「一律免費」項目層級,必須超過這個額度才會產生帳單費用。

GCP 新使用者符合免費試用資格,目前前 90 天可折抵 $300 美元。使用程式碼研究室通常不會產生太多費用,也不會產生任何費用,因此建議您先準備免費試用,直到準備好進行試用為止,特別是一次性優惠。無論您是否使用免費試用,都沒有效期限制,而且免費方案配額沒有期限。

啟用 API 前,使用者應先參考任何 API 的定價資訊 (例如 Cloud Vision API 定價 頁面),特別是該 API 是否提供免費方案,以及 API 的內容為何。只要不超過每日或每月的匯總上限,就不必支付任何費用。定價和免費方案會因 Google 產品群組 API 而異。範例:

各項 Google 產品的計費方式各有不同,因此請務必參閱相應說明文件。

確認已啟用所需服務

確認 API 管理員中的 Cloud Translation API (如上所示)。如果您尚未透過指令列啟用無伺服器平台,可以在 Cloud 控制台的個別資訊主頁中進行這項操作:App EngineCloud FunctionsCloud Run

雖然從 Cloud 控制台啟用 API 可以在視覺上提供豐富的資訊,但使用 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 的定價頁面,指出所有使用者每個月都能獲得固定的翻譯字元數量。如果未超過該門檻,API 不會產生任何費用。如要進一步瞭解使用 Google Cloud 無伺服器平台的費用,請參閱存放區的「費用」一節。「清理」部分結尾處,將說明如何在完成本程式碼研究室後停止產生帳單。

4. 取得範例應用程式的程式碼

下載 ZIP 或複製存放區

  • 下載 ZIP 檔案,或使用 git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git 複製存放區
  • 如果您沒有本機開發環境,而且想透過 Cloud Shell 執行本教學課程,可以使用相同 git clone 指令複製存放區。
  • 您也可以透過綠色的「Code」按鈕存取 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. 全域變數代表網頁應用程式、Cloud 專案 ID、Translation API 用戶端、父項「位置路徑」以及 SOURCETARGET 語言。在本例中為英文 (en) 和西班牙文 (es),但您可以將這些值變更為 Cloud Translation API 支援的其他語言
  3. 每對組合的第一個元素 (SOURCETARGET) 是語言代碼,第二個元素則是語言名稱 (僅供顯示,因為與 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,請擷取要翻譯的文字;如為空白,請建立代表 API 中繼資料要求的 JSON 結構。然後呼叫 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>

在教學課程的其餘部分,您可以選擇全部或全部四個選項來部署及執行這個應用程式。所有部署作業皆為選用,也就是說,您可以執行全部或所有部署作業。

  1. 在本機執行服務
  2. 部署至 App Engine (標準環境)
  3. 部署至 Cloud Functions
  4. 部署至 Cloud Run

7. 做法 1:在本機執行服務

程式碼研究室的這一節僅適用於本機執行。如果只要部署至雲端,請繼續前往下一節。

如要在本機執行範例應用程式,必須完成以下三個不同步驟:

  1. 建立服務帳戶
  2. 建立服務帳戶公開/私密金鑰組
  3. 下載憑證檔案和與應用程式程式碼組合
  4. 啟動服務

瞭解服務帳戶

服務帳戶是一種安全機制,可在存取雲端應用程式時,存取不屬於真人使用者的資料。部署至雲端時,所有 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:在本機執行服務」並完成這個程序,並在主資料夾中安裝 Crate,再繼續操作。

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

由於您的應用程式現已在全球推出,您應可透過包含專案 ID 的網址存取該應用程式。此外,您應該會看到與本機 Express 版本類似的輸出內容,但請注意,應用程式是在雲端執行,也可供世界各地的使用者使用:

da28f951c33a2c3d.png

提交要求之後,您會發現該要求的運作方式與其他部署作業相同。

9. 選項 3:部署至 Cloud Functions

程式碼研究室的此部分僅適用於部署至 Node Cloud Functions。如果不感興趣,請繼續參閱下一節。

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: '...'

由於您的應用程式現已在全球各地上線,您應該可以透過含有專案 ID 的網址存取應用程式,如部署輸出內容 (在「httpsTrigger/url」底下) 所示。網址應如下所示:https://REGION-PROJECT_ID.cloudfunctions.net/translate,這會因您選取的區域和 Cloud 專案 ID 而異。

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 Buildpack 將應用程式與 Cloud Run 整合,就像在本機執行應用程式一樣。針對 Node.js 使用者,它會執行 npm installnpm start。如果是 Python,系統會執行 pip install -r requirements.txt,並依據 Procfile 中的指示啟動應用程式。(這項原則也適用於 Cloud Buildpacks 支援的所有其他語言)。建構程序完成後,您的應用程式就可以準備開始運作。

接著,您的應用程式 (僅於特定地區部署) 可在全球使用,使用者可以透過包含專案 ID 的網址,開啟部署作業輸出內容,如「Service URL」底下:

169f6edf5f7d2068.png

趕快翻譯,看看成效如何!

31554e71cb80f1b4.png

11. 結語

恭喜!您已瞭解如何啟用及使用 Cloud Translation API、取得必要憑證,以及如何在本機將簡易網頁應用程式部署至 App Engine、Cloud Functions 和/或 Cloud Run。請查看 repo 資料夾瞭解詳情,或存取這個應用程式的其他版本和其他程式碼研究室。

清除所用資源

Cloud Translation API 可讓您每月免費處理固定數量的翻譯字元。App Engine 也提供免費配額Cloud FunctionsCloud Run 也是如此。超過上述任一額度時,就必須支付費用。如果您打算繼續下一個程式碼研究室,則不必關閉應用程式。

但是,如果您還沒準備好進行下一個教學課程,或擔心網際網路發現您剛剛部署的應用程式,請停用 App Engine 應用程式刪除 Cloud 函式停用 Cloud Run 服務,以免產生費用。當您準備好前往下一個程式碼研究室時,即可重新啟用。另一方面,如果您不打算繼續使用這個應用程式或其他程式碼研究室,且想要徹底刪除所有內容,可以關閉專案

此外,部署至 Google Cloud 無伺服器運算平台會產生少許建構和儲存空間費用Cloud Build 提供的免費配額與 Cloud Storage 相同。為提升資訊透明度,Cloud Build 會建構應用程式映像檔,並將映像檔儲存在其後續的 Cloud Container RegistryArtifact Registry 中。這個映像檔的儲存空間會佔用部分配額,如同網路輸出圖片傳輸至服務一般。不過,您可能居住的區域沒有這類免費方案,因此請留意儲存空間用量,盡可能降低潛在費用。

12. 其他資源

以下各節提供其他閱讀素材和推薦練習,有助您增強完成本教學課程後獲得的知識。

其他研究

您已經瞭解過 Translation API 的經驗,現在讓我們進行一些額外的練習,進一步培養您的技能。如要繼續學習路徑,請修改範例應用程式,執行下列操作:

  1. 完成本程式碼研究室的所有其他版本,以便在本機執行或部署至 Google Cloud 無伺服器運算平台 (請參閱存放區 README)。
  2. 使用其他程式設計語言完成教學課程。
  3. 變更這個應用程式,支援不同的原文或譯文語言。
  4. 升級這個應用程式後,即可將文字翻譯成多種語言。變更範本檔案,加入支援的目標語言下拉式選單。

瞭解詳情

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks、Container Registry、Artifact Registry

Google Cloud Translation 和 Google ML 套件

其他 Google Cloud 產品/頁面

授權

本教學課程採用的是創用 CC 姓名標示 2.0 通用授權,而存放區中的原始碼是依據 Apache 2 授權。