یک "Google Translate" برنامه Express.js در App Engine، Cloud Functions و Cloud Run

1. بررسی اجمالی

هدف این سری از نرم‌افزارهای کد (آموزش‌های عملی و خودکار) به توسعه‌دهندگان کمک می‌کند تا گزینه‌های مختلفی را که هنگام استقرار برنامه‌های خود دارند، درک کنند. شما یاد خواهید گرفت که چگونه از Google Cloud Translation API در یک برنامه وب ساده استفاده کنید. این برنامه را می توان به صورت محلی اجرا کرد یا در یک پلت فرم محاسباتی بدون سرور Cloud ( App Engine، Cloud Functions یا Cloud Run ) مستقر کرد.

شما این آموزش جاوا اسکریپت را با Node.js با استفاده از چارچوب وب Express.js انجام خواهید داد. همچنین نحوه دسترسی به APIهای Google Cloud را از پلتفرم‌های بدون سرور ما یاد خواهید گرفت. همه نسخه‌های این برنامه از مخزن منبع باز «بدون سرور» هستند که شامل نسخه پایتون این برنامه و کدهای مستقل است. این مخزن همچنین میزبان برنامه‌های مشابهی است که به توسعه‌دهندگان نشان می‌دهد چگونه از پلتفرم‌های بدون سرور ما به APIهای Google غیر Cloud دسترسی پیدا کنند.

این کد لبه روی استقرار این برنامه در پلتفرم(های) برجسته بالا تمرکز دارد.

شما یاد خواهید گرفت که چگونه

آنچه شما نیاز دارید

  • یک پروژه Google Cloud با حساب فعال Cloud Billing
  • یک چارچوب وب نصب شده برای اجرای محلی ( فلاسک برای کسانی که آموزش پایتون را انجام می دهند یا Express برای کسانی که آموزش JavaScript/Node.js را انجام می دهند)
  • حداقل یک پلت فرم محاسباتی بدون سرور برای استقرار Google Cloud فعال شده است
  • مهارت های اولیه برنامه نویسی (Python یا JavaScript/Node.js)
  • دانش کاری دستورات اولیه سیستم عامل

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

آن را بخوانید و تمرینات را کامل کنید فقط آن را بخوانید

به تجربه خود از توسعه در Python یا Node.js چه امتیازی می دهید؟

تازه کار متوسط مسلط

تجربه خود را در استفاده از خدمات Google Cloud چگونه ارزیابی می کنید؟

