بر دسترسی به خدمات پلتفرم ابری گوگل (GCP) با کتابخانه کلاینت پایتون مسلط شوید. احراز هویت، تعامل با سرویسها و بهترین شیوهها برای ساخت برنامههای ابری مقیاسپذیر جهانی را بیاموزید.
گشودن قفل پلتفرم ابری گوگل با پایتون: راهنمای جامع دسترسی به خدمات GCP
پلتفرم ابری گوگل (GCP) مجموعهی وسیعی از خدمات را برای ساخت و استقرار برنامههای کاربردی مقیاسپذیر و قابل اعتماد ارائه میدهد. پایتون، با سینتکس واضح و کتابخانههای گستردهاش، یک انتخاب محبوب برای تعامل با GCP است. این راهنما یک نمای کلی و جامع از نحوه استفاده از کتابخانه کلاینت پایتون برای دسترسی و مدیریت خدمات GCP ارائه میدهد و برای مخاطبان جهانی با پیشینههای فنی متنوع طراحی شده است.
چرا از پایتون با GCP استفاده کنیم؟
پایتون مزایای متعددی برای تعامل با GCP ارائه میدهد:
- سهولت استفاده: سینتکس خوانای پایتون توسعه را ساده میکند و یادگیری و نگهداری برنامههای GCP را آسانتر میسازد.
- کتابخانههای جامع: گوگل یک کتابخانه کلاینت پایتون با نگهداری خوب ارائه میدهد که به طور خاص برای خدمات GCP طراحی شده است.
- پشتیبانی قوی جامعه: یک جامعه بزرگ و فعال پایتون منابع، آموزشها و پشتیبانی فراوانی برای توسعه GCP فراهم میکند.
- اتوماسیون و اسکریپتنویسی: پایتون در اتوماسیون وظایف و اسکریپتنویسی مدیریت زیرساخت، که برای محیطهای ابری حیاتی است، برتری دارد.
- علم داده و یادگیری ماشین: پایتون زبان انتخابی برای علم داده و یادگیری ماشین است که به طور یکپارچه با خدمات هوش مصنوعی/یادگیری ماشین GCP ادغام میشود.
راهاندازی محیط شما
قبل از شروع، باید محیط پایتون خود را راهاندازی کرده و کتابخانههای لازم را نصب کنید.
۱. نصب پایتون و Pip
اگر پایتون را نصب نکردهاید، آخرین نسخه را از وبسایت رسمی پایتون دانلود و نصب کنید (https://www.python.org/downloads/). Pip، نصبکننده بستههای پایتون، معمولاً با نصب پایتون همراه است.
تأیید صحت: ترمینال یا خط فرمان خود را باز کرده و دستورات زیر را اجرا کنید:
python --version
pip --version
این دستورات باید نسخههای نصب شده پایتون و Pip را نمایش دهند.
۲. نصب کتابخانه کلاینت Google Cloud برای پایتون
کتابخانه `google-cloud-python` دسترسی به تمام خدمات GCP را فراهم میکند. آن را با استفاده از Pip نصب کنید:
pip install google-cloud-storage google-cloud-compute google-cloud-pubsub # مثال - نصب بستههای storage، compute و pubsub
فقط کتابخانههای کلاینت خاص برای خدمات GCP که قصد استفاده از آنها را دارید نصب کنید. این کار حجم وابستگیهای برنامه شما را کاهش میدهد.
مثال (Cloud Storage): برای نصب کتابخانه کلاینت Cloud Storage:
pip install google-cloud-storage
۳. پیکربندی احراز هویت
احراز هویت برای اعطای مجوز به برنامه پایتون شما برای دسترسی به منابع GCP حیاتی است. چندین روش احراز هویت موجود است:
- حسابهای خدماتی (Service Accounts): برای برنامههایی که روی GCP اجرا میشوند (مانند Compute Engine، Cloud Functions، Cloud Run) توصیه میشود.
- اعتبارنامههای کاربری (User Credentials): مناسب برای توسعه و تست محلی.
استفاده از حسابهای خدماتی (توصیه شده برای محیط پروداکشن)
حسابهای خدماتی، حسابهای غیرانسانی هستند که میتوانند برای احراز هویت برنامهها و سرویسها استفاده شوند. آنها روشی امن و کنترلشده برای اعطای دسترسی به منابع GCP فراهم میکنند.
- ایجاد یک حساب خدماتی: در کنسول Google Cloud، به IAM & Admin > Service Accounts بروید و روی Create Service Account کلیک کنید. یک نام و توضیحات برای حساب خدماتی خود ارائه دهید.
- اعطای مجوزها: نقشهای مناسب را بر اساس منابع GCP که برنامه شما نیاز به دسترسی به آنها دارد به حساب خدماتی خود اختصاص دهید (مثلاً `roles/storage.objectAdmin` برای کنترل کامل بر اشیاء Cloud Storage).
- دانلود کلید حساب خدماتی: یک فایل کلید JSON برای حساب خدماتی خود ایجاد و آن را دانلود کنید. با این فایل کلید با دقت بسیار زیادی رفتار کنید، زیرا دسترسی به منابع GCP شما را فراهم میکند. آن را به صورت امن ذخیره کرده و هرگز آن را در کنترل نسخه کامیت نکنید.
- تنظیم متغیر محیطی `GOOGLE_APPLICATION_CREDENTIALS`: متغیر محیطی `GOOGLE_APPLICATION_CREDENTIALS` را به مسیر فایل کلید JSON دانلود شده تنظیم کنید.
مثال (Linux/macOS):
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
مثال (Windows):
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\your\service-account-key.json
نکته امنیتی مهم: از هاردکد کردن کلید حساب خدماتی خود به طور مستقیم در کد خودداری کنید. استفاده از متغیر محیطی `GOOGLE_APPLICATION_CREDENTIALS` رویکرد توصیه شده برای امنیت و قابلیت نگهداری است.
استفاده از اعتبارنامههای کاربری (برای توسعه محلی)
برای توسعه و تست محلی، میتوانید از اعتبارنامههای کاربری Google Cloud خود استفاده کنید.
- نصب Google Cloud SDK (gcloud): Google Cloud SDK را از وبسایت رسمی دانلود و نصب کنید (https://cloud.google.com/sdk/docs/install).
- احراز هویت با gcloud: دستور زیر را در ترمینال یا خط فرمان خود اجرا کنید:
gcloud auth application-default login
این دستور یک پنجره مرورگر باز میکند که در آن میتوانید به حساب Google Cloud خود وارد شوید و مجوزهای لازم را به Google Cloud SDK اعطا کنید.
دسترسی به خدمات GCP با پایتون
پس از اینکه محیط خود را راهاندازی و احراز هویت را پیکربندی کردید، میتوانید با استفاده از کتابخانه کلاینت پایتون به خدمات GCP دسترسی پیدا کنید. در اینجا چند مثال آورده شده است:
۱. Cloud Storage
Cloud Storage ذخیرهسازی اشیاء مقیاسپذیر و بادوام را فراهم میکند. شما میتوانید از کتابخانه کلاینت پایتون برای آپلود، دانلود و مدیریت اشیاء در باکتهای Cloud Storage خود استفاده کنید.
مثال: آپلود یک فایل در Cloud Storage
from google.cloud import storage
# با نام باکت و مسیر فایل خود جایگزین کنید
BUCKET_NAME = "your-bucket-name"
FILE_PATH = "/path/to/your/local/file.txt"
OBJECT_NAME = "remote/file.txt" # نامی که میخواهید فایل در فضای ذخیرهسازی ابری داشته باشد
client = storage.Client()
bucket = client.bucket(BUCKET_NAME)
blob = bucket.blob(OBJECT_NAME)
blob.upload_from_filename(FILE_PATH)
print(f"File {FILE_PATH} uploaded to gs://{BUCKET_NAME}/{OBJECT_NAME}.")
توضیح:
- `from google.cloud import storage`: ماژول Cloud Storage را وارد میکند.
- `storage.Client()`: یک شیء کلاینت Cloud Storage ایجاد میکند، با استفاده از اعتبارنامههای احراز هویتی که قبلاً تنظیم شده است.
- `client.bucket(BUCKET_NAME)`: یک ارجاع به باکت Cloud Storage مشخص شده دریافت میکند.
- `bucket.blob(OBJECT_NAME)`: یک blob (شیء) در داخل باکت، با نام مشخص شده ایجاد میکند.
- `blob.upload_from_filename(FILE_PATH)`: فایل را از مسیر فایل محلی به blob در Cloud Storage آپلود میکند.
مثال: دانلود یک فایل از Cloud Storage
from google.cloud import storage
# با نام باکت، نام شیء و مسیر فایل محلی خود جایگزین کنید
BUCKET_NAME = "your-bucket-name"
OBJECT_NAME = "remote/file.txt"
FILE_PATH = "/path/to/your/local/downloaded_file.txt"
client = storage.Client()
bucket = client.bucket(BUCKET_NAME)
blob = bucket.blob(OBJECT_NAME)
blob.download_to_filename(FILE_PATH)
print(f"File gs://{BUCKET_NAME}/{OBJECT_NAME} downloaded to {FILE_PATH}.")
۲. Compute Engine
Compute Engine ماشینهای مجازی (VM) را در GCP فراهم میکند. شما میتوانید از کتابخانه کلاینت پایتون برای مدیریت نمونههای Compute Engine، از جمله ایجاد، شروع، توقف و حذف آنها استفاده کنید.
مثال: لیست کردن نمونههای Compute Engine
from google.cloud import compute_v1
# با شناسه پروژه و منطقه خود جایگزین کنید
PROJECT_ID = "your-project-id"
ZONE = "us-central1-a"
client = compute_v1.InstancesClient()
request = compute_v1.ListInstancesRequest(
project=PROJECT_ID,
zone=ZONE
)
# درخواست را ارسال کنید
pager = client.list(request=request)
print("Instances in project and zone:")
# پاسخ را پردازش کنید
for response in pager:
print(response)
توضیح:
- `from google.cloud import compute_v1`: ماژول Compute Engine (نسخه v1) را وارد میکند. در صورت وجود نسخه جدیدتر، استفاده از آن را در نظر بگیرید.
- `compute_v1.InstancesClient()`: یک شیء کلاینت Compute Engine ایجاد میکند.
- `compute_v1.ListInstancesRequest()`: درخواستی برای لیست کردن نمونهها در پروژه و منطقه مشخص شده ایجاد میکند.
- `client.list(request=request)`: درخواست را به API Compute Engine ارسال میکند.
- سپس کد در پاسخ (یک شیء pager) تکرار میکند و اطلاعات مربوط به هر نمونه را چاپ میکند.
۳. Cloud Functions
Cloud Functions محیطهای اجرای بدون سرور را فراهم میکند. شما میتوانید از کتابخانه کلاینت پایتون برای استقرار و مدیریت Cloud Functions استفاده کنید.
مثال: استقرار یک Cloud Function (نیاز به Google Cloud SDK دارد)
استقرار یک Cloud Function اغلب شامل استفاده مستقیم از Google Cloud SDK (gcloud) است، اگرچه برای سناریوهای پیچیدهتر میتوان از طریق کتابخانه کلاینت پایتون به API Cloud Functions دسترسی پیدا کرد. این مثال یک دستور استقرار پایه gcloud را نشان میدهد. ابتدا یک فایل main.py و requirements.txt ایجاد کنید:
main.py (مثال)
def hello_world(request):
return 'Hello, World!'
requirements.txt (مثال)
functions-framework
دستور استقرار:
gcloud functions deploy your-function-name --runtime python310 --trigger-http --entry-point hello_world
توضیح:
- `gcloud functions deploy your-function-name`: یک Cloud Function با نام مشخص شده مستقر میکند. `your-function-name` را با نام مورد نظر برای تابع خود جایگزین کنید.
- `--runtime python310`: محیط اجرای پایتون را مشخص میکند (مثلاً python310، python311). یک رانتایم پشتیبانی شده را انتخاب کنید.
- `--trigger-http`: تابع را طوری پیکربندی میکند که توسط درخواستهای HTTP فعال شود.
- `--entry-point hello_world`: تابعی را که هنگام فعال شدن تابع باید اجرا شود، مشخص میکند. این مربوط به تابع `hello_world` تعریف شده در `main.py` است.
۴. Cloud Run
Cloud Run به شما امکان میدهد برنامههای کانتینری شده را در یک محیط بدون سرور مستقر کنید. شما میتوانید سرویسهای Cloud Run را با استفاده از کتابخانه کلاینت پایتون مدیریت کنید، اما استقرار اغلب با Google Cloud SDK یا ابزارهای زیرساخت به عنوان کد مانند Terraform انجام میشود.
مثال: استقرار یک سرویس Cloud Run (نیاز به Google Cloud SDK و Docker دارد)
استقرارهای Cloud Run اغلب با یک Dockerfile شروع میشوند.
Dockerfile (مثال):
FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
main.py (مثال) - برنامه Flask حداقلی
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello from Cloud Run!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=8080)
requirements.txt (مثال):
flask
gunicorn
دستورات استقرار:
# ساخت ایمیج Docker
docker build -t gcr.io/your-project-id/cloud-run-image .
# پوش کردن ایمیج به Google Container Registry
docker push gcr.io/your-project-id/cloud-run-image
# استقرار سرویس Cloud Run
gcloud run deploy your-cloud-run-service \
--image gcr.io/your-project-id/cloud-run-image \
--platform managed \
--region us-central1 \
--allow-unauthenticated
توضیح:
- `docker build`: یک ایمیج Docker از Dockerfile میسازد. `gcr.io/your-project-id/cloud-run-image` را با نام ایمیج مورد نظر و مسیر Google Container Registry خود جایگزین کنید.
- `docker push`: ایمیج Docker را به Google Container Registry (GCR) پوش میکند. شما باید Docker را برای احراز هویت با GCR پیکربندی کرده باشید.
- `gcloud run deploy`: یک سرویس Cloud Run را مستقر میکند.
- `--image`: ایمیج Docker مورد استفاده برای سرویس را مشخص میکند.
- `--platform managed`: مشخص میکند که سرویس باید روی پلتفرم Cloud Run کاملاً مدیریت شده مستقر شود.
- `--region`: منطقهای که سرویس باید در آن مستقر شود را مشخص میکند.
- `--allow-unauthenticated`: دسترسی بدون احراز هویت به سرویس را مجاز میکند (برای اهداف تست). در یک محیط پروداکشن، شما باید احراز هویت مناسب را پیکربندی کنید.
۵. Cloud SQL
Cloud SQL پایگاههای داده رابطهای مدیریت شده را در GCP فراهم میکند. شما میتوانید از کتابخانه کلاینت پایتون (به همراه کتابخانههای خاص پایگاه داده مانند `psycopg2` برای PostgreSQL یا `pymysql` برای MySQL) برای اتصال و مدیریت نمونههای Cloud SQL استفاده کنید.
مثال: اتصال به یک نمونه Cloud SQL PostgreSQL
import psycopg2
# با نام اتصال نمونه Cloud SQL، نام پایگاه داده، نام کاربری و رمز عبور خود جایگزین کنید
INSTANCE_CONNECTION_NAME = "your-project-id:your-region:your-instance-name"
DB_NAME = "your_database_name"
DB_USER = "your_username"
DB_PASS = "your_password"
try:
conn = psycopg2.connect(
f"host=/cloudsql/{INSTANCE_CONNECTION_NAME} dbname={DB_NAME} user={DB_USER} password={DB_PASS}"
)
print("Successfully connected to Cloud SQL!")
# عملیات پایگاه داده را اینجا انجام دهید (مثلاً اجرای کوئریها)
cur = conn.cursor()
cur.execute("SELECT version();")
db_version = cur.fetchone()
print(f"Database version: {db_version}")
except Exception as e:
print(f"Error connecting to Cloud SQL: {e}")
finally:
if conn:
cur.close()
conn.close()
print("Connection closed.")
توضیح:
- `import psycopg2`: کتابخانه `psycopg2`، یک آداپتور PostgreSQL برای پایتون، را وارد میکند. شما باید آن را با استفاده از `pip install psycopg2-binary` نصب کنید.
- `INSTANCE_CONNECTION_NAME`: این یک شناسه حیاتی است که نحوه اتصال به نمونه Cloud SQL شما را مشخص میکند. شما میتوانید این مقدار را در کنسول Google Cloud در جزئیات نمونه Cloud SQL خود پیدا کنید.
- تابع `psycopg2.connect()` با استفاده از پارامترهای ارائه شده، اتصالی به پایگاه داده برقرار میکند.
- سپس کد یک کوئری ساده برای بازیابی نسخه پایگاه داده اجرا میکند و آن را در کنسول چاپ میکند.
- یک بلوک `finally` تضمین میکند که اتصال پایگاه داده به درستی بسته شود، حتی اگر خطا رخ دهد.
بهترین شیوهها برای استفاده از پایتون با GCP
در اینجا چند بهترین شیوه برای دنبال کردن هنگام توسعه برنامههای GCP با پایتون آورده شده است:
- از حسابهای خدماتی استفاده کنید: همیشه از حسابهای خدماتی برای احراز هویت استفاده کنید، به خصوص در محیطهای پروداکشن. فقط مجوزهای لازم را به آنها اعطا کنید (اصل کمترین امتیاز).
- مدیریت وابستگیها: از یک فایل `requirements.txt` برای مدیریت وابستگیهای برنامه خود استفاده کنید. این کار استقرارهای سازگار را تضمین کرده و مدیریت وابستگی را ساده میکند.
- مدیریت خطاها: مدیریت خطای مناسب را برای رسیدگی به استثناها و جلوگیری از کرش کردن برنامه پیادهسازی کنید. از بلوکهای try-except برای گرفتن خطاهای احتمالی و ثبت آنها برای اشکالزدایی استفاده کنید.
- لاگبرداری مؤثر: از سرویس Cloud Logging GCP برای ثبت رویدادها و خطاهای برنامه استفاده کنید. این کار بینشهای ارزشمندی در مورد رفتار برنامه شما فراهم کرده و به عیبیابی کمک میکند.
- از متغیرهای محیطی استفاده کنید: اطلاعات حساس، مانند کلیدهای API و اعتبارنامههای پایگاه داده، را در متغیرهای محیطی ذخیره کنید. این کار از هاردکد شدن آنها در کد شما جلوگیری کرده و امنیت را بهبود میبخشد.
- بهینهسازی برای عملکرد: از کش کردن، عملیات ناهمزمان و سایر تکنیکهای بهینهسازی برای بهبود عملکرد برنامههای GCP خود استفاده کنید. استفاده از خدمات GCP مانند Cloud CDN برای تحویل محتوا را در نظر بگیرید.
- برنامههای خود را نظارت کنید: از سرویس Cloud Monitoring GCP برای نظارت بر سلامت و عملکرد برنامههای خود استفاده کنید. هشدارها را برای اطلاع از هرگونه مشکل تنظیم کنید.
- استقرارها را خودکار کنید: از ابزارهای زیرساخت به عنوان کد مانند Terraform یا پایپلاینهای استقرار برای خودکارسازی فرآیند استقرار استفاده کنید. این کار استقرارهای سازگار و قابل تکرار را تضمین میکند.
- سرویس GCP مناسب را انتخاب کنید: سرویس GCP مناسب را برای نیازهای برنامه خود انتخاب کنید. عواملی مانند مقیاسپذیری، هزینه و پیچیدگی عملیاتی را در نظر بگیرید. به عنوان مثال، Cloud Functions برای وظایف رویدادمحور مناسب است، در حالی که Cloud Run برای استقرار برنامههای کانتینری شده ایدهآل است.
- منابع را پاکسازی کنید: به یاد داشته باشید که هرگونه منابع GCP استفاده نشده را برای جلوگیری از هزینههای غیرضروری پاکسازی کنید.
- کتابخانهها را بهروز نگه دارید: کتابخانههای پایتون خود را به طور منظم بهروزرسانی کنید تا از رفع اشکالات، وصلههای امنیتی و ویژگیهای جدید بهرهمند شوید. از `pip` برای بهروزرسانی بستههای خود استفاده کنید: `pip install --upgrade
`. - از محیطهای مجازی استفاده کنید: برای هر پروژه محیطهای مجازی ایجاد کنید تا وابستگیها را ایزوله کرده و از تداخل بین پروژههای مختلف جلوگیری کنید.
ملاحظات جهانی
هنگام توسعه برنامههای GCP برای مخاطبان جهانی، موارد زیر را در نظر بگیرید:
- اقامت دادهها: الزامات اقامت دادهها را برای مناطق هدف خود درک کنید. مناطق GCP را انتخاب کنید که با این الزامات مطابقت دارند.
- تأخیر (Latency): با استقرار برنامههای خود در مناطقی که از نظر جغرافیایی به کاربران شما نزدیک هستند، تأخیر را به حداقل برسانید.
- بومیسازی: رابط کاربری و محتوای برنامه خود را برای زبانها و مناطق مختلف بومیسازی کنید.
- ارز و پردازش پرداخت: اگر برنامه شما شامل تراکنشهای مالی است، اطمینان حاصل کنید که از ارزها و روشهای پرداخت مورد استفاده در مناطق هدف خود پشتیبانی میکنید.
- انطباق قانونی و مقرراتی: از الزامات قانونی و مقرراتی در مناطق هدف خود، مانند قوانین حریم خصوصی دادهها (مانند GDPR) و کنترلهای صادرات، آگاه باشید.
- مناطق زمانی: مناطق زمانی را به درستی مدیریت کنید تا اطمینان حاصل شود که برنامه شما تاریخها و زمانها را برای کاربران در مکانهای مختلف به درستی نمایش میدهد. از کتابخانههایی مانند `pytz` برای مدیریت تبدیلهای منطقه زمانی استفاده کنید.
- حساسیت فرهنگی: هنگام طراحی رابط کاربری و محتوای برنامه خود به تفاوتهای فرهنگی توجه داشته باشید.
عیبیابی مشکلات رایج
در اینجا برخی از مشکلات رایجی که ممکن است هنگام استفاده از پایتون با GCP با آنها مواجه شوید و نحوه عیبیابی آنها آورده شده است:
- خطاهای احراز هویت: تأیید کنید که فایل کلید حساب خدماتی شما معتبر است و متغیر محیطی `GOOGLE_APPLICATION_CREDENTIALS` به درستی تنظیم شده است. همچنین، اطمینان حاصل کنید که حساب خدماتی دارای مجوزهای لازم برای دسترسی به منابع GCP است.
- خطاهای Permission Denied: نقشهای IAM اختصاص داده شده به حساب خدماتی یا حساب کاربری خود را دوباره بررسی کنید. اطمینان حاصل کنید که آنها دارای مجوزهای مورد نیاز برای عملیاتی که میخواهید انجام دهید، هستند.
- خطاهای Import: تأیید کنید که کتابخانههای لازم پایتون را با استفاده از `pip` نصب کردهاید. مطمئن شوید که نام کتابخانهها صحیح است و از نسخه صحیح استفاده میکنید.
- مشکلات اتصال شبکه: اگر برنامه خود را روی یک نمونه VM اجرا میکنید، اطمینان حاصل کنید که VM به اینترنت و به خدمات GCP که میخواهید به آنها دسترسی پیدا کنید، اتصال شبکه دارد. قوانین فایروال و پیکربندی شبکه خود را بررسی کنید.
- محدودیتهای نرخ API: APIهای GCP برای جلوگیری از سوء استفاده دارای محدودیت نرخ هستند. اگر از محدودیتهای نرخ فراتر روید، ممکن است با خطا مواجه شوید. برای کاهش تعداد فراخوانیهای API، از عقبنشینی نمایی (exponential backoff) یا کش کردن استفاده کنید.
نتیجهگیری
پایتون و پلتفرم ابری گوگل ترکیبی قدرتمند برای ساخت و استقرار برنامههای مقیاسپذیر، قابل اعتماد و قابل دسترس در سطح جهانی فراهم میکنند. با پیروی از دستورالعملها و بهترین شیوههای ذکر شده در این راهنما، میتوانید به طور مؤثر از کتابخانه کلاینت پایتون برای دسترسی و مدیریت خدمات GCP استفاده کنید و خود را برای ایجاد راهحلهای نوآورانه برای مخاطبان جهانی توانمند سازید.
به یاد داشته باشید که همیشه امنیت را در اولویت قرار دهید، برای عملکرد بهینهسازی کنید و پیامدهای جهانی برنامههای خود را در نظر بگیرید. یادگیری و آزمایش مداوم کلید تسلط بر هنر توسعه ابری با پایتون در GCP است.