برنامه نویسی

نکات و ترفندهای CDK AWS برای توسعه دهندگان

ترفند اسکیت بورد که توسط یک شخص انجام شده است

AWS CDK برای بیشتر افرادی است که من با توسعه دهندگان بار اول که می توانند زیرساخت ها را به عنوان کد به زبان برنامه نویسی مناسب بنویسند (با عرض پوزش HCL ، ما هرگز دوست نبودیم).

این به نظر می رسد مانند یک تغییر دهنده بازی است اما وقتی به نمونه های زیادی نگاه می کنید ، واقعاً مانند برنامه نویسی احساس نمی شود. کلاس های فوری با همان ویژگی هایی که در YAML یا JSON استفاده کرده اید ، احساس سود بزرگی نمی کند.

با این حال ، هنگامی که شما به آن شلیک می کنید ، کارهای بسیار شسته و رفته ای وجود دارد که می توانید انجام دهید.


CDK AWS چیست

AWS CDK کتابخانه ای برای چندین زبان و CLI برای تهیه زیرساخت در AWS و موارد دیگر است.

شما از یکی از زبانهای مهم برنامه نویسی مانند TypeScript/Python/Java/C# و غیره استفاده می کنید تا زیرساخت های خود را به عنوان کلاس های فوری تعریف کنید. CLI می تواند این اشیاء از زبان های برنامه نویسی مربوطه را تبدیل کرده و آنها را به الگوهای CloudFormation تبدیل کرده و آنها را از طریق سرویس CloudFormation مستقر کند.

من در اینجا به جزئیات بیشتری نسبت به این TLDR کوچک نمی پردازم. اگر احساس می کنید بیشتر از موتور جستجوی مورد علاقه خود استفاده کنید تا اطلاعات بیشتری کسب کنید.

نکات و ترفندها

وقتی از CDK خارج از جعبه استفاده می کنید ، استفاده از آن را سرگرم کننده نمی دانم. بیشتر کلاس ها پارامترهای زیادی دارند و برخی از سازه ها به سازه های دیگر بستگی دارند که دارای پارامترهای بیشتری هستند و جریان منطقی وجود ندارد.

کلاس ها پس از خدمات AWS به جای روشی که شخصی ممکن است به ساخت یک برنامه نزدیک شود ، الگوبرداری می شوند.

این یک چیز خوب است که می توانید از زبانهای برنامه نویسی مناسب برای انجام کاری در مورد آن استفاده کنید.

ترفند 1: سازه های خود را با پیش فرض های معقول بسازید
آیا از توابع Lambda در پایتون با ردیابی استفاده می کنید؟ یک عملکرد پایتون ایجاد کنید که ردیابی را با یک لایه ثابت برای Powertools Lambda امکان پذیر کند.

نمی خواهید رمزگذاری یک سطل S3 را فراموش کنید و آن را خصوصی کنید؟ یک سازه رمزگذاری شده بسازید.

برای هر منبعی که چندین بار مورد استفاده قرار می گیرد ، احتمالاً ایده خوبی برای ساخت سازه خود و تنظیم پیش فرض است.

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

شما می توانید از لحاظ فنی کد برنامه و زیرساخت را در همان پرونده قرار دهید اما این ممکن است ایده خوبی نباشد.

کاری که من دوست دارم انجام دهم این است که به عنوان مثال ، کد عملکرد Lambda خود را با کد زیرساخت برای آن لامبدا در پرونده های مختلف اما در همان پوشه تهیه کنید. منظور من از تعریف عملکرد و سایر مؤلفه های دیگر منحصر به آن ویژگی مانند EG یک مسیر در دروازه API و جدول DynamoDB است که لامبدا می نویسد.

به این ترتیب ، اگر من روی یک ویژگی کار می کنم ، من هر آنچه را که ویژگی را در یک مکان تشکیل می دهد ، دارم که به روزرسانی ها را بسیار ساده تر می کند. این منجر به خاصیت خوبی می شود که تعریف پشته CDK من کاملاً از مجموعه ای از ویژگی هایی که پشته را تشکیل می دهند تشکیل شده است.

*نکته 3: سازه های خود را به روشی که در مورد معماری خود فکر می کنید ، انتزاعی کنید
*