تازه کار متوسط مسلط

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
  • شناسه پروژه باید در تمام پروژه‌های Google Cloud منحصربه‌فرد باشد و تغییرناپذیر باشد (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان PROJECT_ID شناخته می‌شود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا می‌توانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود.
  • یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعمل‌های «پاک‌سازی» را که در انتهای Codelab یافت می‌شود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

3. Translation API را فعال کنید

در این بخش، نحوه فعال کردن API های گوگل را به طور کلی می آموزید. برای برنامه نمونه ما، API ترجمه ابری را فعال خواهید کرد. همچنین بسته به پلتفرم(هایی) که می خواهید برنامه نمونه را در آن مستقر کنید، App Engine، توابع ابری، و/یا اجرای ابری (به علاوه Cloud Artifact Registry) را فعال خواهید کرد.

فعال کردن API های Google

مقدمه

صرف نظر از اینکه از کدام API Google می خواهید در برنامه خود استفاده کنید، آنها باید فعال باشند. API ها را می توان از طریق خط فرمان یا از کنسول Cloud فعال کرد. فرآیند فعال کردن APIها یکسان است، بنابراین هنگامی که یک API را فعال کردید، می توانید دیگری را به همان روش انجام دهید.

گزینه 1: رابط خط فرمان gcloud (Cloud Shell یا محیط محلی)

در حالی که فعال کردن API ها از کنسول Cloud رایج تر است، برخی از توسعه دهندگان ترجیح می دهند همه چیز را از طریق خط فرمان انجام دهند. برای انجام این کار، باید «نام سرویس» یک 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: چند 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 Manager فعال کنید. از Cloud Console، به API Manager بروید و Library را انتخاب کنید.

fb0f1d315f122d4a.png

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

2275786a24f8f204.png

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

7960a6752a1da767.png

فرآیند فعال کردن همه APIها مشابه است، صرف نظر از اینکه می خواهید از کدام API Google استفاده کنید.

هزینه

بسیاری از API های Google را می توان بدون هزینه استفاده کرد، با این حال، هنگام استفاده از اکثر محصولات و API های Google Cloud هزینه هایی وجود دارد. هنگام فعال کردن Cloud API، ممکن است از شما یک حساب صورتحساب فعال خواسته شود. با این حال، برخی از محصولات Google Cloud دارای یک ردیف «همیشه رایگان» هستند که برای متحمل شدن هزینه‌های صورت‌حساب باید از آن فراتر بروید.

کاربران جدید GCP واجد شرایط استفاده از آزمایش رایگان هستند، در حال حاضر 300 دلار آمریکا برای 90 روز اول خوب است. Codelabs معمولاً متحمل صورت‌حساب زیادی نمی‌شود، بنابراین ما به شما پیشنهاد می‌کنیم که آزمایش رایگان را تا زمانی که واقعاً آماده انجام تست درایو باشید، متوقف کنید، به خصوص که این یک پیشنهاد یک‌باره است. سهمیه های ردیف رایگان منقضی نمی شوند و صرف نظر از اینکه از آزمایش رایگان استفاده می کنید یا خیر اعمال می شوند.

کاربران باید قبل از فعال کردن، به اطلاعات قیمت گذاری هر API مراجعه کنند (مثال: صفحه قیمت گذاری Cloud Vision API )، به خصوص توجه داشته باشند که آیا سطح رایگان دارد یا خیر، و اگر چنین است، چیست. تا زمانی که در مجموع در محدوده مشخص شده روزانه یا ماهانه بمانید، نباید هزینه ای متحمل شوید. قیمت‌گذاری و ردیف‌های رایگان بین APIهای گروه محصول Google متفاوت است. مثال ها:

صورت‌حساب محصولات مختلف Google متفاوت است، بنابراین حتماً به اسناد مناسب برای آن اطلاعات مراجعه کنید.

از فعال بودن خدمات مورد نظر اطمینان حاصل کنید

همانطور که در بالا آمده است، از API ترجمه ابری در مدیر API اطمینان حاصل کنید. اگر پلتفرم‌های بدون سرور را از خط فرمان فعال نکرده‌اید، می‌توانید این کار را از هر یک از داشبوردهای مربوطه در Cloud Console انجام دهید: App Engine ، Cloud Functions ، Cloud Run .

در حالی که فعال کردن API ها از کنسول Cloud از نظر بصری آموزنده است، اما استفاده از ابزار 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 های Google کلی است. بیایید جزئیات بیشتری را برای این آموزش پوشش دهیم. در حالی که سهمیه ماهانه آن در صفحه خلاصه رده کلی «همیشه رایگان» فهرست نشده است، صفحه قیمت گذاری Translation API بیان می کند که همه کاربران مقدار ثابتی از نویسه های ترجمه شده را ماهیانه دریافت می کنند. اگر زیر این آستانه بمانید، نباید از API هزینه ای متحمل شوید. برای اطلاعات بیشتر در مورد هزینه‌های استفاده از پلت‌فرم‌های بدون سرور Google Cloud، به بخش هزینه‌ها در مخزن مراجعه کنید. بخش "پاکسازی" در پایان نحوه جلوگیری از تحمیل صورتحساب پس از تکمیل این کد آزمایشگاه را مورد بحث قرار خواهد داد.

4. نمونه کد برنامه را دریافت کنید

ZIP یا کلون مخزن را دانلود کنید

  • فایل ZIP را دانلود کنید یا مخزن را با git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • اگر محیط توسعه دهنده محلی ندارید و می خواهید این آموزش را در Cloud Shell انجام دهید، می توانید مخزن را با همان دستور git clone در آنجا کلون کنید.
  • همانطور که در تصویر زیر نشان داده شده است، می توانید به فایل 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 Translate است که از کاربران می خواهد متنی را به زبان انگلیسی وارد کنند و ترجمه معادل آن متن را به زبان اسپانیایی دریافت کنند.

فایل پیکربندی 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، سرویس گیرنده 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);
}

