基本的な「Google 翻訳」をデプロイするApp Engine、Cloud Functions、Cloud Run 上の Express.js アプリ

1. 概要

この一連の Codelab(ご自分のペースで進められる実践型のチュートリアル)は、アプリケーションのデプロイ時に利用できるさまざまなオプションをデベロッパーが理解できるよう支援することを目的としています。このチュートリアルでは、シンプルなウェブ アプリケーションで Google Cloud Translation API を使用する方法を学習します。このアプリは、ローカルで実行することも、Cloud サーバーレス コンピューティング プラットフォーム(App Engine、Cloud Functions、または Cloud Run)にデプロイすることもできます。

この JavaScript チュートリアルでは、Express.js ウェブ フレームワークを使用して Node.js を使用します。また、サーバーレス プラットフォームから Google Cloud APIs にアクセスする方法についても説明します。このアプリのすべてのバージョンは、「nebulous serverless」オープンソース リポジトリにあります。このリポジトリには、このアプリの Python バージョンと独立した Codelab が含まれています。このリポジトリには、デベロッパーがサーバーレス プラットフォームから Cloud 以外の Google API にアクセスする方法を示す同様のアプリもホストされています。

この Codelab では、上記の太字のプラットフォームにこのアプリをデプロイする方法について説明します。

方法を学ぶ対象

