۱. مرور کلی
این مجموعه از آزمایشگاههای کد (آموزشهای خودآموز و عملی) با هدف کمک به توسعهدهندگان برای درک گزینههای مختلفی که هنگام استقرار برنامههای خود دارند، ارائه شده است. شما یاد خواهید گرفت که چگونه از API ترجمه ابری گوگل (Google Cloud Translation API) در یک برنامه وب ساده استفاده کنید. این برنامه میتواند به صورت محلی اجرا شود یا در یک پلتفرم محاسباتی بدون سرور ابری ( App Engine، Cloud Functions یا Cloud Run ) مستقر شود.
شما این آموزش جاوا اسکریپت را با Node.js و با استفاده از چارچوب وب Express.js انجام خواهید داد. همچنین یاد خواهید گرفت که چگونه از پلتفرمهای بدون سرور ما به APIهای Google Cloud دسترسی پیدا کنید. تمام نسخههای این برنامه از مخزن متنباز "nebulous serverless" هستند که شامل نسخه پایتون این برنامه و آزمایشگاههای کد مستقل است. این مخزن همچنین میزبان برنامههای مشابهی است که به توسعهدهندگان نشان میدهد چگونه از پلتفرمهای بدون سرور ما به APIهای Google غیر ابری دسترسی پیدا کنند.
این آزمایشگاه کد بر روی استقرار این برنامه در پلتفرم(های) بولد شده بالا تمرکز دارد.
یاد خواهید گرفت که چگونه
- از APIهای گوگل کلود، به ویژه API ترجمه کلود (پیشرفته/نسخه ۳) استفاده کنید.
- یک برنامه وب پایه را به صورت محلی اجرا کنید یا آن را روی یک پلتفرم محاسباتی ابری بدون محدودیت زمانی مستقر کنید.
آنچه نیاز دارید
- یک پروژه Google Cloud با یک حساب Cloud Billing فعال
- یک چارچوب وب نصب شده برای اجرا به صورت محلی ( فلسک برای کسانی که آموزش پایتون را انجام میدهند یا اکسپرس برای کسانی که آموزش جاوا اسکریپت/نودو.جیاس را انجام میدهند)
- حداقل یک پلتفرم محاسباتی بدون محدودیت برای استقرارهای Google Cloud فعال باشد
- مهارتهای برنامهنویسی پایه (پایتون یا جاوا اسکریپت/Node.js)
- آشنایی با دستورات اولیه سیستم عامل
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود در توسعه با پایتون یا Node.js را چگونه ارزیابی میکنید؟
تجربه خود را در استفاده از خدمات ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود و شما میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه باید در تمام پروژههای گوگل کلود منحصر به فرد باشد و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (و معمولاً با نام
PROJECT_IDشناخته میشود)، بنابراین اگر آن را دوست ندارید، یک شناسه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. سپس پس از ایجاد پروژه، آن "منجمد" میشود. - یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای اطلاعات بیشتر در مورد هر سه این مقادیر به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/APIهای ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، دستورالعملهای «پاکسازی» موجود در انتهای آزمایشگاه کد را دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
۳. فعال کردن API ترجمه
در این بخش، نحوه فعال کردن APIهای گوگل به طور کلی را خواهید آموخت. برای برنامه نمونه ما، API ترجمه ابری را فعال خواهید کرد. همچنین بسته به پلتفرم (پلتفرمهایی) که میخواهید برنامه نمونه را روی آنها مستقر کنید، App Engine، Cloud Functions و/یا Cloud Run (بهعلاوه Cloud Artifact Registry) را فعال خواهید کرد.
فعال کردن API های گوگل
مقدمه
صرف نظر از اینکه میخواهید از کدام API گوگل در برنامه خود استفاده کنید، باید آنها را فعال کنید . APIها را میتوان از خط فرمان یا از کنسول Cloud فعال کرد. فرآیند فعالسازی APIها یکسان است، بنابراین پس از فعال کردن یک API، میتوانید API دیگری را نیز به همین روش فعال کنید.
گزینه ۱: رابط خط فرمان gcloud (Cloud Shell یا محیط محلی)
اگرچه فعال کردن APIها از طریق کنسول ابری رایجتر است، برخی از توسعهدهندگان ترجیح میدهند همه کارها را از طریق خط فرمان انجام دهند. برای انجام این کار، باید «نام سرویس» یک API را جستجو کنید. این نام شبیه یک URL است: SERVICE_NAME .googleapis.com . میتوانید این موارد را در نمودار محصولات پشتیبانیشده پیدا کنید، یا میتوانید با استفاده از API کشف گوگل، به صورت برنامهنویسی شده آنها را جستجو کنید.
با استفاده از این اطلاعات، با استفاده از Cloud Shell (یا محیط توسعه محلی خود که ابزار خط فرمان gcloud روی آن نصب شده است )، میتوانید یک API را به صورت زیر فعال کنید:
gcloud services enable SERVICE_NAME.googleapis.com
مثال ۱: فعال کردن API مربوط به Cloud Vision
gcloud services enable vision.googleapis.com
مثال ۲: فعال کردن موتور برنامه گوگل
gcloud services enable appengine.googleapis.com
مثال ۳: فعال کردن چندین 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 Artifact Registry را نیز فعال میکند زیرا در آنجاست که تصاویر کانتینر باید توسط سیستم Cloud Build ثبت شوند تا بتوانند در Cloud Run مستقر شوند.
گزینه ۲: کنسول ابری
همچنین میتوانید APIهای گوگل را در API Manager فعال کنید. از Cloud Console، به API Manager بروید و Library را انتخاب کنید.