تابع اصلی کار دریافت ورودی کاربر و فراخوانی API ترجمه برای انجام کارهای سنگین را انجام می دهد. بیایید آن را تجزیه کنیم:

  1. متغیرهای اصلی فرم را بازنشانی کنید. این در درجه اول برای درخواست های GET است زیرا درخواست های POST داده هایی دارند که جایگزین آنها می شوند.
  2. اگر POST است، متن را برای ترجمه بردارید، و اگر خالی نیست، یک ساختار JSON ایجاد کنید که نشان دهنده نیاز فراداده API است. سپس با 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. استقرار در توابع ابری
  4. در Cloud Run مستقر شوید

7. گزینه 1: سرویس را به صورت محلی اجرا کنید

این بخش از Codelab فقط برای اجرای محلی است. اگر فقط در حال استقرار در فضای ابری هستید، به بخش بعدی بروید.

برای اجرای برنامه نمونه به صورت محلی، سه مرحله متمایز وجود دارد که باید انجام شود:

  1. یک حساب کاربری ایجاد کنید
  2. یک جفت کلید عمومی/خصوصی حساب سرویس ایجاد کنید
  3. دانلود فایل اعتبارنامه و بسته نرم افزاری با کد برنامه
  4. سرویس را شروع کنید

درباره حساب های خدماتی بیاموزید

حساب‌های سرویس مکانیزم امنیتی برای دسترسی به Google API برای برنامه‌های مبتنی بر ابر هنگام دسترسی به داده‌هایی هستند که به کاربران انسانی تعلق ندارند. هنگام استقرار در Cloud، برای کاهش زمان افزایش سرعت ورود کاربران به Cloud، همه پلتفرم‌های محاسباتی 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 (محیط استاندارد)

این بخش از Codelab فقط برای استقرار در Node App Engine است. اگر علاقه ای ندارید، به بخش بعدی بروید.

این استقرار از فایل پیکربندی app.yaml استفاده می کند که به App Engine می گوید از کدام زمان اجرا با یک خط استفاده کند:

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 حاوی شناسه پروژه خود به آن دسترسی پیدا کنید، و باید خروجی مشابه نسخه Express محلی را ببینید، اما بدانید که در فضای ابری اجرا می شود و در سراسر جهان در دسترس است. جهان:

da28f951c33a2c3d.png

اگر درخواستی ارسال کنید، متوجه خواهید شد که مانند همه استقرارهای دیگر کار می کند.

9. گزینه 3: استقرار در توابع ابری

این بخش از Codelab فقط برای استقرار در Node Cloud Functions است. اگر علاقه ای ندارید، به بخش بعدی بروید.

هیچ فایل پیکربندی با توابع Cloud وجود ندارد، بنابراین وقتی آماده استقرار در توابع ابری هستید، این دستور را اجرا کنید:

$ 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: '...'

اکنون که برنامه شما در سراسر جهان در دسترس است، باید بتوانید در URL حاوی شناسه پروژه خود همانطور که در خروجی استقرار نشان داده شده است (در زیر " httpsTrigger/url ") به آن دسترسی پیدا کنید. URL باید چیزی شبیه این باشد: https:// REGION - PROJECT_ID .cloudfunctions.net/translate که بر اساس منطقه ای که انتخاب کرده اید و همچنین شناسه پروژه Cloud شما متفاوت است.

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 Build برنامه های شما را به Cloud Run بسته بندی می کند، مانند آنچه اگر برنامه خود را به صورت محلی اجرا می کردید. برای کاربران Node.js، npm install و npm start اجرا می کند. برای پایتون، pip install -r requirements.txt را اجرا می‌کند و برنامه را از دستورالعمل‌های موجود در Procfile شما راه‌اندازی می‌کند. (این امر در مورد سایر زبان های پشتیبانی شده توسط Cloud Buildpacks صدق می کند.) پس از تکمیل فرآیند ساخت، برنامه شما آماده کار خواهد بود.

