از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
توسعه برنامه پایتون بدون سرور با AWS Chalice
سرفصلهای مطلب
معرفی
در توسعه نرمافزار، ما دائماً در حال ساخت راهحلهایی برای کاربران نهایی هستیم که یک مشکل خاص را حل میکند یا یک مشکل خاص را آسان یا خودکار میکند. process. بنابراین طراحی و ساخت نرم افزار تنها بخشی از آن نیست process، زیرا باید نرم افزار را در اختیار کاربران مورد نظر قرار دهیم.
برای برنامه های مبتنی بر وب، استقرار یک جنبه بسیار مهم و بخشی از آن است process از آنجایی که برنامه نه تنها باید کار کند، بلکه باید برای بسیاری از کاربران به طور همزمان کار کند و بسیار در دسترس باشد.
برخی از گزینه های استقرار که در دسترس ما هستند عبارتند از خرید سخت افزار سرور خودمان و استقرار برنامه های ما یا اجاره فضای سرور در شرکت های دیگر. این نه تنها هزینه منابع مورد نیاز برای بدست آوردن آنها، بلکه هزینه های نگهداری و پرسنل نظارت بر منابع سرور را نیز به همراه دارد.
اگر بتوانیم بدون نگرانی در مورد تأمین سرورها یا نگهداری آنها، برنامه خود را در دسترس قرار دهیم، چه؟ چابکی و تحویل ما تا حد زیادی افزایش می یابد.
ما می توانیم از طریق یک پلت فرم محاسباتی بدون سرور مانند AWS Lambda، که توسط خدمات وب آمازون.
محاسبات بدون سرور چیست؟
ارائه دهندگان ابر راه حل های مختلفی برای استقرار و اجرای برنامه ها ارائه می دهند که یکی از آنها محاسبات بدون سرور است. در این معماری، ارائه دهنده ابر، برنامه های شما را میزبانی می کند و می گیرد روی مسئولیت های مدیریت سرور از نظر نرم افزاری و سخت افزاری به آن فکر کنید زیرساخت به عنوان یک سرویس (IaaS).
ارائهدهنده ابر مقیاس، در دسترس بودن، نگهداری سرور و پیکربندی را از جمله موارد دیگر مدیریت میکند تا به عنوان توسعهدهندگان، تمرکز ما کاملاً باشد. روی کد ما این به نوبه خود، سربار مورد نیاز برای اجرای برنامه های ما و در دسترس قرار دادن کاربران نهایی را کاهش می دهد.
محاسبات بدون سرور مزایای خود را دارد، اما همچنین دارای معایبی است، از جمله اینکه توسعهدهنده به گزینهها یا ابزارهایی که ارائهدهنده برای مقاصدی مانند گزارشگیری، ردیابی و نظارت استفاده میکند محدود میشود و توسعهدهنده نمیتواند از ابزارهای خود استفاده کند. همچنین، به عنوان یک توسعه دهنده، شما به در دسترس بودن ارائه دهنده گره خورده اید، اگر آنها با مشکلات یا قطعی مواجه شوند، برنامه ما نیز تحت تأثیر قرار می گیرد.
AWS یک ارائه دهنده ابر پیشرو است که محاسبات بدون سرور را از طریق AWS Lambda ارائه می دهد. این یک زمان اجرا محاسباتی بدون سرور است که به توسعهدهندگان اجازه میدهد تا کد خود را در پاسخ به رویدادهای خاص کاربران، مانند درخواست یا آپلود فایلها، اجرا کنند. سطل S3.
این سرویس همچنین به ما این امکان را می دهد که فقط برای منابع محاسباتی که استفاده می کنیم به جای هزینه کلی برای خدمات، پرداخت کنیم. این امر از طریق یک تابع لامبدا اتفاق میافتد که مقیاس آن مطابق با مقیاس است و مستقل از زیرساخت زیربنایی است.
Chalice چیست؟
جام یک میکروفریمورک برای ساخت و استقرار سریع برنامه های بدون سرور در پایتون به توابع AWS Lambda است. Chalice نه تنها به ما کمک میکند تا برنامههای پایتون را ایجاد کنیم، بلکه با ارائه a به سرعت آنها را مستقر کنیم command-line ابزاری برای ایجاد، مدیریت و استقرار برنامه ما.
Chalice همچنین قابلیت یکپارچهسازی را با سایر سرویسهای آمازون مانند Amazon API Gateway، Amazon Simple Storage Service (S3) و Simple Queue Service (SQS) در میان سایر خدمات ارائه میکند. ما میتوانیم APIهای RESTful ایجاد کنیم، وظایفی که اجرا میشوند روی یک برنامه زمانی خاص یا ادغام به سطل S3 برای ذخیره سازی.
برپایی
راه اندازی AWS
برای شروع کار با Chalice، باید یک حساب AWS راه اندازی کنیم تا بتوانیم با آن تعامل داشته باشیم و کد خود را در آن مستقر کنیم. این را می توان از طریق AWS homepage جایی که می توانیم ثبت نام کنیم یا به یک حساب AWS موجود وارد شویم. AWS نیاز دارد که ما نه تنها جزئیات خود را ارائه دهیم، بلکه جزئیات صورتحساب خود را نیز ارائه دهیم، اما برای این نمایش از AWS Free Tier برای اهداف آزمایش و توسعه، که برای آنها صورتحساب دریافت نمی شود.
هنگامی که حساب ما راه اندازی شد، در قسمت کشویی نمایه ما، بخشی به نام “مدارک امنیتی من” وجود دارد. در اینجا میتوانیم اعتبارنامههایی ایجاد کنیم که هنگام تعامل با AWS استفاده شوند console. این اعتبارنامه ها توسط ابزار CLI آمازون نیز استفاده خواهند شد.
آمازون همچنین یک ابزار CLI ارائه می دهد که می توانیم از آن برای تعامل با سرویس های AWS خود با استفاده از دستورات موجود در ما استفاده کنیم terminal. این برای پلتفرمهای مک، لینوکس و ویندوز در دسترس است و به نسخههای Python 2.6+ یا Python 3.3 یا بالاتر نیاز دارد. با اجرای موارد زیر می توانیم آن را نصب کنیم pip دستور:
$ pip install awscli
پس از راهاندازی، میتوانیم ابزار CLI را با اجرای:
$ aws --version
جزئیات بیشتر در مورد ابزار CLI و نصب روی پلتفرم های دیگر را می توان یافت اینجا.
با راهاندازی ابزار AWS CLI، از اعتبارنامهها، به عنوان مثال، کلید مخفی و شناسه دسترسی، که قبلاً ایجاد کردهایم برای پیکربندی ابزار CLI خود با اجرای:
$ aws configure
ما یک درخواست برای پر کردن ما دریافت خواهیم کرد Access Key ID
، Secret Access Key
و مناطق پیش فرض و فرمت های خروجی. دو مورد آخر اختیاری هستند اما ما به کلید دسترسی و رمزی که از AWS به دست آورده ایم نیاز داریم console داشبورد.
همچنین می توانید اعتبارنامه های مختلف را برای کاربران مختلف پیکربندی کنید روی AWS. بیشتر روی که و جزئیات دیگر را می توان یافت اینجا.
راه اندازی پروژه
برای این پروژه آزمایشی، ما در حال ساخت یک برنامه پایتون خواهیم بود و تمرین خوبی است که در یک محیط مجازی کار کنیم تا محیط پروژه خود را از محیط Python سیستم انتزاعی نگه داریم. برای این منظور از virtualenv
ابزاری برای ایجاد یک محیط مجازی که در آن کار خواهیم کرد.
در صورتی که virtualenv
ابزار هنوز نصب نشده است، میتوانیم آن را با اجرای ساده نصب کنیم:
$ pip install virtualenv
اطلاعات بیشتر در مورد virtualenv
ابزار را می توان یافت اینجا.
با virtualenv
نصب شده است، اجازه دهید به دایرکتوری کاری خود برویم و با اجرای دستور زیر یک محیط ایجاد کنیم:
$ virtualenv --python=python3 venv-chalice
ما محیط خود را با اجرای:
$ source venv-chalice/bin/activate
محیط ما اکنون راه اندازی شده است و اکنون می توانیم Chalice را نصب کرده و با اجرای دستورات زیر نصب را تأیید کنیم:
$ pip install chalice
$ chalice --help
دستور دوم در اینجا به سادگی برای تأیید نصب Chalice استفاده می شود.
پیاده سازی
ما اکنون یک حساب AWS داریم، ابزار AWS CLI نصب شده، تنظیمات محیط و Chalice نصب شده است. اکنون می توانیم از Chalice برای ایجاد API ساده RESTful خود به صورت زیر استفاده کنیم:
$ chalice new-project demoapp
این دستور یک پروژه Chalice ساده را در یک پوشه ایجاد می کند که ساختار زیر را دارد:
$ tree demoapp
demoapp
├── app.py
└── requirements.txt
هر الزام دیگری که برنامه Chalice ما برای اجرا در حین استقرار به آن نیاز دارد روی AWS Lambda وارد قسمت خواهد شد requirements.txt
فایل در داخل demoapp
پوشه، و عملکرد جدید ما عمدتاً در app.py
فایل. ما می توانیم فایل های دیگری ایجاد کنیم و import آنها را به app.py
فایل که فایل اصلی پروژه ماست.
برای API ساده خود، یک API ایجاد خواهیم کرد که فهرستی از مخازن عمومی GitHub کاربر، زبان های استفاده شده در هر کدام و تعداد ستاره هایی که مخزن دارد را برمی گرداند. این اطلاعات در دسترس عموم است روی GitHub API، بنابراین برای تعامل با API نیازی به اعتبارنامه نخواهیم داشت. ما یک تابع ایجاد خواهیم کرد که یک نام کاربری دریافت می کند و جزئیات مورد نیاز ما را برمی گرداند. اگر نام کاربری ارائه شده وجود نداشته باشد، یک بار پاسخ خالی دریافت خواهیم کرد.
اجازه دهید ما ایجاد کنیم github_repos
تابعی که مسئول تعامل GitHub API خواهد بود:
import requests
def github_repos(username):
formatted_repos = ()
if username:
url = "https://api.github.com/users/{}/repos".format(username)
r = requests.get(url)
list_of_repos = r.json()
for repo in list_of_repos:
repo_object = {
"name": repo("name"),
"stars": repo("watchers"),
"language": repo("language"),
}
formatted_repos.append(repo_object)
return formatted_repos
کارکرد github_repos
یک نام کاربری دریافت می کند و قبل از درخواست آن را به URL API GitHub متصل می کند. پاسخ دریافت شده دارای اطلاعات زیادی است که در حال حاضر به آنها نیاز نداریم، بنابراین جزئیات یک مخزن مورد نیاز خود را استخراج می کنیم، یک شی جدید ایجاد می کنیم و آن را به لیست اضافه می کنیم. formatted_repos
که ما از طریق برنامه Chalice برای کاربر ارسال خواهیم کرد.
اجازه دهید ابتدا چند تست محلی برای تابع خود اجرا کنیم و این خروجی است:
این تابع اکنون آماده است تا در برنامه Chalice ما یکپارچه شود روی را app.py
فایل، و این نسخه نهایی برنامه ما است:
import requests
from chalice import Chalice
def github_repos(username):
app = Chalice(app_name='demoapp')
@app.route('/')
def index():
return {'hello': 'world'}
@app.route('/user/{username}')
def github(username):
return {"repos": github_repos(username)}
برنامه ما اکنون برای مصرف توسط کاربران آماده است، اجازه دهید اکنون آن را در AWS Lambda مستقر کنیم.
استقرار برنامه ما
استقرار یک برنامه Chalice در AWS Lambda به سادگی اجرای دستور زیر در فهرست کاری ما است:
$ chalice deploy
Chalice استقرار را انجام خواهد داد process برای ما و پیوندی را برگردانید که با آن بتوانیم با RESTful API که به تازگی ایجاد کرده ایم تعامل داشته باشیم:
برای آزمایش API خود، می توانیم استفاده کنیم پستچی، یک مرورگر وب یا هر ابزار تعامل API دیگری برای ارسال درخواست به /user/<github-username>
نقطه پایانی روی “URL REST API” از اسکرین شات بالا. من نام کاربری GitHub خود را ارسال کردم و این خروجی بود:
اگر تغییری در کد خود ایجاد کنیم، فقط آن را اجرا می کنیم chalice deploy
دوباره دستور دهید و Chalice برنامه ما را با تغییراتی که به تازگی ایجاد کردهایم مجدداً مستقر میکند.
وقتی به کنسول AWS می رویم و کلیک می کنیم روی بخش “توابع” در نوار کناری تاشو روی در سمت چپ، میتوانیم تابع Lambda را ببینیم که در حال حاضر برنامه ما را اجرا میکند:
وقتی کلیک می کنیم روی تابع ما، جزئیات بیشتری در مورد آن مانند پیکربندی فعلی، متغیرهای محیطی تنظیم شده برای برنامه ما، نقش های اجرایی و پیکربندی حافظه به دست می آوریم.
AWS همچنین گزینه های نظارتی مانند گزارش رویدادها و معیارها را در اختیار ما قرار می دهد CloudWatch که یک سرویس نظارت و مدیریت است که توسط AWS ارائه می شود.
این نمای داشبورد نظارت برای برنامه ما است:
آمار می گیریم روی تعداد فراخوانهای کاربران، مدت زمان درخواستهای ارائهشده توسط API ما، میزان موفقیت و خطا و موارد دیگر.
ما حتی نمایی از درخواستهای فردی را در همان داشبورد دریافت میکنیم، اگرچه در تصویر بالا قابل مشاهده نیست. کارهای زیادی وجود دارد که AWS در خارج از جعبه برای ما انجام می دهد و تجربه استقرار ما را کوتاه و مستقیم به نقطه اصلی می رساند. ما لازم نیست نگران حفظ سرور خود یا اجرای روش های نظارت و ثبت نام خود باشیم زیرا AWS ما را برای این امر تحت پوشش قرار داده است.
این تجربه بدون سرور است.
خلاصه
در این مقاله، ما یک API پایتون بدون سرور با استفاده از میکروفریمورک Chalice ایجاد کردهایم و آن را مستقر کردهایم. روی AWS Lambda. AWS CLI، در کنار ابزار Chalice CLI، به ما کمک کرده است تا پروژه خود را سریع بوت کنیم و ما آن را با استفاده از تنها یک فرمان در AWS Lambda مستقر کردیم.
برنامه ما یک برنامه بدون سرور است زیرا نیازی به ارائه یا نگهداری سرور نداریم روی طرف ما. ما فقط کد را نوشتیم و به AWS اجازه دادیم بقیه موارد از جمله استقرار، مقیاسبندی و نظارت بر برنامه ما را مدیریت کند. زمان صرف شده برای در دسترس قرار دادن برنامه ما به میزان قابل توجهی کاهش یافته است، حتی اگر هنوز به آن وابسته هستیم روی AWS برای جنبه های دیگر مانند نظارت بر برنامه ما.
کد منبع این پروژه موجود است اینجا روی GitHub.
(برچسبها برای ترجمه)# aws
منتشر شده در 1403-01-21 08:19:03