1. قبل از شروع
Cloud Run یک پلت فرم محاسباتی مدیریت شده است که به شما امکان می دهد کانتینرهای بدون حالتی را اجرا کنید که از طریق درخواست های HTTP قابل فراخوانی هستند. Cloud Run بدون سرور است. نیاز به مدیریت زیرساخت را از بین می برد، بنابراین می توانید بر روی آنچه که مهمتر است تمرکز کنید - ساخت برنامه های عالی. این از Knative ساخته شده است و به شما امکان می دهد کانتینرهای خود را با Cloud Run (کاملاً مدیریت شده) یا Cloud Run برای Anthos اجرا کنید. هدف این کد لبه این است که شما یک تصویر ظرف بسازید و آن را در Cloud Run مستقر کنید.
پیش نیازها
N/A
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
پوسته ابری
در حالی که Google Cloud را میتوان از راه دور از لپتاپ خود کار کرد، از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد.
این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).
- برای فعال کردن Cloud Shell از Cloud Console، کافی است روی 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
شما می توانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به مناطق و مناطق مراجعه کنید.
Cloud Run API را فعال کنید
از Cloud Shell، Cloud Run API را فعال کنید.
gcloud services enable run.googleapis.com
که باید یک پیام موفق مشابه این را ایجاد کند:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. برنامه نمونه را بنویسید
شما یک برنامه ساده و مبتنی بر اکسپرس Node.js خواهید ساخت که به درخواستهای 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 بارگذاری شود.
4. برنامه خود را کانتینر کنید و آن را در 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
) را مشاهده خواهید کرد. تصویر در Container Registry ذخیره می شود و در صورت تمایل می توان از آن مجددا استفاده کرد.
با استفاده از این دستور می توانید تمام تصاویر کانتینر مرتبط با پروژه فعلی خود را فهرست کنید:
gcloud container images list
اگر می خواهید برنامه را به صورت محلی از Cloud Shell اجرا و آزمایش کنید، می توانید آن را با استفاده از این دستور docker
استاندارد راه اندازی کنید:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
در Cloud Shell، روی Web Preview کلیک کنید و Preview on port 8080 را انتخاب کنید.
یک پنجره مرورگر باز می شود که می گوید Hello World!
شما همچنین می توانید به سادگی curl localhost:8080
استفاده کنید.
5. در 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، حافظه و شبکه مصرف شده در هنگام رسیدگی به درخواست را پرداخت می کنید.
6. پاکسازی کنید
در حالی که Cloud Run وقتی از سرویس استفاده نمیشود شارژ نمیشود، ممکن است همچنان برای ذخیره تصویر کانتینر ساخته شده هزینهای دریافت کنید.
میتوانید پروژه Google Cloud خود را حذف کنید تا از تحمیل هزینهها جلوگیری کنید، که صورتحساب تمام منابع استفادهشده برای آن پروژه را متوقف میکند، یا به سادگی تصویر helloworld خود را با استفاده از این دستور حذف کنید:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
برای حذف سرویس Cloud Run از این دستور استفاده کنید:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. تبریک می گویم
تبریک می گویم! شما یک برنامه بسته بندی شده در یک تصویر کانتینر را در Cloud Run مستقر کرده اید.
بیشتر بدانید
یک قدم خوب بعدی، بررسی Quickstart: Deploy to Cloud Run برای Anthos در Google Cloud است.
برای اطلاعات بیشتر در مورد ساخت یک کانتینر HTTP بدون حالت مناسب برای Cloud Run از منبع کد و فشار دادن آن به Container Registry، به منابع زیر مراجعه کنید:
برای کسب اطلاعات بیشتر در مورد Knative، پروژه منبع باز زیربنایی، Knative را ببینید.