سپس برنامه شما (به صورت منطقه ای مستقر می شود اما) در سطح جهانی در دسترس است، و می توان در URL حاوی شناسه پروژه شما همانطور که در خروجی استقرار نشان داده شده است (در زیر " Service URL :" به آن دسترسی داشت.

169f6edf5f7d2068.png

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

31554e71cb80f1b4.png

11. نتیجه گیری

تبریک می گویم! یاد گرفتید که چگونه Cloud Translation API را فعال کنید و از آن استفاده کنید، اعتبار لازم را دریافت کنید و یک برنامه وب ساده را برای Express به صورت محلی، در App Engine، توابع Cloud و/یا Cloud Run اجرا کنید. لطفاً پوشه repo را برای کسب اطلاعات بیشتر یا دسترسی به نسخه‌های دیگر این برنامه و همچنین سایر کدها بررسی کنید.

تمیز کردن

Cloud Translation API به شما امکان می دهد مقدار ثابتی از کاراکترهای ترجمه شده را در ماه به صورت رایگان انجام دهید. App Engine همچنین دارای سهمیه رایگان است و همین امر در مورد Cloud Functions و Cloud Run نیز صدق می کند. در صورت تجاوز از هر کدام، هزینه‌هایی به شما تحمیل می‌شود. اگر قصد دارید به نسخه کد بعدی ادامه دهید، لازم نیست برنامه خود را ببندید.

با این حال، اگر هنوز برای رفتن به آموزش بعدی آماده نیستید یا نگران هستید که اینترنت برنامه‌ای را که به تازگی راه‌اندازی کرده‌اید کشف کند، برنامه App Engine خود را غیرفعال کنید ، عملکرد Cloud خود را حذف کنید یا سرویس Cloud Run خود را غیرفعال کنید. تحمیل هزینه هنگامی که برای رفتن به کد بعدی آماده شدید، می توانید آن را دوباره فعال کنید. از طرف دیگر، اگر نمی‌خواهید با این برنامه یا سایر کد لبه‌ها ادامه دهید و می‌خواهید همه چیز را به طور کامل حذف کنید، می‌توانید پروژه خود را خاموش کنید .

همچنین، استقرار در یک پلت فرم محاسباتی بدون سرور Google Cloud هزینه‌های ساخت و ذخیره‌سازی جزئی را متحمل می‌شود. Cloud Build سهمیه رایگان خودش را دارد و Cloud Storage هم دارد. برای شفافیت بیشتر، Cloud Build تصویر برنامه شما را می سازد، که سپس در Cloud Container Registry یا Artifact Registry ، جانشین آن ذخیره می شود. ذخیره سازی آن تصویر مقداری از آن سهمیه را مصرف می کند، همانطور که شبکه هنگام انتقال آن تصویر به سرویس خارج می شود. با این حال، ممکن است در منطقه‌ای زندگی کنید که چنین سطح رایگانی ندارد، بنابراین برای به حداقل رساندن هزینه‌های احتمالی از میزان استفاده از فضای ذخیره‌سازی خود آگاه باشید.

12. منابع اضافی

در بخش‌های بعدی، می‌توانید مطالب خواندنی اضافی و همچنین تمرین‌های توصیه‌شده برای افزایش دانش خود را که از تکمیل این آموزش کسب کرده‌اید، بیابید.

مطالعه تکمیلی

اکنون که تجربه ای در زمینه Translation API دارید، بیایید چند تمرین اضافی برای توسعه بیشتر مهارت های خود انجام دهیم. برای ادامه مسیر یادگیری خود، برنامه نمونه ما را برای انجام موارد زیر تغییر دهید:

  1. تمام نسخه‌های دیگر این نرم‌افزار را برای اجرای محلی یا استقرار در پلت‌فرم‌های محاسباتی بدون سرور Google Cloud تکمیل کنید (به repo README مراجعه کنید).
  2. این آموزش را با استفاده از یک زبان برنامه نویسی دیگر کامل کنید.
  3. این برنامه را برای پشتیبانی از زبان های مبدأ یا مقصد مختلف تغییر دهید.
  4. این برنامه را ارتقا دهید تا بتوانید متن را به بیش از یک زبان ترجمه کنید. فایل الگو را تغییر دهید تا زبان‌های هدف پشتیبانی‌شده را به صورت کشویی داشته باشید.

بیشتر بدانید

موتور برنامه گوگل

توابع Google Cloud

Google Cloud Run

Google Cloud Buildpacks، Container Registry، Artifact Registry

Google Cloud Translation و Google ML Kit

سایر محصولات/صفحات Google Cloud

مجوز

این آموزش تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد در حالی که کد منبع موجود در مخزن تحت مجوز Apache 2 است.