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 では、上記の太字のプラットフォームへのこのアプリのデプロイに焦点を当てます。
方法を学ぶ対象
- Google Cloud APIs、特に Cloud Translation API(advanced/v3)を使用する
- 基本的なウェブ アプリケーションをローカルで実行するか、Cloud サーバーレス コンピューティング プラットフォームにデプロイする
必要なもの
- 有効な Cloud 請求先アカウントを持つ Google Cloud プロジェクト
- ローカルで実行するようにインストールされたウェブ フレームワーク(Python チュートリアルを行う場合は Flask、JavaScript/Node.js チュートリアルを行う場合は Express)
- Google Cloud デプロイメントで少なくとも 1 つのサーバーレス コンピューティング プラットフォームが有効になっていること
- 基本的なプログラミング スキル(Python または JavaScript/Node.js)
- 基本的なオペレーティング システム コマンドに関する実用的な知識がある
アンケート
このチュートリアルの利用方法をお選びください。
<ph type="x-smartling-placeholder">Python または Node.js での開発経験はどの程度ありますか?
Google Cloud サービスの使用経験はどの程度ありますか?
<ph type="x-smartling-placeholder">2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「
PROJECT_ID
」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。 - 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、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 はコマンドラインまたは 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 コンソール
API Manager で Google API を有効にすることもできます。Cloud コンソールで [API Manager] に移動し、[ライブラリ] を選択します。
検索バーに API の名前を入力すると、一致する結果が表示されます。
有効にする API を選択し、[有効にする] ボタンをクリックします。
どの Google API を使用する場合でも、すべての API を有効にする手順はほぼ同じです。
費用
多くの Google API は料金なしで使用できますが、ほとんどの Google Cloud プロダクトと API には費用がかかります。Cloud APIs を有効にするときに、有効な請求先アカウントを求められることがあります。ただし、一部の Google Cloud プロダクトには「無料枠」 の上限を超えないようにしてください。超過すると請求料金が発生します。
GCP の新規ユーザーは無料トライアルをご利用いただけます。現在は最初の 90 日間、300 米ドルでご利用いただけます。Codelab には通常、高額な料金や料金は発生しません。特に 1 回限りの特典であるため、実際に試乗する準備が整うまで無料トライアルは継続しないことをおすすめします。無料枠の割り当てに有効期限はなく、無料トライアルを使用しているかどうかに関係なく適用されます。
有効にする前に、API の料金情報(Cloud Vision API の料金 ページなど)を参照する必要があります。特に、無料枠があるかどうかと、無料枠がある場合はその内容に注意してください。指定された 1 日または 1 か月の上限を超えない限り、料金は発生しません。料金と無料枠は、Google 商品グループの API によって異なります。例:
- Google Cloud/GCP - プロダクトごとに請求方法が異なります。通常は従量課金制です。上記の無料枠に関する情報をご覧ください。
- Google マップ - 一連の API を備え、毎月 200 米ドル分の無料クレジットをユーザーに提供できます。
- Google Workspace(旧 G Suite)API - Workspace の月額利用料金の対象となる使用量(一定の上限まで)を提供します。Gmail、Google ドライブ、カレンダー、ドキュメント、スプレッドシート、スライドなどのアプリケーションで API を使用する場合、直接請求は発生しません。
Google サービスによって請求方法が異なるため、それぞれの情報について適切なドキュメントを必ず参照してください。
目的のサービスが有効になっていることを確認する
上記のように、API Manager で Cloud Translation API が有効になっていることを確認します。サーバーレス プラットフォームをコマンドラインから有効にしなかった場合は、Cloud コンソールの App Engine、Cloud Functions、Cloud 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 全般のものです。このチュートリアルでは、もう少し具体的に説明しましょう。毎月の割り当ては、「Always Free」全体のティアの概要ページ: 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 ファイルにアクセスすることもできます。
これですべての準備が整いましたので、このチュートリアルを実施するために、フォルダの完全なコピーを作成します。これは、ファイルの削除または変更が必要になるためです。別のデプロイを行う場合は、元のデプロイをコピーして最初からやり直すと、デプロイのクローンを作成したり、再度ダウンロードしたりする必要がなくなります。
5. Node.js 環境を確認する
Node.js 環境を設定する手順は次のとおりです。
- 最新バージョンのノード(10 以上)と NPM(6 以上)がインストールされていることを確認してください
- リポジトリのクローンを作成した場所(または ZIP ファイルを解凍した場所)に移動してから、
cloud/nodejs
フォルダに移動します。 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
};
require
には、フレームワークとテンプレート機能、Cloud Translation API クライアント ライブラリが含まれます。- グローバル変数は、ウェブアプリ、Cloud プロジェクト ID、Translation API クライアント、親の「ロケーション パス」を表します。Translation API 呼び出し、
SOURCE
およびTARGET
言語用のライブラリが含まれています。この例では英語(en
)とスペイン語(es
)ですが、これらの値は Cloud Translation API でサポートされている他の言語コードに自由に変更できます。 - 各ペア(
SOURCE
とTARGET
)の最初の要素(SOURCE
とTARGET
)は言語コードです。2 番目の要素は言語名です(API には関係ないため、表示目的にのみ使用されます)。 - 下の数行は、すべての 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 を呼び出します。詳しく見ていきましょう。
- フォームの基本変数をリセットします。これは主に GET リクエストを対象としており、POST リクエストにはこれらに代わるデータが含まれるためです。
- POST の場合は翻訳するテキストを取得し、空でない場合は API メタデータ要件を表す JSON 構造を作成します。次に、サービスの API を呼び出します。
- 特定の英語のソースに
SOURCE[0]
を API に渡していません。原文の言語を省略すると、原文の言語を自動検出するよう API にリクエストすることになります(ドキュメントのsourceLanguageCode
をご覧ください)。 - 実際の結果(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 つのオプションのいずれか、またはすべてを選択できます。デプロイはすべて省略可能で、いずれか、またはすべてを実施できます。
- サービスをローカルで実行する
- App Engine(スタンダード環境)にデプロイする
- Cloud Functions へのデプロイ
- Cloud Run へのデプロイ
7. オプション 1: サービスをローカルで実行する
Codelab のこのセクションは、ローカルで実行することのみを想定しています。クラウドのみにデプロイする場合は、次のセクションに進んでください。
サンプルアプリをローカルで実行するには、次の 3 つの手順を行う必要があります。
- サービス アカウントを作成する
- サービス アカウントの公開鍵/秘密鍵のペアを作成する
- 認証情報ファイルをダウンロードしてアプリケーション コードとバンドルする
- サービスを開始する
サービス アカウントの詳細
サービス アカウントは、人間のユーザーに属していないデータにアクセスする場合に、クラウドベースのアプリケーション用の Google API にアクセスするためのセキュリティ メカニズムです。Cloud にデプロイする場合、ユーザーのクラウドへのオンボーディングにかかる時間を短縮するために、すべての 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 に接続すると、次のように表示されます。
翻訳して確認してみましょう。
問題がなければ、^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 へのデプロイのみを対象としています。ご興味がない場合は、次のセクションにお進みください。
このデプロイでは、使用するランタイムを 1 行で App Engine に指示する app.yaml
構成ファイルを使用します。
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 バージョンと同様の出力が表示されますが、アプリはクラウドで実行され、世界中で利用できることがわかります。
リクエストを送信すると、他のすべてのデプロイメントと同じように機能します。
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 によって異なります。
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 Build は、アプリをローカルで実行する場合と同じように、アプリを Cloud Run にパックします。Node.js ユーザーの場合、npm install
と npm start
が実行されます。Python の場合は、pip install -r requirements.txt
が実行され、Procfile
の手順に沿ってアプリを起動します。(Cloud Buildpacks でサポートされている他の言語にも同じことが当てはまります)。ビルドプロセスが完了すると、アプリの準備が整います。
これで、アプリが(リージョンにデプロイされますが)グローバルに利用可能になり、デプロイ出力([Service URL
] の下)に表示されるプロジェクト ID を含む URL からアプリにアクセスできるようになります。
翻訳して確認してみましょう。
11.まとめ
これで、ここでは、Cloud Translation API を有効にして使用する方法、必要な認証情報を取得する方法、シンプルなウェブアプリを Express のローカル環境、App Engine、Cloud Functions、Cloud Run にデプロイする方法を学びました。詳細を確認したり、このアプリの他のバージョンや Codelab にアクセスしたりするには、リポジトリ フォルダをご覧ください。
クリーンアップ
Cloud Translation API を使用すると、毎月一定数の翻訳文字を無料で翻訳できます。App Engine には無料の割り当てもあります。Cloud Functions と Cloud 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 の操作に慣れてきたところで、さらに演習を行い、スキルをさらに磨きましょう。学習プログラムを続行するには、サンプルアプリを次のように変更してください。
- ローカルで実行する場合、または Google Cloud サーバーレス コンピューティング プラットフォームにデプロイする場合に、この Codelab の他のすべてのエディションを完了します(リポジトリの README をご覧ください)。
- 別のプログラミング言語を使用して、このチュートリアルを完了します。
- 別のソース言語またはターゲット言語をサポートするようにこのアプリケーションを変更します。
- このアプリケーションをアップグレードすると、テキストを複数の言語に翻訳できます。テンプレート ファイルを変更して、サポートされているターゲット言語のプルダウンを含めます。
詳細
Google Apps Engine
Google Cloud Functions
Google Cloud Run
Google Cloud Buildpack、Container Registry、Artifact Registry
- Cloud Buildpacks のお知らせ
- Cloud Buildpack リポジトリ
- Cloud Artifact Registry のホームページ
- Cloud Artifact Registry のドキュメント
- Cloud Container Registry のホームページ
- Cloud Container Registry のドキュメント
Google Cloud Translation と Google ML Kit
- Cloud Translation ホームページ
- Cloud Translation のドキュメント
- Cloud Translation API クライアント ライブラリ(すべての開発言語)
- Cloud Translation API でサポートされている(話/文字)言語
- Translation API の料金ページ
- Cloud AI/ML のすべての「構成要素」API
- Google ML Kit(モバイル向け Cloud AI/ML API のサブセット)
- Google ML Kit Translation API
その他の Google Cloud プロダクト/ページ
Python のリンク
- Python 3 App Engine クイックスタート
- Python 2 App Engine(スタンダード)ランタイム
- Python 3 App Engine(スタンダード)ランタイム
- Python 2 と3 つの App Engine(スタンダード)ランタイム
- Python 2 から 3 への App Engine(スタンダード)移行ガイド
- Python Cloud Functions のクイックスタート
- Python Cloud Run のクイックスタート
- Google Cloud Python サポート
- Flask
Node.js リンク
- Node.js App Engine クイックスタート
- Node.js App Engine(Standard)ランタイム
- Node.js Cloud Functions クイックスタート
- Node.js Cloud Run クイックスタート
- Google Cloud Node.js のサポート
- Express
ライセンス
このチュートリアルはクリエイティブ・コモンズの表示 2.0 汎用ライセンスで使用許諾されていますが、リポジトリのソースコードは Apache 2 で使用が許諾されています。