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

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

پیش نیازها

N/A

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

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:

اسکرین شات از 10/02/2016 12:45:26.png

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

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

گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).

کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.

پوسته ابری

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

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

برای فعال‌سازی Google Cloud Shell، از کنسول توسعه‌دهنده به سادگی روی دکمه سمت راست بالای صفحه کلیک کنید (تنها چند لحظه طول می‌کشد تا محیط را تهیه کرده و به آن متصل شوید):

activateCloudShell.png

روی دکمه "شروع Cloud Shell" کلیک کنید:

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

پس از اتصال به پوسته ابری، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی PROJECT_ID شما تنظیم شده است:

gcloud auth list

خروجی فرمان

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

خروجی فرمان

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

<PROJECT_ID>

اگر به دلایلی پروژه تنظیم نشد، به سادگی دستور زیر را صادر کنید:

gcloud config set project <PROJECT_ID>

به دنبال PROJECT_ID خود هستید؟ بررسی کنید از چه شناسه ای در مراحل راه اندازی استفاده کرده اید یا آن را در داشبورد کنسول جستجو کنید:

Project_ID.png

مهم: در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید:

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.

شما یک برنامه ساده و مبتنی بر اکسپرس 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 بارگذاری شود.

برای کانتینری کردن برنامه نمونه، یک فایل جدید به نام 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 استفاده کنید.

استقرار برنامه کانتینری خود در 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 وقتی از سرویس استفاده نمی‌شود شارژ نمی‌شود، ممکن است همچنان برای ذخیره تصویر کانتینر ساخته شده هزینه‌ای دریافت کنید.

می‌توانید پروژه 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

تبریک می گویم! شما یک برنامه بسته بندی شده در یک تصویر کانتینر را در Cloud Run مستقر کرده اید.

بیشتر بدانید

یک قدم خوب بعدی، بررسی Quickstart: Deploy to Cloud Run برای Anthos در Google Cloud است .

برای اطلاعات بیشتر در مورد ساخت یک کانتینر HTTP بدون حالت مناسب برای Cloud Run از منبع کد و فشار دادن آن به Container Registry، به منابع زیر مراجعه کنید:

برای کسب اطلاعات بیشتر در مورد Knative، پروژه منبع باز زیربنایی، Knative را ببینید.