من فکر می کنم این یکی نیاز به توضیح بیشتری دارد.

منظور من این است که نحوه ساخت ساخت و سازهای AWS CDK با پیروی از توپولوژی خدمات AWS و مرزهای خدمات است. این ممکن است اینگونه نباشد که شما می خواهید سیستم ها را طراحی کنید.

به عنوان مثال وقتی من یک تابع را برای یک ویژگی می نویسم ، از دیدگاه عملکرد در مورد معماری فکر می کنم.

من به این روش فکر می کنم وی گفت: “این عملکرد از درخواست پست از API ناشی می شود. همچنین به این پایگاه داده می نویسد. “

سازه های AWS باعث می شود که آن را به شرح زیر اعلام کنید. وی گفت: “این API این مسیر را با این روش و این ادغام در این عملکرد لامبدا دارد. این جدول اعطای دسترسی به این عملکرد را می نویسد. “

من آن را به صورت شبه کد می نویسم (با فرض اینکه شما از ترفند 1 برای راه من و AWS استفاده می کنید)

`# my way
my_api = RestAPI(…)
my_table = EncryptedTable(…)
my_function = PythonFunction(…)

my_function.is_triggered_by_api(my_api, “/my_feature”, “POST”)
my_function.writes_to(my_table)`
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

`# AWS CDK way
my_api = RestAPI(…)
my_table = EncryptedTable(…)
my_function = PythonFunction(…)

my_api.add_method(“/my_feature”, “POST”, my_function)
my_table.grants_readwrite(my_function)`
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر در الگوهای ادغام یا حتی به زبان دامنه خود فکر می کنید ، می توانید آن را از طریق سازه های خود ارتباط برقرار کنید. کد فوق فقط یک مثال ساده است.

ترفند 4: طرح های کپی نکنید
بعضی اوقات مرزهای موجود در کد برنامه و کد زیرساخت مبهم است. این لزوماً یک مشکل نیست زیرا به توسعه دهندگان اجازه می دهد تا کارها را به روش های مختلفی انجام دهند. با این حال ، هنگامی که هر دو طرف تعاریفی دارند که باید مطابقت داشته باشند ، می تواند مشکلی ایجاد کند.

یک مثال خوب DynamoDB خواهد بود. بیشتر توسعه دهندگان احتمالاً از یک لایه انتزاع در کد کاربرد خود برای اجرای یک طرحواره استفاده می کنند تا بتوانند با انواع کار کنند. اما ممکن است شما بخواهید که تمام پیکربندی ها صرفاً در کد برنامه شما باشند (مانند جریان ، پشتیبان گیری ، صورتحساب و غیره).

کاری که می توانید انجام دهید این است که از طرح کد برنامه کاربردی خود استفاده کرده و آن را به عنوان کد در زیرساخت های خود تغذیه کنید. اما لطفاً توجه داشته باشید که این ممکن است برای دسترسی به ابرداده یک کلاس به تأمل یا تکنیک دیگری نیاز داشته باشد. در اینجا چند کد شبه برای توضیح آنچه منظور من است ارائه شده است

`# Application code ORM DynamoDB table definition

@Table
class Flight
fight_id: str
takeoff: daytime
origin: str
destination: str
takeoff_index: SecondaryIndex


# Infrastructure code (in a different file)
flight_table = EncryptedTable.from_orm_class(Flight, Mode.OnDemand)`
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نکته نهایی: CDK synth و دوست شماست
اگر از IAC استفاده می کنید ، احتمالاً از طریق نوعی خط لوله مستقر می شوید. و استقرار به احتمال زیاد یکی از آخرین مراحل است. این بدان معناست که هر زمان که در CDK مشکلی پیش آمده است ، حلقه بازخورد شما کند است. برای سرعت بخشیدن به همه چیز ، ابتدا می توانید بررسی کنید که با اجرای CDK Synth (یا از طریق دونده تست یا CLI) ، می توان کد CDK خود را به CloudFormation سنتز کرد.


امیدوارم نکات و ترفندهای من به یک روش یا روش دیگر به شما کمک کرده باشد. اگر موارد دیگری را که می خواهید به اشتراک بگذارید ، می خواهم از هر نظر سپاسگزارم!

عکس توسط جان Fornander در Unsplash

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا