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

1. 總覽

這一系列的程式碼研究室 (自學式實作教學課程) 旨在協助開發人員瞭解部署應用程式時的各種選項。您將瞭解如何在簡單的網頁應用程式中使用 Google Cloud Translation API。這個應用程式可以在本機執行,也可以部署至 Cloud 無伺服器運算平台 (App Engine、Cloud Functions 或 Cloud 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.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.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 控制台

您也可以在 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 天內體驗 Google Cloud。Codelab 通常不會產生任何費用,因此建議您等到真正準備好試用時再啟用免費試用方案,畢竟這是一次性優惠。免費方案配額不會過期,無論是否使用免費試用方案,都適用這項配額。

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

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

確認已啟用所需服務

如上所述,請確認 API 管理工具中的 Cloud Translation API。如果您未從指令列啟用無伺服器平台,可以透過 Cloud Console 中各平台的專屬資訊主頁啟用:App Engine、Cloud Functions、Cloud 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. 全域變數代表網頁應用程式、雲端專案 ID、Translation API 用戶端、Translation API 呼叫的父項「位置路徑」,以及 SOURCE 和 TARGET 語言。在本例中,這些值為英文 (en) 和西班牙文 (es),但您可以隨意將這些值變更為 Cloud Translation API 支援的其他語言代碼。
  3. 每對元素的第一個元素 (SOURCE 和 TARGET) 是語言代碼,第二個元素是語言名稱 (僅用於顯示,與 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,具體網址會因您選取的區域和雲端專案 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 install 和 npm 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 Functions 和 Cloud Run 也是如此。如果超過任一限制,系統就會向你收費。如果你打算繼續下一個程式碼研究室,則不必關閉應用程式。

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

此外,部署至 Google Cloud 無伺服器運算平台會產生少許建構和儲存空間費用。Cloud Build 和 Cloud Storage 都有各自的免費配額。為提高透明度,Cloud Build 會建構應用程式映像檔,然後儲存在 Cloud Container Registry 或後繼服務 Artifact 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 Kit

其他 Google Cloud 產品/頁面

授權

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