برای مشاهده نتایج منطبق، نام یک API را در نوار جستجو وارد کنید:

API مورد نظر برای فعالسازی را انتخاب کنید و روی دکمهی فعالسازی کلیک کنید:

فرآیند فعالسازی همه APIها مشابه است، صرف نظر از اینکه از کدام API گوگل میخواهید استفاده کنید.
هزینه
بسیاری از APIهای گوگل را میتوان بدون هزینه استفاده کرد، با این حال، استفاده از اکثر محصولات و APIهای گوگل کلود هزینههایی دارد. هنگام فعال کردن APIهای ابری، ممکن است از شما یک حساب صورتحساب فعال خواسته شود. با این حال، برخی از محصولات گوگل کلود دارای یک سطح «همیشه رایگان» هستند که برای متحمل شدن هزینههای صورتحساب، باید از آن سطح فراتر بروید.
کاربران جدید GCP واجد شرایط دوره آزمایشی رایگان هستند که در حال حاضر برای ۹۰ روز اول ۳۰۰ دلار آمریکا هزینه دارد. Codelabs معمولاً هزینه زیادی یا هیچ هزینهای ندارد، بنابراین پیشنهاد میکنیم تا زمانی که واقعاً آماده امتحان کردن آن نیستید، دوره آزمایشی رایگان را به تعویق بیندازید، به خصوص که این یک پیشنهاد یکباره است. سهمیههای سطح رایگان منقضی نمیشوند و صرف نظر از اینکه از دوره آزمایشی رایگان استفاده کنید یا نه، اعمال میشوند.
کاربران باید قبل از فعال کردن هر API، به اطلاعات قیمت آن مراجعه کنند (مثلاً: صفحه قیمتگذاری Cloud Vision API )، به خصوص توجه داشته باشند که آیا سطح رایگان دارد یا خیر، و اگر دارد، چیست. تا زمانی که در مجموع در محدوده مشخص شده روزانه یا ماهانه باقی بمانید، نباید هیچ هزینهای متحمل شوید. قیمتگذاری و سطوح رایگان بین APIهای گروههای محصولات گوگل متفاوت است. مثالها:
- Google Cloud/GCP - هر محصول به طور متفاوتی صورتحساب میشود و عموماً به ازای هر بار استفاده پرداخت میشود؛ به اطلاعات مربوط به سطح رایگان در بالا مراجعه کنید.
- نقشههای گوگل - مجموعهای از APIها را ارائه میدهد و به کاربران اعتبار ماهانه رایگان ۲۰۰ دلاری ارائه میدهد.
- رابطهای برنامهنویسی کاربردی گوگل ورکاسپیس (که قبلاً جی سوئیت نام داشت) — استفاده (تا سقف مشخصی) را تحت پوشش هزینه اشتراک ماهانه ورکاسپیس ارائه میدهد، بنابراین هیچ هزینه مستقیمی برای استفاده از رابطهای برنامهنویسی کاربردی برای برنامههایی مانند جیمیل، گوگل درایو، تقویم، داکز، شیتز یا اسلایدز وجود ندارد.
محصولات مختلف گوگل به صورت متفاوتی صورتحساب میشوند، بنابراین حتماً برای این اطلاعات به اسناد مربوطه مراجعه کنید.
اطمینان از فعال بودن سرویسهای مورد نظر
طبق دستورالعمل بالا، از فعال بودن API ترجمه ابری (Cloud Translation API) در API Manager اطمینان حاصل کنید. اگر پلتفرمهای بدون سرور را از خط فرمان فعال نکردهاید، میتوانید این کار را از هر یک از داشبوردهای مربوطه در Cloud Console انجام دهید: App Engine ، Cloud Functions ، Cloud Run .
اگرچه فعال کردن 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.
بیشتر در مورد هزینهها
بخش بالا در مورد هزینهها، در مورد APIهای گوگل عمومی است. بیایید جزئیات بیشتری را برای این آموزش پوشش دهیم. اگرچه سهمیه ماهانه آن در صفحه خلاصه کلی سطح "همیشه رایگان" ذکر نشده است، صفحه قیمتگذاری API ترجمه بیان میکند که همه کاربران ماهانه مقدار ثابتی از کاراکترهای ترجمه شده را دریافت میکنند. اگر کمتر از آن آستانه باقی بمانید، نباید هیچ هزینهای از API متحمل شوید. برای اطلاعات بیشتر در مورد هزینههای استفاده از پلتفرمهای بدون سرور Google Cloud، به بخش هزینهها در مخزن مراجعه کنید. بخش "پاکسازی" در انتها، نحوه توقف پرداخت صورتحساب پس از اتمام این آزمایشگاه کد را مورد بحث قرار خواهد داد.
۴. کد نمونه برنامه را دریافت کنید
دانلود فایل زیپ یا کپی مخزن
- فایل زیپ را دانلود کنید یا با
git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.gitclone از مخزن کپی بگیرید: https://github.com/googlecodelabs/cloud-nebulous-serverless.git - اگر محیط توسعه محلی ندارید و میخواهید این آموزش را در Cloud Shell انجام دهید، میتوانید مخزن را با همان دستور
git cloneدر آنجا کلون کنید. - همچنین میتوانید همانطور که در تصویر زیر نشان داده شده است، از طریق دکمه سبز رنگ Code به فایل ZIP دسترسی پیدا کنید:

حالا که همه چیز را دارید، برای انجام این آموزش خاص، یک کپی کامل از پوشه ایجاد کنید، زیرا احتمالاً شامل حذف یا تغییر فایلها خواهد بود. اگر میخواهید پیادهسازی متفاوتی انجام دهید، میتوانید با کپی کردن فایل اصلی از ابتدا شروع کنید تا مجبور نباشید دوباره آن را کلون یا دانلود کنید.
۵. محیط Node.js را تأیید کنید
برای راهاندازی محیط Node.js، موارد زیر را انجام دهید:
- مطمئن شوید که نسخههای بهروز Node (بیش از ۱۰) و NPM (بیش از ۶) را نصب کردهاید.
- به جایی که مخزن را کلون کردهاید (یا فایل ZIP را از حالت فشرده خارج کردهاید) بروید، سپس به پوشه
cloud/nodejsبروید. - تأیید کنید که
package.jsonوجود دارد و سپسnpm installاجرا کنید.
برای مورد شماره ۱ در بالا، میتوانید نسخههای موجود را در خط فرمان بررسی کنید:
$ node -v v17.0.1 $ npm -v 8.1.0
۶. بررسی اپلیکیشن نمونه
این برنامه نمونه، یک مشتق ساده از گوگل ترنسلیت است که از کاربران میخواهد متنی را به انگلیسی وارد کنند و ترجمه معادل آن متن را به اسپانیایی دریافت کنند.
فایل پیکربندی 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 هستند. - متغیرهای سراسری نشاندهندهی برنامهی وب، شناسهی پروژهی ابری، کلاینت API ترجمه، «مسیر مکان» والد برای فراخوانیهای API ترجمه و زبانهای
SOURCEوTARGETهستند. در این مورد، انگلیسی (en) و اسپانیایی (es) هستند، اما میتوانید این مقادیر را به کدهای زبانهای دیگری که توسط API ترجمه ابری پشتیبانی میشوند، تغییر دهید. - عنصر اول هر جفت (
SOURCEوTARGET) کد زبان است در حالی که عنصر دوم نام زبان است (و فقط برای اهداف نمایشی استفاده میشود زیرا برای 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);
}
تابع اصلی، کار دریافت ورودی کاربر و فراخوانی API ترجمه برای انجام کارهای سنگین را انجام میدهد. بیایید آن را به صورت جزئیتر بررسی کنیم:
- متغیرهای اساسی فرم را مجدداً تنظیم کنید. این کار در درجه اول برای درخواستهای GET است زیرا درخواستهای POST دادههایی دارند که جایگزین این موارد میشوند.
- اگر از نوع POST است، متن را برای ترجمه دریافت کنید و اگر خالی نیست، یک ساختار JSON ایجاد کنید که نشاندهندهی الزامات فرادادهی API باشد. سپس 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>
در ادامهی آموزش، میتوانید هر یک یا هر چهار گزینه را برای استقرار و اجرای این برنامه انتخاب کنید. تمام استقرارها اختیاری هستند، به این معنی که میتوانید هر یک یا همه آنها را انجام دهید.
- اجرای سرویس به صورت محلی
- استقرار در App Engine (محیط استاندارد)
- توابع را به فضای ابری منتقل کنید
- استقرار در Cloud Run
۷. گزینه ۱: اجرای سرویس به صورت محلی
این بخش از آزمایشگاه کد فقط برای اجرای محلی است. اگر فقط قصد دارید برنامه را روی فضای ابری اجرا کنید، به بخش بعدی بروید.
برای اجرای برنامه نمونه به صورت محلی، سه مرحله مجزا وجود دارد که باید انجام شود:
- ایجاد حساب کاربری سرویس
- ایجاد یک جفت کلید عمومی/خصوصی برای حساب کاربری سرویس
- دانلود فایل اعتبارنامهها و بسته نرمافزاری حاوی کد برنامه
- سرویس را شروع کنید
آشنایی با حسابهای خدماتی
حسابهای سرویس، مکانیزم امنیتی برای دسترسی به APIهای گوگل برای برنامههای مبتنی بر ابر هستند، زمانی که به دادههایی دسترسی دارند که متعلق به کاربران انسانی نیست. هنگام استقرار در ابر، برای کاهش زمان راهاندازی کاربران در ابر، تمام پلتفرمهای محاسباتی گوگل کلود (بدون سرور و غیره) حسابهای سرویس پیشفرض ارائه میدهند.
حسابهای کاربری پیشفرض سرویس با مجموعهای گسترده از مجوزها برای «گذر از تشریفات اداری» ارائه میشوند، اما هنگام آماده شدن برای راهاندازی یک سرویس تولیدی، اکیداً به کاربران توصیه میکنیم که از بهترین شیوه «حداقل امتیازات» پیروی کنند، اما حسابهای کاربری مدیریتشده توسط کاربر را فقط با مجوزهای کافی برای عملکرد صحیح برنامه خود ایجاد کنند. صرف نظر از این، هیچ حساب کاربری پیشفرضی برای استقرارهای محلی وجود ندارد، بنابراین باید یک حساب کاربری سرویس به همراه یک کلید حساب کاربری سرویس (در واقع یک جفت کلید عمومی/خصوصی) ایجاد کنید و این اعتبارنامهها را در دسترس کد برنامه قرار دهید.
ایجاد جفت کلید حساب سرویس و دانلود فایل اعتبارنامهها
برای ایجاد یک حساب کاربری سرویس و جفت کلید عمومی/خصوصی برای اجرای محلی، دستورالعملهای این صفحه را دنبال کنید. هنگام ایجاد کلید حساب کاربری سرویس، از شما خواسته میشود مجوزهای مورد نظر را ارائه دهید. حتماً roles/cloudtranslate.user را انتخاب کنید تا بتوانید با موفقیت به API دسترسی پیدا کنید.
پس از ایجاد موفقیتآمیز جفت کلید، از شما خواسته میشود فایل کلید حساب سرویس را دانلود کنید. آن را credentials.json بنامید و به پوشه سطح بالای برنامه منتقل کنید. اکنون باید به Cloud SDK بگویید که از این اعتبارنامهها استفاده کند : متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را طوری تنظیم کنید که به آن فایل اشاره کند. اطلاعات بیشتر در مورد این فرآیند را میتوانید در این صفحه که شامل استفاده از حسابهای سرویس است، نیز بیابید.
سرویس را شروع کنید
وقتی آمادهی ادامه شدید، سرور اکسپرس را با دستور زیر به صورت محلی راهاندازی کنید:
$ npm start > cloud-nebulous-serverless-nodejs@0.0.1 start > node index.js Listening on port 8080
برای اتصال به آن در localhost:8080 به مرورگر وب خود بروید، و باید چیزی شبیه به موارد زیر را ببینید:

