1. مقدمه
Cloud Run یک پلت فرم محاسباتی مدیریت شده است که به شما امکان می دهد کانتینرهای بدون حالتی را اجرا کنید که با استفاده از درخواست های HTTP قابل فراخوانی هستند. این برنامه بر اساس پروژه منبع باز Knative ساخته شده است و امکان حمل بارهای کاری شما را در پلتفرم ها فراهم می کند. Cloud Run بدون سرور است: تمام مدیریت زیرساخت را انتزاعی می کند، بنابراین شما می توانید روی آنچه که مهمتر است تمرکز کنید - ساخت برنامه های کاربردی عالی.
هدف از این آموزش ایجاد یک برنامه وب ساده FastAPI و استقرار آن در Cloud Run است.
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک برنامه کاربردی FastAPI "Hello World".
- آزمایش برنامه با اجرای سرور FastAPI در حالت
dev
. - Cloud Buildpacks و نحوه حضور
fastapi
وuvicorn
در یکrequirements.txt
اجازه میدهد هیچ Dockerfile مورد نیاز نباشد. - نحوه استقرار برنامه FastAPI در Cloud Run.
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این آموزش شما از Cloud Shell استفاده می کنید، یک محیط خط فرمان که در Cloud اجرا می شود.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید
اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.
پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در 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`
- دستور زیر را در 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. برنامه را بنویسید
در این مرحله، یک برنامه کاربردی Python FastAPI «Hello World» میسازید که به درخواستهای HTTP پاسخ میدهد.
دایرکتوری کار
از Cloud Shell برای ایجاد دایرکتوری کاری به نام helloworld-fastapi
استفاده کنید و به آن سوئیچ کنید:
mkdir ~/helloworld-fastapi && cd ~/helloworld-fastapi
main.py
فایلی به نام main.py
ایجاد کنید:
touch main.py
فایل را با ویرایشگر خط فرمان دلخواه خود (nano، vim، یا emacs) یا با کلیک کردن روی دکمه Cloud Shell Editor ویرایش کنید:
برای ویرایش مستقیم فایل با Cloud Shell Editor از این دستور استفاده کنید:
cloudshell edit main.py
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hello(name: str = "World"):
"""Return a friendly HTTP greeting."""
return {
"message": f"Hello {name}!"
}
این کد یک سرویس وب اولیه ایجاد می کند که به درخواست های HTTP GET با یک پیام دوستانه پاسخ می دهد.
الزامات. txt
ترمینال را دوباره باز کنید و فایلی به نام requirements.txt
اضافه کنید تا وابستگی ها را تعریف کنید:
touch requirements.txt
برای ویرایش مستقیم فایل با Cloud Shell Editor از این دستور استفاده کنید:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/fastapi
fastapi[standard]==0.116.1
# https://pypi.org/project/uvicorn
uvicorn==0.35.0
برنامه FastAPI آماده استقرار است، اما ابتدا زمان آزمایش آن فرا رسیده است...
5. برنامه را تست کنید
برای آزمایش برنامه، از uv (بسته بسیار سریع پایتون و مدیر پروژه) استفاده کنید که از قبل در Cloud Shell نصب شده است.
برای آزمایش برنامه، یک محیط مجازی ایجاد کنید:
uv venv
وابستگی ها را نصب کنید:
uv pip install -r requirements.txt
برنامه را در حالت dev
راه اندازی کنید:
uv run fastapi dev main.py --port=8080
گزارشها نشان میدهند که شما در حالت توسعه هستید:
FastAPI Starting development server 🚀 Searching for package file structure from directories with __init__.py files Importing from /home/user/code/helloworld-fastapi module 🐍 main.py code Importing the FastAPI app object from the module with the following code: from main import app app Using import string: main:app server Server started at http://127.0.0.1:8080 server Documentation at http://127.0.0.1:8080/docs tip Running in development mode, for production use: fastapi run Logs: INFO Will watch for changes in these directories: ['/home/user/code/helloworld-fastapi'] INFO Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit) INFO Started reloader process [19627] using WatchFiles INFO Started server process [19629] INFO Waiting for application startup. INFO Application startup complete.
در پنجره Cloud Shell، روی نماد Web Preview
کلیک کنید و Preview on port 8080
انتخاب کنید:
این باید یک پنجره مرورگر باز کند که Hello World!
پیام
همچنین میتوانید با کلیک کردن روی نماد +
و ارسال درخواست وب به برنامهای که به صورت محلی اجرا میشود، یک جلسه Cloud Shell دیگر (یک برگه ترمینال جدید) باز کنید:
curl localhost:8080
شما باید پاسخ زیر را دریافت کنید:
{"message": "Hello World!"}
وقتی کارتان تمام شد، به جلسه اصلی Cloud Shell برگردید و سرور توسعه دهنده FastAPI را با CTRL+C
متوقف کنید.
برنامه همانطور که انتظار می رود کار می کند: زمان استقرار آن ...
6. در Cloud Run مستقر شوید
Cloud Run منطقهای است، به این معنی که زیرساختی که سرویسهای Cloud Run شما را اجرا میکند در یک منطقه خاص قرار دارد و توسط Google مدیریت میشود تا بهطور اضافی در تمام مناطق آن منطقه در دسترس باشد. منطقه ای را که برای استقرار خود استفاده می کنید، تعریف کنید، به عنوان مثال:
REGION=europe-west1
مطمئن شوید که هنوز در دایرکتوری کاری هستید:
ls
این باید فایل های زیر را فهرست کند:
main.py requirements.txt
قبل از استقرار، یک فایل .gcloudignore
با .venv/
در آن ایجاد کنید. این امر مانع از استقرار Cloud Run میشود که محیط مجازی را که از uv
در طول آزمایش محلی ایجاد شده است، شامل شود.
.gcloudignore
با دستور زیر ایجاد کنید:
echo ".venv/" > .gcloudignore
استقرار برنامه در Cloud Run:
gcloud run deploy helloworld-fastapi \
--source . \
--region $REGION \
--allow-unauthenticated
- گزینه
--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-fastapi \
--region $REGION \
--format "value(status.address.url)" \
)
echo $SERVICE_URL
این باید چیزی شبیه به زیر نمایش دهد:
https://helloworld-fastapi-PROJECTHASH-REGIONID.a.run.app
اکنون می توانید با باز کردن URL سرویس در یک مرورگر وب از برنامه خود استفاده کنید:
همچنین می توانید از Cloud Shell با برنامه تماس بگیرید:
curl $SERVICE_URL?name=me
این باید به شما خوشامدگویی مورد انتظار را بدهد:
{"message": "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-fastapi \
--region $REGION
برای حذف پروژه Google Cloud خود،
- شناسه پروژه فعلی خود را بازیابی کنید:
PROJECT_ID=$(gcloud config get-value core/project)
- مطمئن شوید که این پروژه ای است که می خواهید حذف کنید:
echo $PROJECT_ID
- پروژه را حذف کنید:
gcloud projects delete $PROJECT_ID
8. تبریک!
شما یک برنامه وب FastAPI "Hello World" ایجاد کردید و آن را در Cloud Run مستقر کردید!
آنچه را پوشش داده ایم
- نحوه ایجاد یک برنامه کاربردی FastAPI "Hello World".
- آزمایش برنامه با اجرای سرور FastAPI در حالت
dev
. - Cloud Buildpacks و نحوه حضور
fastapi
وuvicorn
در یکrequirements.txt
اجازه میدهد هیچ Dockerfile مورد نیاز نباشد. - استقرار برنامه FastAPI در Cloud Run.
بیشتر بدانید
- مستندات Cloud Run را بررسی کنید
- برای بررسی گزینههای بیشتر، برنامهنویس را در سه مرحله آسان با اجرای ابری کامل کنید
- Django را در Cloud Run کامل کنید، برای ایجاد یک Cloud SQL DB، مدیریت اعتبار با Secret Manager، و استقرار جنگو
- بیشتر کدهای Cloud Run را بررسی کنید...