Hello Cloud Run with Python (Streamlit)

1. مقدمه

96d07289bb51daa7.png

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

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

چیزی که یاد خواهید گرفت

  • چگونه یک برنامه Streamlit "Hello World" ایجاد کنیم.
  • آزمایش برنامه با اجرای برنامه Streamlit قبل از استقرار.
  • Cloud Buildpacks و اینکه چگونه وجود streamlit در یک requirements.txt اجازه می‌دهد که هیچ Dockerfile مورد نیاز نباشد.
  • نحوه استقرار یک برنامه Streamlit در 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 کلیک کنید

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. برنامه را بنویسید

در این مرحله، یک برنامه کاربردی Python Streamlit "Hello World" را می سازید که به درخواست های HTTP پاسخ می دهد.

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

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

mkdir ~/helloworld-streamlit && cd ~/helloworld-streamlit

main.py

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

touch main.py

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

10af7b1a6240e9f4.gif

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

cloudshell edit main.py

main.py

import streamlit as st

st.title("Hello World! 👋🌎")
st.markdown(
    """
    This is a demo Streamlit app.

    Enter your name in the text box below and press a button to see some fun features in Streamlit.
    """
)

name = st.text_input("Enter your name:")

# Use columns to create buttons side by side
col1, col2 = st.columns(2)

with col1:
    if st.button("Send balloons! 🎈"):
        st.balloons()
        st.write(f"Time to celebrate {name}! 🥳")
        st.write("You deployed a Streamlit app! 👏")

with col2:
    if st.button("Send snow! ❄️"):
        st.snow()
        st.write(f"Let it snow {name}! 🌨️")
        st.write("You deployed a Streamlit app! 👏")

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

الزامات. txt

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

touch requirements.txt

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

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/streamlit
streamlit==1.47.0

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

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

برای آزمایش برنامه، از uv (بسته بسیار سریع پایتون و مدیر پروژه) استفاده کنید که از قبل در Cloud Shell نصب شده است.

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

uv venv

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

uv pip install -r requirements.txt

برنامه را با استفاده از streamlit run (غیرفعال کردن --server.enableCORS برای آزمایش به دلیل تداخل با Cloud Shell) شروع کنید:

uv run streamlit run main.py --server.port=8080 --server.enableCORS=false

گزارش‌ها نشان می‌دهند که برنامه Streamlit در حال اجرا است:

You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8080
  Network URL: http://10.1.0.1:8080
  External URL: http://34.37.7.94:8080

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

6c9ff9e5c692c58e.gif

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

helloworld-streamlit-app.png

سعی کنید نام خود را پر کنید و دو دکمه روی صفحه را آزمایش کنید!

وقتی کارتان تمام شد، به جلسه اصلی Cloud Shell برگردید و برنامه Streamlit را با 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-streamlit \
  --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-streamlit \
  --region $REGION \
  --format "value(status.address.url)" \
)
echo $SERVICE_URL

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

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

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

helloworld-streamlit.gif

تبریک می گویم! شما به تازگی یک برنامه را در 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-streamlit \
  --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

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

آنچه را پوشش داده ایم

  • چگونه یک برنامه Streamlit "Hello World" ایجاد کنیم.
  • آزمایش برنامه با اجرای برنامه Streamlit قبل از استقرار.
  • Cloud Buildpacks و اینکه چگونه وجود streamlit در یک requirements.txt اجازه می‌دهد که هیچ Dockerfile مورد نیاز نباشد.
  • استقرار برنامه Streamlit در Cloud Run.

بیشتر بدانید