۱. قبل از شروع

Cloud Run یک پلتفرم محاسباتی مدیریتشده است که به شما امکان میدهد کانتینرهای بدون وضعیت (stateless) را که از طریق درخواستهای HTTP قابل فراخوانی هستند، اجرا کنید. Cloud Run بدون سرور است؛ این پلتفرم نیاز به مدیریت زیرساخت را از بین میبرد، بنابراین میتوانید روی آنچه که بیشترین اهمیت را دارد - ساخت برنامههای عالی - تمرکز کنید. این پلتفرم توسط Knative ساخته شده است و به شما امکان میدهد کانتینرهای خود را با Cloud Run (کاملاً مدیریتشده) یا Cloud Run برای Anthos اجرا کنید. هدف این codelab این است که شما یک تصویر کانتینر بسازید و آن را در Cloud Run مستقر کنید.
پیشنیازها
ناموجود
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما برای این کار از Cloud Shell ، یک محیط خط فرمان که در گوگل کلود اجرا میشود، استفاده خواهید کرد.
این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کرومبوک هم کار میکند).
- برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate Cloud Shell کلیک کنید.
(فقط چند لحظه طول میکشد تا آماده شود و به محیط متصل شود).
پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شدهاید و پروژه از قبل روی PROJECT_ID شما تنظیم شده است.
gcloud auth list
خروجی دستور
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر به هر دلیلی پروژه تنظیم نشده باشد، کافیست دستور زیر را اجرا کنید:
gcloud config set project <PROJECT_ID>
به دنبال PROJECT_ID خود هستید؟ بررسی کنید که در مراحل راهاندازی از چه شناسهای استفاده کردهاید یا آن را در داشبورد Cloud Console جستجو کنید:
Cloud Shell همچنین برخی از متغیرهای محیطی را به طور پیشفرض تنظیم میکند که ممکن است هنگام اجرای دستورات بعدی مفید باشند.
echo $GOOGLE_CLOUD_PROJECT
خروجی دستور
<PROJECT_ID>
- در نهایت، منطقه پیشفرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f
شما میتوانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به بخش مناطق و نواحی مراجعه کنید.
فعال کردن API اجرای ابری
از Cloud Shell، رابط برنامهنویسی کاربردی Cloud Run را فعال کنید.
gcloud services enable run.googleapis.com
این باید یک پیام موفقیتآمیز مشابه این تولید کند:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
۳. برنامه نمونه را بنویسید
شما یک برنامه Node.js ساده و مبتنی بر Express خواهید ساخت که به درخواستهای HTTP پاسخ میدهد.
برای ساخت برنامه خود، با استفاده از Cloud Shell یک دایرکتوری جدید به نام helloworld-nodejs ایجاد کنید و دایرکتوری را به آن تغییر دهید.
mkdir helloworld-nodejs cd helloworld-nodejs
یک فایل package.json با محتوای زیر ایجاد کنید:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
از همه مهمتر، فایل بالا شامل یک دستور اسکریپت شروع و یک وابستگی به چارچوب برنامه وب Express است.
سپس، در همان دایرکتوری، یک فایل index.js ایجاد کنید و محتوای زیر را در آن کپی کنید:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
این کد یک وب سرور پایه ایجاد میکند که به پورت تعریف شده توسط متغیر محیطی PORT گوش میدهد. اکنون برنامه شما آماده کانتینرایز شدن، آزمایش و آپلود در Container Registry است.
۴. برنامه خود را کانتینرایز کنید و آن را در Container Registry آپلود کنید
برای کانتینرایز کردن برنامه نمونه، یک فایل جدید با نام Dockerfile در همان دایرکتوری فایلهای منبع ایجاد کنید و محتوای زیر را در آن کپی کنید:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
اکنون، با اجرای دستور زیر از دایرکتوری حاوی Dockerfile، تصویر کانتینر خود را با استفاده از Cloud Build بسازید:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT یک متغیر محیطی است که شامل شناسه پروژه Google Cloud شما هنگام اجرا در Cloud Shell است. همچنین میتوانید آن را با اجرای gcloud config get-value project دریافت کنید.
پس از ارسال به رجیستری، یک پیام SUCCESS حاوی نام تصویر ( gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld ) مشاهده خواهید کرد. تصویر در رجیستری کانتینر ذخیره میشود و در صورت تمایل میتوان از آن دوباره استفاده کرد.
شما میتوانید با استفاده از این دستور، تمام تصاویر کانتینر مرتبط با پروژه فعلی خود را فهرست کنید:
gcloud container images list
اگر میخواهید برنامه را به صورت محلی از Cloud Shell اجرا و آزمایش کنید، میتوانید آن را با استفاده از این دستور استاندارد docker اجرا کنید:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
در Cloud Shell، روی پیشنمایش وب کلیک کنید
و پیشنمایش را روی پورت ۸۰۸۰ انتخاب کنید.

این یک پنجره مرورگر باز میکند که میگوید «سلام دنیا!»

همچنین میتوانید به سادگی از curl localhost:8080 استفاده کنید.
۵. استقرار در Cloud Run
استقرار برنامه کانتینر شده شما در Cloud Run با استفاده از دستور زیر انجام میشود (مطمئن شوید که آن را با نام تصویر صحیح برای برنامهای که ساختهاید تنظیم میکنید یا از تصویر پیشساخته gcr.io/cloudrun/hello استفاده میکنید):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
گزینه --allow-unauthenticated deploy به شما این امکان را میدهد که بدون احراز هویت به برنامه دسترسی پیدا کنید. گزینه --platform managed \ deploy به این معنی است که شما درخواست یک محیط کاملاً مدیریتشده را دارید (نه زیرساخت Kubernetes از طریق Anthos).
چند لحظه صبر کنید تا استقرار کامل شود. پس از اتمام، خط فرمان URL سرویس را نمایش میدهد.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
اکنون میتوانید با باز کردن URL سرویس در یک مرورگر وب، کانتینر مستقر شده خود را مشاهده کنید:

Cloud Run به طور خودکار و افقی مقیاس تصویر کانتینر شما را برای رسیدگی به درخواستهای دریافتی افزایش میدهد، سپس با کاهش تقاضا، مقیاس را کاهش میدهد. شما فقط هزینه CPU، حافظه و شبکه مصرفی در حین رسیدگی به درخواست را پرداخت میکنید.
۶. تمیز کردن
اگرچه Cloud Run در صورت عدم استفاده از سرویس، هزینهای دریافت نمیکند، اما ممکن است همچنان برای ذخیره تصویر کانتینر ساخته شده هزینه دریافت شود.
شما میتوانید پروژه گوگل کلود خود را حذف کنید تا از پرداخت هزینهها جلوگیری شود، که این امر باعث توقف پرداخت هزینه برای تمام منابع مورد استفاده برای آن پروژه میشود، یا به سادگی تصویر helloworld خود را با استفاده از این دستور حذف کنید:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
برای حذف سرویس Cloud Run، از این دستور استفاده کنید:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
۷. تبریک
تبریک! شما یک برنامهی بستهبندیشده در یک تصویر کانتینر را در Cloud Run مستقر کردید.
بیشتر بدانید
قدم بعدی خوب این است که Quickstart: Deploy to Cloud Run را برای Anthos در Google Cloud بررسی کنید.
برای اطلاعات بیشتر در مورد ساخت یک کانتینر HTTP بدون وضعیت مناسب برای Cloud Run از منبع کد و ارسال آن به Container Registry، به منابع زیر مراجعه کنید:
برای کسب اطلاعات بیشتر در مورد Knative، پروژه متنباز زیربنایی، به Knative مراجعه کنید.