必要なもの

  • 有効な Cloud 請求先アカウントが設定された Google Cloud プロジェクト
  • ローカルで実行するためにインストールされたウェブ フレームワーク(Python チュートリアルを行う場合は Flask、JavaScript/Node.js チュートリアルを行う場合は Express
  • Google Cloud デプロイ用に有効になっているサーバーレス コンピューティング プラットフォームが少なくとも 1 つある
  • 基本的なプログラミング スキル(Python または JavaScript/Node.js)
  • 基本的なオペレーティング システム コマンドに関する実務知識

アンケート

このチュートリアルの利用方法をお選びください。

内容を読んで演習をやり遂げる 内容を読むだけ

Python または Node.js での開発経験はどの程度ありますか?

初心者 中級者 上級者

Google Cloud サービスの使用経験はどの程度ありますか?

初心者 中級者 上級者

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「PROJECT_ID」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。
  • 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。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 を有効にするプロセスは同じです。1 つの API を有効にしたら、同じ方法で別の API を有効にできます。

オプション 1: gcloud コマンドライン インターフェース(Cloud Shell またはローカル環境)

Cloud コンソールから API を有効にするのが一般的ですが、コマンドラインからすべてを実行することを好むデベロッパーもいます。これを行うには、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: 1 つのリクエストで複数の 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 Run にデプロイするために、Cloud Build システムでコンテナ イメージを登録する必要があるため、Cloud Artifact Registry を有効にします。

オプション 2: Cloud Console

API Manager で Google API を有効にすることもできます。Cloud Console から API Manager に移動し、[ライブラリ] を選択します。

fb0f1d315f122d4a.png

検索バーに API の名前を入力し始めると、一致する結果が表示されます。

2275786a24f8f204.png

有効にする API を選択し、[有効にする] ボタンをクリックします。

7960a6752a1da767.png

使用する Google API に関係なく、すべての API を有効にするプロセスは同様です。

費用

多くの Google API は無料でご利用いただけますが、ほとんどの Google Cloud プロダクトと API の使用には費用がかかります。Cloud APIs を有効にすると、有効な請求先アカウントの入力を求められる場合があります。ただし、一部の Google Cloud プロダクトには、超過した場合のみに料金が発生する Always Free 枠が用意されています。

GCP を初めてご利用になるお客様は、無料トライアル(現在は 300 米ドル相当、最初の 90 日間有効)をご利用いただけます。Codelab では通常、課金はほとんど発生しないため、無料トライアルは実際にテストする準備が整うまでお待ちいただくことをおすすめします。特に、無料トライアルは 1 回限りの特典であるため、ご注意ください。無料枠の割り当ては期限切れにならず、無料トライアルを使用するかどうかに関係なく適用されます。

API を有効にする前に、料金情報を確認してください(例: Cloud Vision API の料金 ページ)。特に、無料枠があるかどうか、ある場合はどのようなものかを確認してください。使用量の合計が指定された 1 日または 1 か月の上限を超えない限り、料金は発生しません。料金と無料枠は、Google プロダクト グループ API によって異なります。例:

Google プロダクトごとに課金方法が異なるため、該当するドキュメントで情報を確認してください。

目的のサービスが有効になっていることを確認する

上記の手順に沿って、API Manager で 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 サーバーレス プラットフォームを使用した場合の費用の詳細については、リポジトリの費用のセクションをご覧ください。最後にある「クリーンアップ」セクションでは、この Codelab の完了後に課金が発生しないようにする方法について説明します。

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. 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 呼び出しの親「ロケーション パス」、SOURCE 言語と TARGET 言語を表します。この例では、英語(en)とスペイン語(es)を使用していますが、これらの値は Cloud Translation API でサポートされている他の言語コードに変更できます。
  3. 各ペアの最初の要素(SOURCETARGET)は言語コードで、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 の場合は、翻訳するテキストを取得し、空でない場合は、API メタデータの要件を表す JSON 構造を作成します。次に、サービスの API を呼び出します。
  3. 特定の英語ソースの API に SOURCE[0] を渡していません。ソース言語を省略すると、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 API にアクセスするためのセキュリティ メカニズムです。クラウドにデプロイする場合、クラウドへのユーザーのオンボーディングの立ち上げ時間を短縮するために、すべての Google Cloud コンピューティング プラットフォーム(サーバーレスなど)でデフォルトのサービス アカウントが提供されます。

デフォルトのサービス アカウントには、「手続きの簡素化」のために幅広い権限が付与されていますが、本番環境のサービスをリリースする準備をする際は、「最小権限」のベスト プラクティスに従い、アプリが正しく動作するために必要な権限のみを付与したユーザー管理のサービス アカウントを作成することを強くおすすめします。いずれにしても、ローカル デプロイ用のデフォルトのサービス アカウントはないため、サービス アカウントとサービス アカウント キー(実際には公開鍵/秘密鍵のペア)を作成し、それらの認証情報をアプリケーション コードで使用できるようにする必要があります。

サービス アカウントの鍵ペアを作成して認証情報ファイルをダウンロードする

このページの手順に沿って、ローカルで実行するためのサービス アカウントと公開鍵/秘密鍵のペアを作成します。サービス アカウント キーを作成するときに、必要な権限を指定するよう求められます。API に正常にアクセスできるように、必ず roles/cloudtranslate.user を選択してください。

鍵ペアが正常に作成されると、サービス アカウント キーファイルのダウンロードを求めるメッセージが表示されます。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 に 1 行で指定します。

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

アプリが世界中で利用可能になったので、プロジェクト ID を含む URL でアクセスできるようになりました。ローカルの Express バージョンと同様の出力が表示されますが、クラウドで実行され、世界中で利用可能になっていることに注意してください。

da28f951c33a2c3d.png

リクエストを送信すると、他のすべてのデプロイと同じように動作します。

9. オプション 3: Cloud Functions にデプロイする

このセクションの Codelab は、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: '...'

アプリが世界中で利用可能になったので、デプロイの出力(「httpsTrigger/url」の下)に表示されているように、プロジェクト ID を含む URL でアプリにアクセスできるようになります。URL は https://REGION-PROJECT_ID.cloudfunctions.net/translate のようになります。これは、選択したリージョンと Cloud プロジェクト ID によって異なります。

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 Buildpacks は、アプリをローカルで実行する場合とほぼ同じように、アプリを Cloud Run にビルドします。Node.js ユーザーの場合、npm installnpm start が実行されます。Python の場合、pip install -r requirements.txt を実行し、Procfile の手順に沿ってアプリを起動します。(これは、Cloud Buildpacks でサポートされている他のすべての言語にも当てはまります)。ビルドプロセスが完了すると、アプリを使用できるようになります。

アプリは(リージョンにデプロイされますが)グローバルに利用可能になり、デプロイ出力(「Service URL:」の下)に示されているように、プロジェクト ID を含む URL でアクセスできます。

169f6edf5f7d2068.png

何かを翻訳して、動作を確認してみましょう。

31554e71cb80f1b4.png

11. まとめ

おめでとうございます!Cloud Translation API を有効にして使用する方法、必要な認証情報を取得する方法、シンプルなウェブアプリをローカルの Express、App Engine、Cloud Functions、Cloud Run にデプロイする方法について説明しました。詳細や、このアプリの他のバージョンや他の Codelab にアクセスするには、リポジトリ フォルダをご覧ください。

クリーンアップ

Cloud Translation API を使用すると、毎月一定量の翻訳文字を無料で実行できます。App Engine には無料割り当てがあり、Cloud FunctionsCloud Run にも同様の割り当てがあります。いずれかを超えると、料金が発生します。次の Codelab に進む予定がある場合は、アプリをシャットダウンする必要はありません。

ただし、次のチュートリアルに進む準備がまだ完了していない場合や、デプロイしたばかりのアプリがインターネットに公開されることを懸念している場合は、App Engine アプリを無効にするCloud Functions を削除する、または Cloud Run サービスを無効にすることで、課金されないようにできます。次の Codelab に進む準備ができた時点で、再度有効にできます。ただし、このアプリケーションや他の Codelab を続行せず、すべてを完全に削除する場合は、プロジェクトをシャットダウンしてください。

また、Google Cloud サーバーレス コンピューティング プラットフォームにデプロイすると、ビルドとストレージの費用がわずかに発生しますCloud Build には独自の無料割り当てがあり、Cloud Storage にも独自の無料割り当てがあります。透明性を高めるため、Cloud Build はアプリケーション イメージをビルドし、そのイメージは Cloud Container Registry または後継の Artifact Registry に保存されます。そのイメージの保存には、その割り当ての一部が使用されます。また、そのイメージをサービスに転送する際の下りネットワークにも、その割り当ての一部が使用されます。ただし、お住まいの地域でこのような無料枠が提供されていない可能性もあります。そのため、保存容量の使用状況を把握して、費用を最小限に抑えるようにしてください。

12. 参考情報

次のセクションでは、このチュートリアルを完了して得た知識を補完するための追加の資料と推奨される演習を紹介します。

追加の学習

Translation API の経験を積んだので、スキルをさらに高めるための追加の演習を行いましょう。学習を続けるには、サンプルアプリを変更して次のことを行います。

  1. ローカルで実行するか、Google Cloud サーバーレス コンピューティング プラットフォームにデプロイするには、この Codelab の他のエディションをすべて完了してください(リポジトリの 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 プロダクト/ページ

ライセンス

このチュートリアルはクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されていますが、リポジトリ内のソースコードは Apache 2 により使用許諾されています。