دنیای توسعه نرمافزار بهسمت استفاده از معماریهای مدرنتر و منعطفتر در حرکت است. یکی از این مسیرها، استفاده از کانتینرها و اجرای آنها در محیطهای ابری بدون نیاز به مدیریت سرور است. در همین راستا، گوگل با ارائه سرویس Cloud Run در Google Cloud Platform، امکان اجرای آسان کانتینرها را بهصورت کامل مدیریتشده فراهم کرده است.
در این مقاله با تمرکز بر آموزش Cloud Run و اجرای کانتینر در GCP، تلاش میکنیم به زبان ساده، اما تخصصی، شما را با نحوه استفاده از این سرویس قدرتمند آشنا کنیم.
Cloud Run چیست؟
Cloud Run یکی از سرویسهای serverless گوگل است که به شما امکان میدهد اپلیکیشنهایی که در قالب کانتینر بستهبندی شدهاند را در بستر ابری اجرا کنید. این سرویس با ترکیب سادگی معماری serverless و قدرت کانتینرها، توسعهدهندگان را از دغدغههای مدیریت زیرساخت نجات میدهد.
شما تنها کافیست اپلیکیشن خود را در یک تصویر کانتینری بستهبندی کنید و آن را در Cloud Run بارگذاری نمایید. پس از آن، گوگل بهطور خودکار مقیاسپذیری، مدیریت ترافیک، و نگهداری زیرساخت را انجام میدهد.
تفاوت Cloud Run با دیگر سرویسهای مشابه
در Google Cloud Platform سرویسهای مختلفی برای اجرای برنامهها وجود دارد. Compute Engine برای اجرای ماشینهای مجازی است، App Engine برای برنامههای بدون سرور طراحی شده و Cloud Functions مناسب توابع کوچک و رویداد محور است. اما Cloud Run ویژگیهای خاص خودش را دارد.
بر خلاف App Engine و Cloud Functions که محدود به زبانهای خاص هستند، Cloud Run بهدلیل پشتیبانی از کانتینر، کاملاً زبان-مستقل است. هر زبانی که بتواند داخل کانتینر اجرا شود، قابل استفاده در Cloud Run است. این موضوع دست توسعهدهنده را برای استفاده از تکنولوژیها و فریمورکهای مختلف باز میگذارد.
مزایای استفاده از Cloud Run
یکی از مهمترین مزایای Cloud Run، مقیاسپذیری خودکار آن است. یعنی اگر اپلیکیشن شما در یک لحظه تنها یک درخواست دارد، فقط یک نمونه از آن اجرا میشود. اما اگر هزاران کاربر همزمان به آن دسترسی پیدا کنند، Cloud Run بهصورت خودکار منابع را افزایش میدهد.
از سوی دیگر، پرداخت نیز فقط بر اساس زمان اجرای واقعی انجام میشود. این ویژگی باعث میشود هزینهها کاملاً بهینه و کنترلشده باشند.
سادگی در دیپلوی، اتصال آسان به سرویسهای دیگر GCP مثل Cloud SQL یا Pub/Sub، امنیت سطح بالا و توانایی استفاده از CI/CD نیز از دیگر مزایای این سرویس به شمار میروند.
شروع کار با Cloud Run
برای شروع آموزش Cloud Run و اجرای کانتینر در GCP، ابتدا باید مطمئن شوید که اپلیکیشن شما بهدرستی در یک کانتینر اجرا میشود. یعنی برنامهتان باید دارای یک فایل Dockerfile باشد که دستورالعمل ساخت تصویر کانتینری را مشخص میکند.
در سادهترین حالت، اگر با زبان Python کار میکنید، میتوانید یک فایل Python ایجاد کرده و سپس با استفاده از Dockerfile آن را بستهبندی کنید. در این فایل، ابتدا باید تصویر پایهای (مثلاً python:3.11) انتخاب شود، سپس کد برنامه کپی شده و سرور وب راهاندازی شود.
در مرحله بعد، باید تصویر ساختهشده را در یک مخزن (Registry) بارگذاری کنید. اگر از Artifact Registry یا Container Registry گوگل استفاده کنید، مراحل بارگذاری بهصورت یکپارچه با Cloud Run انجام میشود.
دیپلوی کانتینر در Cloud Run
بعد از بارگذاری تصویر کانتینری، مرحله بعدی اجرای آن در Cloud Run است. برای این کار، میتوانید از کنسول Google Cloud یا از ابزار خط فرمان gcloud استفاده کنید. اگر از خط فرمان استفاده میکنید، تنها با اجرای یک دستور ساده میتوانید کانتینر را دیپلوی کرده و آدرس HTTP آن را دریافت کنید.
در این مرحله، Cloud Run تمام فرآیندهای مورد نیاز را انجام میدهد. از مدیریت ترافیک گرفته تا مقیاسپذیری، همه چیز بهصورت خودکار تنظیم میشود. اپلیکیشن شما تنها زمانی اجرا میشود که درخواست واقعی دریافت کند، و همین موضوع هزینه را کاهش میدهد.
رفتار Cloud Run در زمان اجرا
در زمان اجرا، Cloud Run هر درخواست را به یک نمونه از اپلیکیشن هدایت میکند. اگر تعداد درخواستها افزایش یابد، Cloud Run بهطور خودکار نمونههای بیشتری از برنامه شما ایجاد میکند. اگر درخواستها کاهش پیدا کند، تعداد نمونهها نیز کاهش مییابد.
یکی از نکات مهم این است که Cloud Run به هر نمونه، مقدار مشخصی از منابع (حافظه، CPU) اختصاص میدهد که در هنگام دیپلوی قابل تنظیم است. شما میتوانید مشخص کنید که هر نمونه چند درخواست را همزمان مدیریت کند یا چه میزان رم نیاز دارد.
این کنترل دقیق بر منابع باعث میشود Cloud Run نه تنها انعطافپذیر، بلکه بسیار اقتصادی نیز باشد.
استفاده از Cloud Build برای اتوماسیون
یکی از مزیتهای بزرگ Cloud Run، امکان اتصال مستقیم به سرویسهای CI/CD مثل Cloud Build است. شما میتوانید هر بار که کد جدیدی را در مخزن GitHub یا GitLab بارگذاری کردید، Cloud Build بهطور خودکار یک تصویر کانتینری جدید بسازد و آن را در Cloud Run دیپلوی کند.
این اتوماسیون باعث میشود فرآیند انتشار سریعتر، دقیقتر و بدون خطای انسانی انجام شود. این قابلیت در تیمهای حرفهای توسعه یکی از ارکان DevOps مدرن است.
چه زمانی Cloud Run بهترین انتخاب است؟
Cloud Run برای اپلیکیشنهایی مناسب است که نیاز به انعطافپذیری در زبان برنامهنویسی، مدیریت ساده، مقیاسپذیری خودکار و اجرای سریع دارند. اگر برنامهای دارید که در قالب کانتینر اجرا میشود و میخواهید آن را بدون درگیر شدن با مدیریت سرور اجرا کنید، Cloud Run گزینهای ایدهآل است.
همچنین برای APIهای REST، اپلیکیشنهای سبک، برنامههای پردازش تصویر یا داده و سرویسهای داخلی سازمان، این سرویس یک انتخاب حرفهای است.
ساخت اپلیکیشن نمونه
برای درک بهتر آموزش Cloud Run و اجرای کانتینر در GCP، بیایید یک مثال واقعی را اجرا کنیم. فرض کنیم شما یک اپلیکیشن ساده دارید که پیامی را به کاربر نمایش میدهد. این اپلیکیشن با Python و Flask پیادهسازی شده است.
در فایل main.py کد زیر را قرار دهید:
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'سلام از Cloud Run!'
در کنار آن یک فایل requirements.txt ایجاد کنید و Flask را به آن اضافه کنید. سپس نوبت به ساخت Dockerfile میرسد. در این فایل مراحل نصب، کپی کد و اجرای سرور تعریف میشود.
FROM python:3.11-slim WORKDIR /app COPY . /app RUN pip install -r requirements.txt CMD ["gunicorn", "-b", ":8080", "main:app"]
پس از ساخت این فایلها، با دستور docker build تصویر کانتینر ساخته میشود. سپس با استفاده از gcloud builds submit تصویر را مستقیماً در Cloud Run دیپلوی میکنید.
دیپلوی و اجرای سرویس در Cloud Run
پس از ساخت تصویر، نوبت به دیپلوی آن در Cloud Run میرسد. با اجرای دستور زیر، اپلیکیشن شما روی Cloud Run راهاندازی میشود:
gcloud run deploy your-service-name \ --image gcr.io/your-project-id/your-image-name \ --platform managed \ --region us-central1 \ --allow-unauthenticated
بعد از اجرای این دستور، URL عمومی اپلیکیشن نمایش داده میشود و شما میتوانید از طریق مرورگر آن را مشاهده کنید.
تنظیم منابع و مقیاسپذیری
Cloud Run به شما اجازه میدهد منابع مورد نیاز هر کانتینر را کنترل کنید. برای مثال میتوانید مشخص کنید که هر کانتینر چه مقدار حافظه و CPU داشته باشد. همچنین میتوانید تعیین کنید هر نمونه همزمان چند درخواست را پردازش کند.
تنظیم مقیاسپذیری خودکار یکی از ویژگیهای کلیدی Cloud Run است. زمانی که ترافیک افزایش پیدا میکند، نمونههای بیشتری ایجاد میشود و زمانی که ترافیک کم است، نمونهها به حداقل میرسند یا حتی به صفر میرسند. این ویژگی باعث میشود هزینهها کاهش پیدا کنند و منابع هدر نروند.
مدیریت نسخهها
هر بار که اپلیکیشنی را در Cloud Run دیپلوی میکنید، یک نسخه جدید ایجاد میشود. این امکان به شما اجازه میدهد نسخههای مختلف را آزمایش کنید یا در صورت نیاز به نسخه قبلی بازگردید. در بخش نسخهها، میتوانید تعیین کنید چه درصدی از ترافیک به هر نسخه اختصاص یابد. این قابلیت برای تست A/B بسیار کاربردی است.
نکات امنیتی در Cloud Run
در Cloud Run میتوانید تعیین کنید سرویس شما عمومی باشد یا فقط کاربران خاصی به آن دسترسی داشته باشند. در حالت عمومی، هر کسی که URL را داشته باشد میتواند از سرویس استفاده کند. اما در حالت خصوصی، فقط کاربران احراز هویت شده میتوانند درخواست ارسال کنند.
برای مدیریت دسترسیها، از IAM استفاده میشود. با تعریف نقشها و تعیین مجوزها، میتوانید کنترل دقیقی بر امنیت سرویس خود داشته باشید. همچنین اتصال به پایگاهدادهها یا سرویسهای دیگر GCP نیز میتواند با استفاده از احراز هویت مبتنی بر Service Account انجام شود که امنیت بیشتری دارد.
اتصال به سرویسهای دیگر Google Cloud
Cloud Run میتواند بهراحتی به سرویسهایی مثل Cloud SQL، Firestore، Pub/Sub یا Cloud Storage متصل شود. بهعنوان مثال، اگر بخواهید دادهای را از پایگاهداده بخوانید یا در Storage فایلی را ذخیره کنید، تنها کافیست تنظیمات مربوط به اتصال را در Service Account و Network انجام دهید.
در صورت اتصال به Cloud SQL، باید مطمئن شوید که اتصال از طریق VPC Connector برقرار شده باشد و دسترسی مناسب از طریق IAM صادر شده باشد. استفاده از این ترکیب باعث میشود اپلیکیشن شما انعطافپذیر، امن و قدرتمندتر شود.
مانیتورینگ و خطایابی
برای مشاهده لاگها و خطاهای برنامه، Cloud Run بهصورت یکپارچه با Cloud Logging کار میکند. شما میتوانید لاگهای تولیدشده توسط اپلیکیشن را در کنسول مشاهده و بررسی کنید. همچنین از Cloud Monitoring برای مانیتور وضعیت منابع، تأخیر پاسخدهی و میزان استفاده از سرویس میتوانید بهره ببرید.
این ابزارها به شما کمک میکنند مشکلات را سریعتر شناسایی کرده و عملکرد اپلیکیشن را در شرایط مختلف بررسی کنید.
بهینهسازی هزینهها
یکی از جذابترین ویژگیهای Cloud Run مدل پرداخت آن است. شما فقط برای زمان واقعی اجرای اپلیکیشن هزینه پرداخت میکنید. این یعنی زمانی که اپلیکیشن خاموش است یا هیچ درخواستی ندارد، هزینهای از شما کسر نمیشود.
برای کاهش بیشتر هزینهها میتوانید از ویژگیهایی مثل تعیین حداکثر نمونه، کاهش Timeout و استفاده از حداقل منابع استفاده کنید. همچنین پایش مصرف از طریق ابزار Billing و تعیین هشدار هزینه از جمله راهکارهای دیگر برای بهینهسازی مالی است.
مثال واقعی: API کانتینری شده با Cloud Run
فرض کنید قصد دارید یک API کوچک برای تحلیل دادههای ورودی طراحی کنید. اپلیکیشن شما در یک کانتینر قرار دارد و با Flask پیادهسازی شده است. این API پس از دریافت داده، آن را پردازش کرده و نتیجه را برمیگرداند. با استفاده از Cloud Run، میتوانید این API را در چند دقیقه راهاندازی کرده و در صورت نیاز آن را با سایر سرویسهای GCP ترکیب کنید.
چنین معماریای نهتنها باعث افزایش سرعت توسعه میشود، بلکه مقیاسپذیری و پایداری اپلیکیشن را نیز بهطور چشمگیری بهبود میدهد.
نتیجه گیری
در پارت دوم آموزش Cloud Run و اجرای کانتینر در GCP به اجرای عملی اپلیکیشن، ساخت و دیپلوی کانتینر، تنظیم منابع، مسائل امنیتی، اتصال به سرویسهای دیگر و نکات بهینهسازی پرداختیم. حالا میدانید چطور یک اپلیکیشن کانتینری را در کمترین زمان و با کمترین دغدغه روی Cloud Run اجرا کنید.
Cloud Run راهی حرفهای، اما ساده برای توسعه اپلیکیشنهای مدرن در فضای ابری است. اگر به دنبال سرویسی هستید که مقیاسپذیری بالا، سادگی در توسعه، امنیت و اتصال به سایر سرویسها را یکجا در اختیارتان بگذارد، Cloud Run یکی از بهترین گزینههاست. اگر قصد دارید اپلیکیشن خود را در محیطی پایدار و بدون دردسر اجرا کنید یا نیاز به راهنمایی تخصصی در استفاده از Cloud Run دارید، تیم نکس زون آماده است تا در تمام مراحل همراه شما باشد.