部署基本 ";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。這個應用程式的所有版本都來自「nebulous serverless」開放原始碼存放區,其中包含這個應用程式的 Python 版本和獨立的程式碼研究室。這個存放區也提供類似的應用程式,向開發人員展示如何從無伺服器平台存取非 Cloud 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 未使用的字元字串,您隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中不得重複,且設定後即無法變更。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,都必須啟用。您可以從指令列或 Cloud 控制台啟用 API。啟用 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 Console

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

fb0f1d315f122d4a.png

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

2275786a24f8f204.png

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

7960a6752a1da767.png

無論要使用哪個 Google API,啟用所有 API 的程序都差不多。

費用

許多 Google API 都能免費使用,但使用大部分 Google Cloud 產品和 API 時,則會產生費用。啟用 Cloud API 時,系統可能會要求您提供有效的帳單帳戶。不過,部分 Google Cloud 產品提供「一律免費」方案,您必須超出方案限制,才會產生帳單費用。

新加入 GCP 的使用者符合免費試用資格,目前可獲得價值 $300 美元的抵免額,在前 90 天內使用。Codelabs 通常不會產生任何費用,因此建議您先不要使用免費試用方案,等到真正準備好要試用時再啟用,因為這是一次性優惠。免費方案配額不會過期,無論是否使用免費試用方案,都適用這項配額。

啟用任何 API 前,使用者應先參考價格資訊 (例如:Cloud Vision API 價格 頁面),特別是注意是否有免費層級,以及免費層級的內容。只要您在指定每日或每月總計限制內,就不會產生任何費用。Google 產品群組 API 的價格和免費層級各不相同。範例:

不同 Google 產品的計費方式不同,請務必參閱相關說明文件瞭解詳情。

確認已啟用所需服務

如上所述,請確認 API 管理工具中的 Cloud Translation API。如果您未從指令列啟用無伺服器平台,可以透過 Cloud Console 中各平台的專屬資訊主頁啟用:App EngineCloud FunctionsCloud Run

雖然從 Cloud Console 啟用 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 複製 repo
  • 如果您沒有本機開發環境,並希望在 Cloud Shell 中完成本教學課程,可以在該處使用相同的 git clone 指令複製存放區。
  • 您也可以透過綠色的「Code」按鈕存取 ZIP 檔案,如下列螢幕截圖所示:

5cd6110c4414cf65.png

現在您已備妥所有項目,請建立資料夾的完整副本,以便進行這個教學課程,因為這可能涉及刪除或變更檔案。如要進行其他部署作業,可以複製原始部署作業,不必再次複製或下載。

5. 確認 Node.js 環境

如要設定 Node.js 環境,請按照下列步驟操作:

  1. 確認已安裝新版 Node (版本 >=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 用戶端、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 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

現在您的應用程式已在全球推出,您應該可以透過含有專案 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 Buildpacks 會將應用程式部署至 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、取得必要憑證,以及將簡單的網頁應用程式部署至本機的 Express、App Engine、Cloud Functions 和/或 Cloud Run。如要瞭解詳情或存取這個應用程式的其他版本,以及其他程式碼研究室,請參閱存放區資料夾

清除所用資源

Cloud Translation API 每月提供固定額度的免費翻譯字元。App Engine 也提供免費配額Cloud FunctionsCloud Run 也是如此。如果超過任一限制,就會產生費用。如果您打算繼續下一個程式碼研究室,則不必關閉應用程式。

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

此外,部署至 Google Cloud 無伺服器運算平台會產生少許建構和儲存空間費用Cloud BuildCloud Storage 都有各自的免費配額。為提高透明度,Cloud Build 會建構應用程式映像檔,然後儲存在 Cloud Container Registry 或後繼服務 Artifact Registry 中。儲存該圖片會耗用部分配額,將圖片傳輸至服務時也會耗用網路輸出量。不過,你所在的區域可能沒有這類免付費層級,因此請留意儲存空間用量,盡量減少潛在費用。

12. 其他資源

在接下來的章節中,您可以找到額外的閱讀資料和建議練習,進一步擴充完成本教學課程所學到的知識。

其他研究

現在您已具備 Translation API 的使用經驗,接下來請完成一些額外練習,進一步提升技能。如要繼續學習,請修改範例應用程式,完成下列操作:

  1. 完成本程式碼研究室的所有其他版本,即可在本機執行或部署至 Google Cloud 無伺服器運算平台 (請參閱 repo 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 Kit

其他 Google Cloud 產品/頁面

授權

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