سلام Cloud Run با سی شارپ

۱. مقدمه

89eb4723767d4525.png

Cloud Run یک پلتفرم مدیریت‌شده است که به شما امکان می‌دهد کانتینرهای بدون وضعیت (stateless) را که از طریق درخواست‌های HTTP قابل فراخوانی هستند، اجرا کنید. Cloud Run بدون سرور است: تمام مدیریت زیرساخت را حذف می‌کند، بنابراین می‌توانید روی آنچه که بیشترین اهمیت را دارد تمرکز کنید - ساخت برنامه‌های عالی.

این برنامه از Knative ساخته شده است و به شما امکان می‌دهد کانتینرهای خود را یا به طور کامل با Cloud Run مدیریت شده یا در خوشه Google Kubernetes Engine خود با Cloud Run روی GKE اجرا کنید.

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

۲. تنظیمات و الزامات

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

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

پوسته ابری گوگل

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، ما از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهیم کرد.

Cloud Shell یک محیط توسعه و عملیات آنلاین است که از هر مکانی با مرورگر شما قابل دسترسی است. می‌توانید منابع خود را با ترمینال آنلاین آن که از قبل با ابزارهایی مانند ابزار خط فرمان gcloud، kubectl و موارد دیگر بارگذاری شده است، مدیریت کنید. همچنین می‌توانید برنامه‌های مبتنی بر ابر خود را با استفاده از ویرایشگر آنلاین Cloud Shell توسعه، ساخت، اشکال‌زدایی و مستقر کنید.

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما بارگذاری شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی پایدار ارائه می‌دهد و مستقیماً در Google Cloud اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش می‌دهد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی Chromebook کار می‌کند).

  • برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate Cloud Shell کلیک کنید:

cb81e7c8e34bc8d.png

اگر این اولین باری است که Cloud Shell را اجرا می‌کنید، یک صفحه میانی برای توصیف آن به شما نمایش داده می‌شود. اگر با یک صفحه میانی مواجه شدید، روی ادامه کلیک کنید.

bfde7b083abc9544.png

آماده‌سازی محیط فقط باید چند ثانیه طول بکشد:

cbb597d2be277a14.png

پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شده‌اید:

gcloud auth list

خروجی دستور

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

همچنین پروژه باید از قبل روی PROJECT_ID شما تنظیم شده باشد (با فرض اینکه شما یک پروژه را در کنسول وب انتخاب کرده باشید):

gcloud config list project

خروجی دستور

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

به دنبال PROJECT_ID خود هستید؟ منوی کشویی بالای Cloud Console را بررسی کنید:

2c7a57249d954735.png

همچنین می‌توانید جزئیات پروژه خود را با استفاده از بخش «تنظیمات و ابزارها» بررسی کنید:

791f101797cfef39.png

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.

۳. نمونه درخواست را بنویسید

ما یک برنامه ساده ASP.NET C# خواهیم ساخت که به درخواست‌های HTTP پاسخ می‌دهد.

برای ایجاد برنامه خود، از ابزار خط فرمان dotnet در Cloud Shell استفاده کنید:

dotnet new web -o helloworld-csharp

به دایرکتوری helloworld-csharp بروید:

cd helloworld-csharp

سپس، Program.cs را به‌روزرسانی کنید تا با موارد زیر مطابقت داشته باشد:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

این کد یک وب سرور ساده ایجاد می‌کند که به پورت تعریف شده توسط متغیر محیطی PORT گوش می‌دهد و با Hello World پاسخ می‌دهد.

می‌توانید برنامه را با اجرای محلی آن در Cloud Shell آزمایش کنید. باید ببینید که روی پورت ۸۰۸۰ در حال گوش دادن است:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

۴. استقرار در Cloud Run

برنامه خود را با دستور زیر در Cloud Run مستقر کنید:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world نام سرویس است.
  • پرچم allow-unauthenticated سرویس را به عنوان یک سرویس در دسترس عموم و بدون نیاز به احراز هویت، مستقر می‌کند.
  • us-central1 منطقه‌ای است که برنامه در آن مستقر خواهد شد.
  • پرچم source ، محل منبعی که باید ساخته شود را تعیین می‌کند. Cloud Run از buildpacks برای ایجاد خودکار یک کانتینر از کد منبع استفاده می‌کند.

چند دقیقه صبر کنید تا استقرار کامل شود. در صورت موفقیت، خط فرمان URL سرویس را نمایش می‌دهد:

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

اکنون می‌توانید با باز کردن URL سرویس در یک مرورگر وب، کانتینر مستقر شده خود را مشاهده کنید:

85e7fbbd264444c9.png

تبریک! شما به تازگی یک برنامه کاربردی بسته‌بندی شده در یک تصویر کانتینر را در Cloud Run مستقر کرده‌اید. Cloud Run به طور خودکار و افقی تصویر کانتینر شما را برای مدیریت درخواست‌های دریافتی مقیاس‌بندی می‌کند، سپس با کاهش تقاضا، مقیاس‌بندی را کاهش می‌دهد. شما فقط هزینه CPU، حافظه و شبکه مصرفی در حین مدیریت درخواست را پرداخت می‌کنید.

۵. وقت تمیزکاری است

شما می‌توانید تصمیم بگیرید که پروژه GCP خود را حذف کنید تا از پرداخت هزینه‌ها جلوگیری شود، که این امر باعث توقف پرداخت هزینه برای تمام منابع مورد استفاده در آن پروژه می‌شود، یا به سادگی سرویس Cloud Run را حذف کنید:

gcloud run services delete helloworld

۶. قدم بعدی چیست؟

قدم بعدی خوب ، Deploy to Cloud Run on GKE خواهد بود.

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