یک کانتینر را با Cloud Run در Node.js مستقر کرده و اجرا کنید

1. قبل از شروع

6a5cf23c8e20491f.png

Cloud Run یک پلت فرم محاسباتی مدیریت شده است که به شما امکان می دهد کانتینرهای بدون حالتی را اجرا کنید که از طریق درخواست های HTTP قابل فراخوانی هستند. Cloud Run بدون سرور است. نیاز به مدیریت زیرساخت را از بین می برد، بنابراین می توانید بر روی آنچه که مهمتر است تمرکز کنید - ساخت برنامه های عالی. این از Knative ساخته شده است و به شما امکان می دهد کانتینرهای خود را با Cloud Run (کاملاً مدیریت شده) یا Cloud Run برای Anthos اجرا کنید. هدف این کد لبه این است که شما یک تصویر ظرف بسازید و آن را در Cloud Run مستقر کنید.

پیش نیازها

N/A

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJHHXieCvXw5 Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8CXUF

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه می‌کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورت‌حساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

پوسته ابری

در حالی که Google Cloud را می‌توان از راه دور از لپ‌تاپ خود کار کرد، از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود، استفاده خواهید کرد.

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

  1. برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate Cloud Shell کلیک کنید. fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7P6XFNqNqVB7p6FQNqNqVBQ7P6XfNqSw P-X3Q (تهیه و اتصال به محیط فقط چند لحظه طول می کشد).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1NYAd

Screen Shot 2017-06-14 at 10.13.43 PM.png

پس از اتصال به 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 جستجو کنید:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93DrxZHQ4PhZ5

Cloud Shell همچنین برخی از متغیرهای محیطی را به صورت پیش‌فرض تنظیم می‌کند که ممکن است هنگام اجرای دستورات آینده مفید باشند.

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

<PROJECT_ID>
  1. در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید.
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 کلیک کنید 170b7a95be8c6296.png و Preview on port 8080 را انتخاب کنید.

3618ca3a4a135570.png

یک پنجره مرورگر باز می شود که می گوید Hello World!

a0307f34cacf9e6a.png

شما همچنین می توانید به سادگی 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 سرویس در یک مرورگر وب، از کانتینر مستقر شده خود بازدید کنید:

63260b4d3aee42b8.png

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 را ببینید.