سفر توسعه دهندگان به AWS Lambda

AWS Lambda منحنی یادگیری شگفت انگیزی دارد. شما یک تابع جدید ایجاد می کنید، کد خود را می نویسید و اجرا می شود. آسان است، درست است؟ سپس متوجه می شوید که سوراخ خرگوش چقدر عمیق است. غرق در بسیاری از موضوعات، سخت است که بدانیم کجا باید برویم.
در این مرحله، شما شروع به استفاده از لامبدا کرده اید، اما اکنون از آن کوه افتاده اید. در این پست، پنج مرحله را برای حرکت در مسیر لامبدا به شما معرفی می کنیم.
1) بهبود کد شما
AWS Lambda به اندازه کافی ساده به نظر می رسد – هر کدی را که می خواهید بنویسید و آن را اجرا می کند. این درست است، اما همه کدها یکسان ایجاد نمیشوند، و راههای مهمی برای بالا بردن کد شما در توابع Lambda وجود دارد.
اساس استفاده از AWS Lambda درک محیط اجرایی است که از آن استفاده میکند تا بتوانیم رفتارهایی مانند شروع سرد و نحوه تأثیر کد ما بر آنها را درک کنیم.
بهترین روش ها برای AWS Lambda خواندنی عالی است، اما برای برجسته کردن مهم ترین نکات در مورد کد:
منطق خود را از کنترل کننده خود حذف کنید
ساده نگه داشتن کد خود تا حد امکان سردرد را از بین می برد. وقتی شروع به نوشتن توابع Lambda می کنیم، طولانی می شوند و ممکن است آنها را در تابع handler نگه داریم.
این امر آزمایش ما را پیچیده می کند زیرا تست واحد ما به طور جدایی ناپذیری با نحوه فراخوانی عملکرد ما مرتبط است. از تابع کنترل کننده خود برای کنترل تعاملات با سایر اجزای راه حل استفاده کنید، در حالی که منطق کسب و کار شما در توابع جداگانه در کد شما نگهداری می شود.
import requests
def check_inventory(check):
response = request.get('http://apiurl/inventory')
if check in response.text:
return True
else:
return False
def lambda_handler(event, context):
data = check_inventory(event['itemId'])
return {
'statusCode': 200,
'body': json.dumps(data)
}
در این مورد، منطق بررسی موجودی ما بدون توجه به نحوه ادغام آن در لامبدا به راحتی قابل آزمایش است. به همین ترتیب، کنترل کننده ما تنها بر نحوه انتقال اطلاعات به منطق تجاری و از آن تمرکز می کند و نگهداری آن را آسان تر می کند. این یک مثال بسیار ابتدایی است، در حالی که دانیلو پوچیا، دانیلو پوچیا، رئیس AWS Evangelist EMEA، دارای یک اصل بسیار مختصر، GreetingsAPI.js است که ادغام پیچیده تری را نشان می دهد.
پیکربندی کد خارجی
تلاش برای مدیریت پیکربندی در داخل کد ما همیشه یک آشفتگی وحشتناک است. چند بار کدی درست کرده اید که شبیه این باشد؟
# apiUrl = "https://prod.my-tenant.customersystem.net/v2/res/item"
apiUrl = "http://127.0.0.1:3000/mock"
یا حتی بدتر…
apiToken = "QmFzZTY0IGlzbid0IHJlYWwgZW5jcnlwdGlvbg=="
خوب، بله، من هم… ✋ خوشبختانه، AWS چند گزینه را در اختیار ما قرار می دهد تا بتوانیم با Lambda این مشکل را برطرف کنیم.
متغیرهای محیطی برای اکثر توسعه دهندگان آشنا هستند و بین ماشین محلی شما و AWS یکسان کار می کنند. اما برای هر چیز ایمن یا نیاز به استفاده در چندین عملکرد لامبدا، ارزش بررسی AWS Systems Manager Parameter Store، AWS Secrets Manager یا AWS AppConfig را دارد. بسیاری از سردردهای آینده را از بین می برد و به تیم امنیتی شما کمک می کند شب ها بخوابند.
استفاده مجدد از محیط اهرمی
هنگامی که یک نمونه جدید از تابع شما چرخانده می شود، Init
فاز هر کد ایستا خارج از توابع شما را اجرا می کند.
اگر باید قبل از رسیدگی به درخواستها، وظایف طولانیمدت را انجام دهید، یا قبل از دریافت درخواستها نمونهسازی کنید، این میتواند کد شما را بسیار کارآمدتر کند. تا جایی که می توانید از این بهترین استفاده را ببرید و کارها را برای کاربران نهایی خود سریعتر کنید.
import pymysql
try:
connection = pymsql.connect(<DetailsGoHere>)
except pymysql.MySQLError as e:
logger.error(e)
sys.exit()
def lambda_handler(event,context):
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM USERS WHERE userId='" + event['uid'] + "'")
data = connection.fetchone()
return data
هنگام مدیریت داده های حالت دار، اطمینان حاصل کنید که اطلاعات درز بین فراخوانی ها رخ نمی دهد. و حتی اگر چیزی نمونه برداری شده است، هنوز باید بررسی هایی انجام شود، به ویژه برای اتصالات پایگاه داده، تا اطمینان حاصل شود که هنوز زنده هستند.
مقاله قهرمان بدون سرور AWS Jeremy Daly در مورد استفاده مجدد از اتصالات پایگاه داده در لامبدا از سال 2018 به خوبی این مفهوم را پوشش می دهد، اگرچه گزینه های جدیدی برای مدیریت اتصال پایگاه داده در دسترس هستند.
2) استفاده از CI/CD و Frameworks
اگر همچنان در حال ویرایش و ذخیره کد خود در کنسول AWS هستید، به احتمال زیاد با این وضعیت مواجه شده اید:
سال 2023 است، بنابراین می دانید که چرا باید از خط لوله CI/CD استفاده کنید. اما می توانید زمان بیشتری را صرف ساختن و عیب یابی خط لوله خود کنید تا اینکه واقعاً کدهای ارزشمند را بنویسید. و این فقط برای استقرار یک تابع ساده Lambda است.
خوشبختانه، ما چارچوب ها و ابزارهای زیادی برای کمک به ما در ساخت و استقرار راه حل های بدون سرور داریم. هر چارچوب دارای نقاط قوت متفاوتی است، اما هدف همه آنها کاهش اصطکاک بین توسعه و استقرار است.
-
AWS SAM (مدل برنامه بدون سرور) استقرار برنامه های بدون سرور را برای AWS هموار می کند.
-
Wing یک زبان کامل را حول محورهای اولیه ابری ساخته است که آن را در یک ارائه دهنده تامین کننده دیگر (در حال حاضر فقط Terraform) کامپایل می کند.
-
فریم ورک بدون سرور چارچوب اصلی برای ساخت برنامه های بدون سرور است و همچنان یک انتخاب محکم است
-
Ampt در حال حاضر در نسخه بتا خصوصی است، اما در حال ساختن یک پلتفرم توسعهدهنده کاملاً یکپارچه است. من در مورد اینکه این برای تجربه توسعه دهنده چه معنایی دارد هیجان زده هستم!
اگر با CloudFormation آشنایی دارید، AWS SAM را به عنوان نقطه شروع پیشنهاد می کنم. هنگامی که Ampt از نسخه بتا خصوصی خارج شد، شروع به آزمایش آن خواهم کرد.
3) قابلیت مشاهده آسان با ابزارهای قدرت
همه ما در استفاده مقصریم print('boop')
یا console.log('hi!')
برای اشکال زدایی هر چند این مقیاس در تولید خوب نیست. پیادهسازی ثبت سفارشی برای خروجیهای بیشمار، بهعلاوه تولید و مدیریت معیارهای سفارشی، مستلزم کار اضافی است. ناگفته نماند که از ردیابی توزیع شده پشتیبانی می کند.
Lambda PowerTools را وارد کنید – راهحلی که فقط چند دقیقه طول میکشد تا در کد شما نصب شود، و مدیریت گزارشگیری، معیارها و ردیابی توزیعشده را بسیار آسان میکند، همه آنها به زبان انتخابی شما به طور آشنا مدیریت میشوند.
مشاهده پذیری تفاوت بین راه حل شما که جعبه بزرگی از اسرار تولید است و یک سمفونی درخشان از بسیاری از بخش های کاری است که در آن شما می توانید مسائل را به طور فعال درک کنید و به آنها بپردازید. این ساده ترین و قابل توجه ترین ارتقای است که می توانید به یک برنامه بدون سرور در AWS بدهید.
اکیداً توصیه میکنیم آموزش Powertools برای Python را بررسی کنید، که هر دو Powertools و همچنین برخی از AWS SAM را پوشش میدهد!
4) استقرار خود را تغییر دهید
“هر فناوری به اندازه کافی پیشرفته از جادو قابل تشخیص نیست” (آرتور سی. کلارک). لامبدا یک فناوری پیشرفته و قدرتمند است و جادوی آن باعث ایجاد برخی تصورات غلط رایج شده است.
- لامبدا توابع شما را بی نهایت مقیاس می کند
- محیط های اجرای لامبدا بلافاصله شروع می شود
- وقتی کد خود را به روز می کنید، لامبدا بلافاصله همه چیز را تغییر می دهد
- لامبدا به اندازه نیاز از منابع استفاده خواهد کرد
بیایید نگاهی دقیق تر به نحوه پیکربندی توابع لامبدا بیندازیم.
مقیاس بندی تابع با همزمانی رزرو شده
لامبدا دارای محدودیت مقیاس بندی است. به طور پیش فرض، این تعداد 1000 اعدام همزمان در هر حساب است. از آنجایی که تمام توابع لامبدا در حساب شما این محدودیت همزمانی را به اشتراک میگذارند، میتوانید حداکثر مقدار را برای هر تابع با Concurrency رزرو شده رزرو کنید.
همزمان رزرو شده همچنین میتواند برای تنظیم آن محدودیتهای بالا استفاده شود تا از سرویسهای پاییندستی که عملکرد Lambda شما ممکن است درخواستهایی را به آنها ارسال میکند، جلوگیری کند، مانند API. به هر حال، کافی شاپ محلی شما با یک باریستا می تواند سفارشات بی نهایت را انجام دهد. این در صورتی است که با صبر کردن بی نهایت برای قهوه خود مشکلی ندارید.
میتوانید برای محدودیتهای همزمانی حسابتان افزایش سهمیه درخواست کنید – اما ارزش آن را دارد که ابتدا محدودیتهای دیگر را در نظر بگیرید.
شروع سرد و همزمانی ارائه شده
ما از کاوش خود در محیط اجرا می دانیم که لامبدا بلافاصله محیط های اجرایی جدید را راه اندازی نمی کند – چرخش آنها در مرحله Init به زمان نیاز دارد. Concurrency ارائه شده به این معنی است که چگونه می توانیم اطمینان حاصل کنیم که حداقل تعداد برای استفاده در هر زمان آماده است.
ممکن است استفاده از Concurrency تدارکاتی برای دور زدن شروع سرد وسوسه انگیز باشد، اما یک اشکال بزرگ وجود دارد: ارزان نیست. داشتن محیط های اجرایی در حالت آماده به کار، هزینه ای مداوم در حدود 25 درصد را به همراه دارد. این ارزان به نظر می رسد اما به سرعت اضافه می شود.
یک تابع لامبدا با حافظه استاندارد 512 مگابایت و 10 نمونه همزمان ارائه شده در حال اجرا حدود 54 دلار آمریکا در ماه است. این حتی بدون اضافه کردن هزینه های هر درخواست و زمان محاسبه در حال اجرا آنها است. این است همیشه ارزش بهینه سازی را قبل از پرش به Concurrency فراهم می کند.
مدیریت تغییرات با نسخه ها و نام های مستعار
یکی از چیزهای مهم در مورد لامبدا به روز رسانی سریع کد شما و منعکس شدن آن در محیط محاسباتی تولید شما است. این عالی است، اما اغلب به کنترل بیشتری نیاز دارید. اینجاست که نسخه ها و نام های مستعار وارد می شوند.
Lambda دارای قابلیت نسخه سازی داخلی است. هنگام انجام ویرایش زنده، شما با آن کار می کنید $LATEST
نسخه ایجاد نسخه ها به شما امکان می دهد کد خود را در حالت خاصی قفل کنید، که می تواند به طور مستقل توسط ARN منحصر به فرد آن اجرا شود.
نام مستعار این را به سطح بعدی می برد، جایی که می توانید یک مرجع پویا به یک نسخه عملکرد خاص داشته باشید. اگر نام مستعار برای prod
، این می تواند هدف فراخوانی های شما از دروازه API شما باشد. وقتی آزمایش یک نسخه جدید را به پایان رساندید، می توانید به جای به روز رسانی API Gateway، نام مستعار را برای اشاره به نسخه به روز شده به روز کنید.
تنظیم پیکربندی منابع
احتمالاً مفهوم GB-second را در قیمت گذاری لامبدا دیده اید. اساساً، بر اساس مدت زمانی که عملکرد Lambda شما اجرا می شود و تعداد منابعی که به آن می دهید، شارژ می شوید. و با وجود نامگذاری “GB-second”، حافظه مستقیماً به CPU و منابع شبکه اختصاص داده شده نیز مرتبط است.
هرچه حافظه بیشتری به عملکرد خود اختصاص دهید، سریعتر کار می کند. اما هرچه حافظه بیشتری اختصاص دهید، هزینه شما نیز افزایش می یابد. بنابراین ارزش یافتن یک نقطه شیرین بین تخصیص حافظه و مدت زمان عملکرد را دارد. به عنوان یک قانون کلی:
- اگر محاسبات زیادی انجام می دهید، حافظه بیشتری را اختصاص دهید
- اگر منتظر تماس های خارجی هستید، حافظه کمتری را اختصاص دهید
صفحه حافظه و توان محاسباتی AWS Documentation نقطه شروع خوبی است. برای جلوگیری از پیکربندی دستی آن، ارزش آن را دارد که AWS Lambda Power Tuning را بررسی کنید، که به شما کمک می کند تا نقطه شیرین را پیدا کنید.
5) معماری برای بدون سرور
در این مرحله، مهارتهای AWS Lambda شما بسیار رشد کرده است. اما هنوز چیزهای زیادی برای یادگیری در دنیای محاسبات بدون سرور وجود دارد. مکانهای زیادی برای شروع وجود دارد، بنابراین پیشنهاد میکنم برخی از این ویدیوهای فوقالعاده را از AWS re:Invent 2022 مشاهده کنید.
اینها به شما در معرض دید عمیق تری از توسعه و معماری راه حل های بدون سرور قرار می دهند. از آنجایی که شما قبلاً Lambda را میشناسید، به مراتب کمتر به کد مربوط میشود و بیشتر در مورد الگوها و معماریها است.
بسته بندی
یادگیری با لامبدا در اینجا متوقف نمی شود. هنوز زمینه های زیادی از خدمات و توسعه وجود دارد که باید بیشتر مورد بررسی قرار گیرد! تقریباً برای هر مشکلی بین راهنمای توسعهدهندگان و راهنمای اپراتورها میتوانید پاسخی پیدا کنید. AWS با امکان پیمایش در اسناد خود، متخصص شدن در خدمات خود را واقعاً ممکن کرده است، و Lambda نیز از این قاعده مستثنی نیست.
برای غواصی عمیقتر، برخی از محتوای فوقالعاده را در کانال YouTube Events AWS با دهها گفتگوی باورنکردنی از re:Invent در همه موضوعات بدون سرور بررسی کنید. برای یادگیری از رهبران صنعت، نیازی به صرف هزاران دلار نیست و آنها واقعا ارزش کاوش را دارند.
در نهایت، محتوای منتشر شده توسط اعضای انجمن AWS را بررسی کنید! شما می توانید شرط بندی کنید که هر چیزی که می سازید، شخصی قبلاً کاری مشابه انجام داده است.
ایمن باشید و ابری شاد!