یه چیزی ترجمه کن تا ببینی چی میشه!

وقتی از آن راضی بودید، با فشردن کلیدهای ^C (کنترل-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 را کامل نکردهاید. لطفاً به « گزینه ۱: اجرای سرویس به صورت محلی » برگردید و این فرآیند را تکمیل کنید و قبل از ادامه، creds را در پوشه اصلی نصب کنید.
۸. گزینه ۲: استقرار در App Engine (محیط استاندارد)
این بخش از آزمایشگاه کد فقط برای استقرار در Node App Engine است. اگر علاقهای ندارید، به بخش بعدی بروید.
این استقرار از فایل پیکربندی app.yaml استفاده میکند که با یک خط به App Engine میگوید از کدام runtime استفاده کند:
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
اکنون که برنامه شما به صورت جهانی در سراسر جهان در دسترس است، باید بتوانید از طریق URL حاوی شناسه پروژه خود به آن دسترسی پیدا کنید و خروجی مشابه نسخه محلی اکسپرس را مشاهده خواهید کرد، اما توجه داشته باشید که در فضای ابری اجرا میشود و در سراسر جهان در دسترس است:

اگر درخواستی ارسال کنید، متوجه خواهید شد که مانند سایر استقرارها عمل میکند.
۹. گزینه ۳: استقرار در توابع ابری
این بخش از آزمایشگاه کد فقط برای استقرار در توابع ابری گره است. اگر علاقهای ندارید، به بخش بعدی بروید.
هیچ فایل پیکربندی با توابع ابری وجود ندارد، بنابراین وقتی آمادهی استقرار در توابع ابری شدید، این دستور را اجرا کنید:
$ gcloud functions deploy translate \ --runtime nodejs16 \ --entry-point app \ --trigger-http \ --region REGION \ --allow-unauthenticated
پروژه GCP شما ممکن است یک REGION پیشفرض داشته باشد، اما میتوانید از پرچم --region برای استقرار تابع خود در یک منطقه خاص استفاده کنید. توابع ابری مانند سایر محصولات ابری از شما نمیپرسند. صرف نظر از اینکه کدام منطقه را انتخاب میکنید، خروجی 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: '...'
اکنون که برنامه شما به صورت جهانی در سراسر جهان در دسترس است، باید بتوانید از طریق URL حاوی شناسه پروژه خود، همانطور که در خروجی استقرار (در زیر " httpsTrigger/url ") نشان داده شده است، به آن دسترسی پیدا کنید. URL باید چیزی شبیه به این باشد: https:// REGION - PROJECT_ID .cloudfunctions.net/translate که بسته به منطقه انتخابی شما و همچنین شناسه پروژه Cloud شما متفاوت است.

۱۰. گزینه ۴: استقرار در 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 اجرا میشود. برای پایتون، pip install -r requirements.txt اجرا میشود و برنامه را از دستورالعملهای موجود در Procfile شما اجرا میکند. (همین امر در مورد سایر زبانهای پشتیبانی شده توسط Cloud Buildpacks نیز صدق میکند.) برنامه شما پس از اتمام فرآیند ساخت، آماده اجرا خواهد بود.
سپس برنامه شما (به صورت منطقهای مستقر میشود اما) به صورت جهانی در دسترس است و میتوانید از طریق URL حاوی شناسه پروژه خود، همانطور که در خروجی استقرار نشان داده شده است (در زیر " Service URL :" ) به آن دسترسی پیدا کنید.

یه چیزی ترجمه کن تا ببینی چی میشه!

۱۱. نتیجهگیری
تبریک! شما یاد گرفتید که چگونه API ترجمه ابری را فعال و استفاده کنید، اعتبارنامههای لازم را دریافت کنید و یک برنامه وب ساده را برای Express به صورت محلی، App Engine، Cloud Functions و/یا Cloud Run مستقر کنید. لطفاً برای کسب اطلاعات بیشتر یا دسترسی به نسخههای دیگر این برنامه و همچنین سایر آزمایشگاههای کد، پوشه repo را بررسی کنید.
تمیز کردن
API ترجمه ابری به شما امکان میدهد تعداد مشخصی از کاراکترهای ترجمه شده را در هر ماه به صورت رایگان انجام دهید. App Engine نیز سهمیه رایگان دارد و همین امر در مورد Cloud Functions و Cloud Run نیز صدق میکند. در صورت تجاوز از هر یک از این موارد، هزینههایی متحمل خواهید شد. اگر قصد دارید به codelab بعدی ادامه دهید، لازم نیست برنامه خود را خاموش کنید.
با این حال، اگر هنوز آماده رفتن به آموزش بعدی نیستید یا نگران هستید که اینترنت برنامهای را که تازه مستقر کردهاید، کشف کند، برنامه App Engine خود را غیرفعال کنید ، عملکرد Cloud خود را حذف کنید یا سرویس Cloud Run خود را غیرفعال کنید تا از پرداخت هزینهها جلوگیری کنید. وقتی آماده رفتن به آزمایشگاه کد بعدی شدید، میتوانید آن را دوباره فعال کنید. از طرف دیگر، اگر قصد ادامه کار با این برنامه یا آزمایشگاههای کد دیگر را ندارید و میخواهید همه چیز را به طور کامل حذف کنید، میتوانید پروژه خود را متوقف کنید .
همچنین، استقرار در یک پلتفرم محاسباتی بدون سرور Google Cloud هزینههای ساخت و ذخیرهسازی کمی را متحمل میشود. Cloud Build همانند Cloud Storage سهمیه رایگان خود را دارد. برای شفافیت بیشتر، Cloud Build تصویر برنامه شما را میسازد که سپس در Cloud Container Registry یا Artifact Registry ، جانشین آن، ذخیره میشود. ذخیرهسازی آن تصویر و همچنین خروجی شبکه هنگام انتقال آن تصویر به سرویس، مقداری از آن سهمیه را مصرف میکند. با این حال، ممکن است در منطقهای زندگی کنید که چنین ردیف رایگانی ندارد، بنابراین از میزان استفاده از فضای ذخیرهسازی خود آگاه باشید تا هزینههای احتمالی را به حداقل برسانید.
۱۲. منابع اضافی
در بخشهای بعدی، میتوانید مطالب خواندنی بیشتر و همچنین تمرینهای پیشنهادی برای افزایش دانش خود از تکمیل این آموزش را بیابید.
مطالعه اضافی
حالا که کمی با API ترجمه آشنا شدید، بیایید چند تمرین دیگر برای توسعه بیشتر مهارتهایتان انجام دهیم. برای ادامه مسیر یادگیری، برنامه نمونه ما را طوری تغییر دهید که موارد زیر را انجام دهد:
- تمام نسخههای دیگر این آزمایشگاه کد را برای اجرای محلی یا استقرار در پلتفرمهای محاسباتی بدون سرور Google Cloud تکمیل کنید (به مخزن README مراجعه کنید).
- این آموزش را با استفاده از یک زبان برنامهنویسی دیگر تکمیل کنید.
- این برنامه را طوری تغییر دهید که از زبانهای مبدأ یا مقصد مختلف پشتیبانی کند.
- این برنامه را ارتقا دهید تا بتواند متن را به بیش از یک زبان ترجمه کند؛ فایل الگو را تغییر دهید تا فهرستی از زبانهای مقصد پشتیبانیشده داشته باشید.
بیشتر بدانید
موتور برنامه گوگل
عملکردهای گوگل کلود
گوگل کلود ران
بستههای ساخت ابری گوگل، رجیستری کانتینر، رجیستری مصنوعات
- اطلاعیه Cloud Buildpacks
- مخزن Cloud Buildpacks
- صفحه اصلی رجیستری آثار باستانی ابری
- مستندات رجیستری آثار باستانی ابری
- صفحه اصلی رجیستری کانتینر ابری
- مستندات رجیستری کانتینر ابری
ترجمه ابری گوگل و کیت یادگیری ماشین گوگل
- صفحه اصلی ترجمه ابری
- مستندات ترجمه ابری
- کتابخانههای کلاینت API ترجمه ابری (همه زبانهای توسعه)
- زبانهای پشتیبانیشده (گفتاری/نوشتاری) توسط API ترجمه ابری
- صفحه قیمتگذاری API ترجمه
- تمام APIهای «بلوک سازنده» هوش مصنوعی/یادگیری ماشین ابری
- کیت یادگیری ماشین گوگل (زیرمجموعه APIهای هوش مصنوعی/یادگیری ماشین ابری برای موبایل)
- API ترجمه کیت گوگل امال
سایر محصولات/صفحات Google Cloud
لینکهای پایتون
- شروع سریع موتور برنامه پایتون ۳
- موتور برنامه پایتون ۲ (استاندارد) زمان اجرا
- موتور برنامه پایتون ۳ (استاندارد) زمان اجرا
- تفاوتهای بین زمانهای اجرای موتور برنامه پایتون ۲ و ۳ (استاندارد)
- راهنمای مهاجرت موتور برنامه پایتون ۲ به ۳ (استاندارد)
- شروع سریع توابع ابری پایتون
- شروع سریع اجرای ابری پایتون
- پشتیبانی گوگل کلود از پایتون
- فلاسک
لینکهای Node.js
- شروع سریع موتور برنامه Node.js
- موتور برنامه Node.js (استاندارد) زمان اجرا
- شروع سریع توابع ابری Node.js
- شروع سریع اجرای ابری Node.js
- پشتیبانی از گوگل کلود Node.js
- اکسپرس
مجوز
این آموزش تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است، در حالی که کد منبع موجود در مخزن تحت مجوز Apache 2 میباشد.