1. بررسی اجمالی
Google Cloud Functions یک پلت فرم محاسباتی بدون سرور مبتنی بر رویداد است. Cloud Functions به شما امکان می دهد بدون نگرانی در مورد تهیه منابع یا مقیاس بندی برای رسیدگی به نیازهای در حال تغییر، کد خود را بنویسید.
توابع ابری نوشته شده در جاوا اسکریپت در محیط Node.js در Google Cloud Platform اجرا می شوند. میتوانید عملکرد Cloud خود را در هر زمان اجرا استاندارد Node.js اجرا کنید تا قابلیت حمل و آزمایش محلی را فعال کنید.
قدم زدن
در این کد لبه، شما یک Cloud Function برای Node.js ایجاد می کنید که گزارش می دهد دمای مشخص شده قابل قبول است یا خیلی گرم است. شما با استفاده از کد ویژوال استودیو در دستگاه محلی خود، عملکرد Cloud خود را ایجاد، آزمایش و اشکال زدایی خواهید کرد. در نهایت، عملکرد خود را در Google Cloud Platform مستقر خواهید کرد.
چیزی که یاد خواهید گرفت
- Functions Framework برای Node.js.
- یک تابع ابری HTTP به صورت محلی ایجاد و آزمایش کنید.
- یک عملکرد HTTP را از دستگاه محلی خود اشکال زدایی کنید.
- یک تابع HTTP را از دستگاه محلی خود مستقر کنید.
2. راه اندازی و الزامات
پیش نیازها
- Cloud SDK
- کد ویژوال استودیو
- Node.js 8.6.0 یا بالاتر (برای نصب Node.js، از nvm استفاده کنید ، نسخه خود را بررسی کنید، node –version را اجرا کنید)
- تکمیل راهنمای My First Function: Node.js
هزینه ها
اگرچه این آزمایشگاه کد فقط به 1 فراخوانی یک تابع Cloud مستقر شده نیاز دارد، شما همچنان باید به اطلاعات قیمت گذاری Cloud Functions API مراجعه کنید تا نحوه صورتحساب را بدانید.
در حالی که بسیاری از API های Google را می توان بدون هزینه استفاده کرد، استفاده از Google Cloud Platform (یعنی محصولات و API های آن) رایگان نیست. برای استفاده از توابع Cloud به یک حساب صورتحساب فعال نیاز دارید. به خاطر داشته باشید که برخی از محصولات Google Cloud Platform (GCP) دارای یک ردیف "همیشه رایگان" هستند که برای متحمل شدن صورتحساب باید از آن فراتر بروید. برای اهداف نرم افزار کد، هر فراخوانی توابع ابری در آن ردیف آزاد حساب می شود. تا زمانی که در مجموع در محدوده آن بمانید (در هر ماه)، نباید هیچ هزینه ای متحمل شوید.
3. Functions Framework را برای Node.js نصب کنید
Functions Framework برای Node.js یک چارچوب متن باز FaaS (عملکرد به عنوان سرویس) برای نوشتن توابع قابل حمل Node.js است که توسط تیم Google Cloud Functions برای شما آورده شده است.
Functions Framework به شما امکان می دهد توابع سبک وزنی بنویسید که در محیط های مختلف اجرا می شوند، از جمله:
- توابع Google Cloud
- ماشین توسعه محلی شما
- Cloud Run و Cloud Run در GKE
- محیط های مبتنی بر Knative
یک برنامه node.js جدید ایجاد کنید.
npm init
در حین پذیرش پیش فرض ها، مطمئن شوید که index.js
به عنوان نقطه ورود برنامه خود استفاده می کنید.
اکنون Functions Framework را برای Node.js نصب کنید.
npm install @google-cloud/functions-framework
package.json خود را باز کنید. بررسی کنید که چارچوب توابع را همانطور که در مثال زیر نشان داده شده است به عنوان یک وابستگی فهرست شده می بینید.
"dependencies": { "@google-cloud/functions-framework": "^1.7.1" }
Functions Framework اکنون با موفقیت نصب شده است. اکنون برای ایجاد عملکرد ابری خود آماده هستید.
4. یک HTTP Cloud Function را به صورت محلی ایجاد و آزمایش کنید
یک تابع محلی Cloud ایجاد کنید
در این بخش، یک تابع HTTP را ایجاد و آزمایش خواهید کرد که به درخواست های HTTP پاسخ می دهد.
یک فایل جدید به نام index.js
در همان پوشه فایل package.json خود ایجاد کنید.
موارد زیر را اضافه کنید:
exports.validateTemperature = async (req, res) => { try { if (req.body.temp < 100) { res.status(200).send("Temperature OK"); } else { res.status(200).send("Too hot"); } } catch (error) { //return an error console.log("got error: ", error); res.status(500).send(error); } };
اکنون آماده آزمایش عملکرد هستید.
تست تابع در کد ویژوال استودیو
از این نقطه به بعد، این کد لبه از ترمینال یکپارچه در Visual Studio Code استفاده می کند.
در Visual Studio Code، یک پنجره ترمینال را باز کنید.
دستور زیر را اجرا کنید:
node node_modules/@google-cloud/functions-framework --target=validateTemperature
این دستور یک سرور محلی را راه اندازی می کند که آماده فراخوانی تابع validateTemperature
زمانی است که سرور درخواست HTTP را دریافت می کند.
شما باید خروجی زیر را در پنجره ترمینال خود مشاهده کنید:
Serving function... Function: validateTemperature URL: http://localhost:8080/
با کلیک بر روی نماد New Terminal
plus در پنجره ترمینال، یک پنجره ترمینال دوم در VS Code ایجاد کنید. شما بین این دو پنجره ترمینال سوئیچ خواهید کرد: اولی برای ارائه عملکرد و دومی برای فراخوانی تابع با استفاده از curl.
با استفاده از منوی کشویی می توانید بین پنجره های ترمینال جابجا شوید. اگر یک پنجره ترمینال در حال حاضر یک تابع را ارائه می دهد، لیست کشویی به آن به عنوان node
اشاره می کند. در غیر این صورت به zsh
(یا پوسته ای که استفاده می کنید) ارجاع می شود.
در پنجره ترمینال دوم، دستور زیر را برای ارسال یک بار دمایی 50 به سرور محلی که تابع validateTemperature
را ارائه میکند، اجرا کنید.
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"50"}'
شما باید پاسخ زیر را از تابع ابر دریافت کنید:
Temperature OK
در پنجره ترمینال دوم، عملکرد را مجدداً با ارسال یک محموله دمای "خیلی بالا" مطابق شکل زیر آزمایش کنید:
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"120"}'
شما باید پاسخ زیر را از تابع ابر دریافت کنید:
Too hot
در نهایت، تابع را با فراخوانی آن با محموله گمشده آزمایش کنید.
curl -X POST http://localhost:8080
شما باید پاسخ زیر را از تابع ابر دریافت کنید:
Too hot
در حالت ایدهآل، اگر دما ارائه نشده باشد، عملکرد نباید «خیلی داغ» برگردد. شما یک اشکال در کد کشف کرده اید.
مطمئن شوید که عملکرد خود را با فشار دادن Ctrl + C
در اولین پنجره ترمینال که عملکرد شما را انجام می دهد متوقف کنید.
5. یک تابع HTTP را از دستگاه محلی خود اشکال زدایی کنید
پالت فرمان را در کد ویژوال استودیو باز کنید. اگر در مک هستید، از Cmd + Shift + P
استفاده کنید. اگر ویندوز دارید، از Ctrl + Shift + P.
استفاده کنید.
auto attach
در Command Palette تایپ کنید و مورد بالای لیست را انتخاب کنید.
برای این کد لبه، همانطور که در تصویر زیر نشان داده شده است، Only With Flag
را انتخاب کنید:
اکنون پنجره ترمینال را که در VS Code استفاده کردهاید، بارگیری کنید تا با نگه داشتن ماوس روی نماد هشدار که در سمت راست سمت راست ظاهر میشود، عملکرد خود را انجام دهد.
Relaunch Terminal
کلیک کنید.
از پنجره ترمینال بارگذاری شده مجدد، فریم ورک توابع را مجدداً اجرا کنید تا با استفاده از دستور زیر عملکرد خود را ارائه دهد:
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
جایی که پرچم --inspect
به Node.js می گوید که به کلاینت اشکال زدایی گوش دهد. برای اطلاعات بیشتر، لطفاً به مستندات Node در مورد اشکال زدایی مراجعه کنید.
توجه داشته باشید که شما از node_modules/ .bin /functions-framework به جای node_modules/ @google-cloud /functions-framework استفاده می کنید. برای استفاده از حالت بازرسی باید از فایل اجرایی با سیملینک خودکار در /node_modules/.bin استفاده کنید.
این بار باید یک نوار وضعیت نارنجی در VS Code مشاهده کنید که نشان می دهد اشکال زدا متصل است.
با کلیک کردن روی حاشیه سمت چپ شماره خط، یک نقطه شکست را در خط 3 تنظیم کنید.
نماد نقطه شکست باید قرمز روشن روشن شود، که نشان می دهد این خط کد توسط دیباگر قابل دسترسی است.
در پنجره ترمینال دوم، با اجرای دستور curl زیر، نقطه شکست را بزنید.
curl -X POST http://localhost:8080
یک برجسته زرد روی خط 3 ظاهر می شود. این برجسته نشان می دهد که این خط عبارت فعلی است که توسط دیباگر ارزیابی می شود.
ماوس را روی متغیر temp قرار دهید تا تأیید کنید که محتوای آن undefined
است، زیرا درخواست بار دمایی ارائه نمیدهد.
برای اجرای عبارت بعدی روی نماد مرحله به مرحله کلیک کنید.
میبینید که دستور فعلی به قسمت دیگری از دستور if میرود.
برای این نسخه ی نمایشی، می توانید فرض کنید که مشخصات به همه درخواست ها برای ارسال خواندن دما نیاز دارد. در صورت عدم امکان خوانش دما، تابع باید یک استثنا ایجاد کند.
روی دکمه Disconnect کلیک کنید تا دیباگر قطع شود.
در اولین پنجره ترمینال خود، با فشار دادن Ctrl + C
، اجرای عملکرد خود را متوقف کنید.
تابع خود را به روز کنید تا اگر دما تعریف نشده باشد، یک دستور if اضافه کنید تا یک استثنا ایجاد کند.
exports.validateTemperature = async (req, res) => { try { // add this if statement below line #2 if (!req.body.temp) { throw "Temperature is undefined"; } ...
در اولین پنجره ترمینال خود، با اجرای دستور زیر بدون علامت –inspect مجدداً عملکرد ابر خود را اجرا کنید تا از ضمیمه دیباگر جلوگیری کنید.
node node_modules/@google-cloud/functions-framework --target=validateTemperature
با اجرای دستور زیر در پنجره ترمینال دوم خود، تأیید کنید که یک استثنا ایجاد شده است:
curl -X POST http://localhost:8080
باید خروجی زیر را از درخواست خود مشاهده کنید:
Temperature is undefined
در اولین پنجره ترمینال خود، خطای ثبت شده توسط تابع خود را نیز خواهید دید.
Serving function... Function: validateTemperature URL: http://localhost:8080/ got error: Temperature is undefined
اکنون می توانید اجرای عملکرد خود را با فشار دادن Ctrl + C در اولین پنجره ترمینال خود متوقف کنید.
6. یک تابع HTTP را از دستگاه محلی خود در Google Cloud مستقر کنید
اکنون که یک تابع Cloud را در دستگاه محلی خود ایجاد، آزمایش و اشکال زدایی کردید، آماده استقرار آن در Google Cloud هستید.
با اجرای دستور زیر بررسی کنید که از پروژه ای که در مرحله 2 ایجاد کرده اید به صورت محلی استفاده می کنید:
gcloud config get-value project
اگر پروژه ای که در مرحله 2 مشخص کرده اید پیکربندی فعال نیست، دستور زیر را اجرا کنید:
gcloud config set project <project-name-created-step-2>
در هر پنجره ترمینال، دستور زیر را اجرا کنید:
gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated
که در آن پارامترها به صورت زیر توضیح داده شده است:
-
deploy validateTemperature
- دستور فرعی gcloud برای استقرار یک تابع Cloud با نامvalidateTemperature
با یک نقطه ورودی به نامvalidateTemperature
-
--trigger-http
- نوع رویداد محرک -
--runtime nodejs12
- زمان اجرا هدفمند برای این تابع -
--allow-unauthenticated
- به دسترسی عمومی برای فراخوانی تابع اجازه می دهد
از شما خواسته می شود که API های Cloud Functions را فعال کنید. برای فعال کردن API ها y
را تایپ کنید.
API [cloudfunctions.googleapis.com] not enabled on project [1057316433766]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y
پس از اتمام استقرار، موارد زیر را در خروجی مشاهده خواهید کرد:
Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: <your-build-id> entryPoint: validateTemperature httpsTrigger: url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature ...
در پنجره ترمینال خود، از curl برای فراخوانی این نقطه پایانی عمومی استفاده کنید.
curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json" -d '{"temp":"50"}'
و با تأیید پاسخ مناسب تأیید کنید که عملکرد ابری شما با موفقیت اجرا شده است.
Temperature OK
7. پاکسازی کنید
برای جلوگیری از هزینههای غیرعمدی، به عنوان مثال، این تابع Cloud بارها بیشتر از تخصیص فراخوانی ماهانه Cloud Function شما در ردیف رایگان، سهوا فراخوانی میشود، میتوانید تابع Cloud را حذف کنید یا پروژهای را که در مرحله 2 ایجاد کردهاید حذف کنید.
برای حذف عملکرد Cloud، به کنسول Cloud Function در https://console.cloud.google.com/functions/ بروید، مطمئن شوید پروژه ای که در مرحله 2 ایجاد کردید، پروژه انتخابی فعلی باشد.
تابع validateTemperature را که در مرحله 6 مستقر کرده اید انتخاب کنید. سپس Delete را بزنید.
اگر تصمیم به حذف کل پروژه دارید، میتوانید به https://console.cloud.google.com/cloud-resource-manager بروید، پروژهای را که در مرحله ۲ ایجاد کردهاید انتخاب کنید و حذف را انتخاب کنید. اگر پروژه را حذف کنید، باید پروژه ها را در Cloud SDK خود تغییر دهید. با اجرای لیست پروژه های gcloud می توانید لیست تمام پروژه های موجود را مشاهده کنید.
8. تبریک می گویم!
برای تکمیل کد لبه تبریک می گویم. میتوانید درباره نحوه پشتیبانی Cloud Functions از زمان اجرا Node.js و نحوه عملکرد اشکالزدایی محلی با توابع Cloud اطلاعات بیشتری کسب کنید.
آنچه را پوشش داده ایم
- Functions Framework برای Node.js.
- یک تابع ابری HTTP به صورت محلی ایجاد و آزمایش کنید.
- یک عملکرد HTTP را از دستگاه محلی خود اشکال زدایی کنید.
- یک تابع HTTP را از دستگاه محلی خود مستقر کنید.