سلام Cloud Run with Python

1. مقدمه

96d07289bb51daa7.png

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Cloud Shell را راه اندازی کنید

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

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید 853e55310c205094.png .

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

9f0e51b578fecce5.png

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

پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list

خروجی فرمان

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

3. API ها را فعال کنید

از Cloud Shell، APIهای Artifact Registry، Cloud Build و Cloud Run را فعال کنید:

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

این پیام موفقیت آمیزی مشابه این پیام را نشان می دهد:

Operation "operations/..." finished successfully.

اکنون، شما آماده شروع کار و نوشتن برنامه خود هستید...

4. برنامه را بنویسید

در این مرحله، شما یک برنامه ساده پایتون مبتنی بر Flask می‌سازید که به درخواست‌های HTTP پاسخ می‌دهد.

دایرکتوری کار

از Cloud Shell برای ایجاد دایرکتوری کاری به نام helloworld-python استفاده کنید و به آن سوئیچ کنید:

mkdir ~/helloworld-python
cd ~/helloworld-python

main.py

فایلی به نام main.py ایجاد کنید:

touch main.py

فایل را با ویرایشگر خط فرمان دلخواه خود (nano، vim، یا emacs) یا با کلیک کردن روی دکمه Cloud Shell Editor ویرایش کنید:

10af7b1a6240e9f4.gif

برای ویرایش مستقیم فایل با Cloud Shell Editor از این دستور استفاده کنید:

cloudshell edit main.py

main.py

from flask import Flask, request

app = Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    who = request.args.get("who", default="World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Development only: run "python main.py" and open http://localhost:8080
    # When deploying to Cloud Run, a production-grade WSGI HTTP server,
    # such as Gunicorn, will serve the app.
    app.run(host="localhost", port=8080, debug=True)

این کد یک سرویس وب اولیه ایجاد می کند که به درخواست های HTTP GET با یک پیام دوستانه پاسخ می دهد.

الزامات. txt

برای تعریف وابستگی ها فایلی به نام requirements.txt اضافه کنید:

touch requirements.txt

برای ویرایش مستقیم فایل با Cloud Shell Editor از این دستور استفاده کنید:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/flask
Flask==3.0.2

# https://pypi.org/project/gunicorn
gunicorn==21.2.0

نمایه

در نهایت، یک فایل به نام Procfile اضافه کنید تا نحوه ارائه برنامه را مشخص کنید:

touch Procfile

برای ویرایش مستقیم فایل با Cloud Shell Editor از این دستور استفاده کنید:

cloudshell edit Procfile

Procfile

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

اطمینان حاصل کنید که همه فایل‌ها در پوشه کاری موجود هستند:

ls

این باید فایل های زیر را فهرست کند:

main.py  Procfile  requirements.txt

برنامه شما آماده استقرار است، اما بیایید ابتدا آن را آزمایش کنیم...

5. برنامه را تست کنید

برای آزمایش برنامه، یک محیط مجازی ایجاد کنید:

virtualenv venv

فعال کردن محیط مجازی:

source venv/bin/activate

وابستگی ها را نصب کنید:

pip install -r requirements.txt

شما باید یک پیام تایید مانند زیر دریافت کنید:

...
Successfully installed Flask ... gunicorn ...

برنامه را شروع کنید:

python main.py

گزارش‌ها نشان می‌دهند که شما در حالت توسعه هستید:

 * Serving Flask app 'main'
 * Debug mode: on
   WARNING: This is a development server.
   Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Running on http://localhost:8080
   Press CTRL+C to quit
...

در پنجره Cloud Shell، روی نماد Web Preview کلیک کنید و Preview on port 8080 را انتخاب کنید:

6c9ff9e5c692c58e.gif

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

همچنین می‌توانید با کلیک کردن روی نماد + و ارسال درخواست وب به برنامه‌ای که به صورت محلی اجرا می‌شود، یک جلسه Cloud Shell دیگر (یک برگه ترمینال جدید) باز کنید:

curl localhost:8080

شما باید پاسخ زیر را دریافت کنید:

Hello World!

وقتی کارتان تمام شد، به جلسه اصلی Cloud Shell برگردید و دستور python main.py را با CTRL+C متوقف کنید.

خروج از محیط مجازی:

deactivate

در نهایت، دایرکتوری محیط مجازی را حذف کنید:

rm -r venv/

برنامه شما همانطور که انتظار می رود کار می کند: بیایید آن را گسترش دهیم...

6. در Cloud Run مستقر شوید

Cloud Run منطقه‌ای است، به این معنی که زیرساختی که سرویس‌های Cloud Run شما را اجرا می‌کند در یک منطقه خاص قرار دارد و توسط Google مدیریت می‌شود تا به‌طور اضافی در تمام مناطق آن منطقه در دسترس باشد. منطقه ای را که برای استقرار خود استفاده می کنید، تعریف کنید، به عنوان مثال:

REGION="europe-west9"

مطمئن شوید که هنوز در دایرکتوری کاری هستید:

ls

این باید فایل های زیر را فهرست کند:

main.py  Procfile  requirements.txt

استقرار برنامه در Cloud Run:

gcloud run deploy helloworld-python \
  --source . \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated
  • شما می توانید یک منطقه پیش فرض را با این دستور تعریف کنید: gcloud config set run/region $REGION
  • همچنین می توانید Cloud Run را به صورت پیش فرض با این دستور مدیریت کنید: gcloud config set run/platform managed
  • گزینه --allow-unauthenticated سرویس را در دسترس عموم قرار می دهد. برای جلوگیری از درخواست های احراز هویت نشده، به جای آن از --no-allow-unauthenticated استفاده کنید.

اولین بار، یک اعلان برای ایجاد یک مخزن رجیستری Artifact دریافت خواهید کرد. برای تأیید اعتبار روی Enter ضربه بزنید:

Deploying from source requires an Artifact Registry Docker repository to store
built containers. A repository named [cloud-run-source-deploy] in region [REGION]
will be created.

Do you want to continue (Y/n)?

با این کار آپلود کد منبع شما در مخزن Artifact Registry و ساخت تصویر ظرف شما راه اندازی می شود:

Building using Buildpacks and deploying container ...
* Building and deploying new service... Building Container.           
  OK Creating Container Repository...
  OK Uploading sources...
  * Building Container... Logs are available at ...

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

...
OK Building and deploying new service... Done.
  OK Creating Container Repository...
  OK Uploading sources...
  OK Building Container... Logs are available at ...
  OK Creating Revision... Creating Service.
  OK Routing traffic...
  OK Setting IAM Policy...
Done.
Service [SERVICE]... has been deployed and is serving 100 percent of traffic.
Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app

با این دستور می توانید URL سرویس را دریافت کنید:

SERVICE_URL=$( \
  gcloud run services describe helloworld-python \
  --platform managed \
  --region $REGION \
  --format "value(status.url)" \
)
echo $SERVICE_URL

این باید چیزی شبیه به زیر نمایش دهد:

https://helloworld-python-PROJECTHASH-REGIONID.a.run.app

اکنون می توانید با باز کردن URL سرویس در یک مرورگر وب از برنامه خود استفاده کنید:

c836b93e5601e2cf.gif

همچنین می توانید از Cloud Shell با برنامه تماس بگیرید:

curl $SERVICE_URL?who=me

این باید به شما خوشامدگویی مورد انتظار را بدهد:

Hello me!

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

7. پاکسازی کنید

در حالی که Cloud Run زمانی که از سرویس استفاده نمی‌شود شارژ نمی‌شود، ممکن است همچنان برای ذخیره تصویر ظرف در Artifact Registry هزینه دریافت کنید. برای جلوگیری از تحمیل هزینه، می توانید مخزن خود را حذف کنید یا پروژه Cloud خود را حذف کنید. با حذف پروژه Cloud، صورت‌حساب تمام منابع مورد استفاده در آن پروژه متوقف می‌شود.

برای حذف مخزن تصویر ظرف خود:

gcloud artifacts repositories delete cloud-run-source-deploy \
  --location $REGION

برای حذف سرویس Cloud Run:

gcloud run services delete helloworld-python \
  --platform managed \
  --region $REGION

برای حذف پروژه Google Cloud خود،

  1. شناسه پروژه فعلی خود را بازیابی کنید:
PROJECT_ID=$(gcloud config get-value core/project)
  1. مطمئن شوید که این پروژه ای است که می خواهید حذف کنید:
echo $PROJECT_ID
  1. پروژه را حذف کنید:
gcloud projects delete $PROJECT_ID

8. تبریک!

96d07289bb51daa7.png

شما یک برنامه وب ساده ایجاد کردید و آن را در Cloud Run مستقر کردید!

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.