بازنشانی دوره نگهداری RDS با استفاده از توابع مرحله و لامبدا

دوره نگهداری چیست؟
دوره نگهداری در نمونههای RDS تعیین میکند که نسخههای پشتیبان خودکار چقدر باید ذخیره شوند.
هنگام ایجاد یک نمونه DB، به طور پیش فرض فرکانس پشتیبان گیری خودکار روی 7 روز تنظیم شده است، به این معنی که یک نسخه پشتیبان از نمونه تا 7 روز ذخیره می شود.
در مورد ما، بسیاری از مواقع افرادی که نمونه را ایجاد میکردند فراموش میکردند که در صورت عدم نیاز به پشتیبانگیری، آن را بازنشانی کنند.
دوره نگهداری را می توان روی 0 تنظیم کرد که در این صورت هیچ نسخه پشتیبان برای نمونه DB گرفته نمی شود، به خصوص در Dev envs که نیازی به ذخیره نسخه پشتیبان از پایگاه های داده نداشتیم.
هنگامی که ما هر هفته کار پاکسازی را به صورت دستی انجام میدادیم، میدیدیم که فرآیند تنظیم این دوره نگهداری روی 0 خستهکننده بود، زیرا باید منتظر میماندیم تا نمونه در حالت توقف شروع شود، سپس آن را تغییر دهیم، منتظر اصلاح باشیم. برای تکمیل و سپس توقف نمونه.
این کار را چندین بار تکرار کنید و به راحتی می توانید نصف روز را صرف این کار کنید.
برای خودکار کردن این کار، به فکر راهحلی بدون سرور متشکل از توابع مرحله، برنامه زمانبندی Lambda و Eventbridge بودم.
پیش نیازها:
- نقش توابع مرحله برای فراخوانی توابع لامبدا و انجام شروع، توقف و اصلاح اقدامات در نمونه های RDS
- نقش IAM برای توابع لامبدا برای ارسال پاسخ پاسخ به تماس به توابع مرحله (sendTaskSuccess & sendTaskFailure)
توابع استپ دارای موارد زیر است. ایالت ها-
- فراخوانی لامبدا
- وضعیت نقشه
- یک دولت انتخابی
- گردش کار 1 زمانی که DB در حالت توقف است
- گردش کار 2 هنگامی که DB در حالت راه اندازی/راه اندازی مجدد/پشتیبان گیری است.
- گردش کار 3 زمانی که DB در وضعیت موجود است.
بیایید با استفاده از یک نسخه نمایشی کوتاه، هر وضعیت را مرور کنیم:
1.فراخوانی لامبدا : [AWS SDK Integrations]
حالت فراخوانی لامبدا
2.ایالات نقشه و انتخاب :
نقشه و انتخاب ایالات
3.DB در حالت توقف است:
گردش کار 1 توضیح
در تابع Lambda که در نسخه نمایشی مورد بحث قرار گرفتیم، API SDK Water برای مثال همانطور که در قطعه کد زیر نشان داده شده است، پیادهسازی میشود.
در همان عملکرد برای انجام عمل اصلاح، باید قبل از فراخوانی API پیشخدمت، تاخیری چند ثانیه ای معرفی می کردم، این به این دلیل است که پس از برقراری تماس modify_DB_instance SDK، عملیات پس از چند ثانیه تاخیر شروع می شود.
توجه داشته باشید: اگر تاخیر ایجاد نشود، زیرا DB در حالت موجود است، تماس پیشخدمت حذف می شود و رمز برگردانده می شود بنابراین بدون اعمال تغییر به حالت بعدی منتقل می شود.
بیایید ببینیم که چگونه جریان اجرا برای یک نمونه DB در حالت توقف کار می کند.
نسخه ی نمایشی: اجرای تابع مرحله برای مثال در حالت توقف
کل اجرا برای یک نمونه حدود 14 دقیقه طول می کشد.
4.DB در حالت شروع/راهاندازی مجدد است:
گردش کار 2 توضیح
بیایید ببینیم که چگونه جریان اجرا برای یک نمونه DB در حالت راهاندازی مجدد کار میکند.
نسخه ی نمایشی برای مثال در حالت راه اندازی مجدد
کل اجرا برای یک نمونه تقریباً 5 دقیقه طول می کشد.
5.DB در وضعیت موجود است:
گردش کار 3 توضیح
بیایید ببینیم که چگونه جریان اجرا برای یک نمونه DB در وضعیت موجود کار می کند.
نسخه ی نمایشی: اجرای تابع مرحله برای مثال در وضعیت موجود
کل اجرا برای یک نمونه تقریباً 3 ثانیه طول می کشد.
ما میتوانیم برنامهای از Eventbridge را برای اجرای این تابع مرحله دو بار در هفته یا یک بار در ماه برای خودکارسازی بیشتر فرآیند معرفی کنیم.
من یک مورد استفاده از تنظیم دوره نگهداری RDS را روی 0 با استفاده از توابع مرحله نشان دادهام، اما این مورد را میتوان برای موارد استفاده دیگر نیز که در آن نیاز به انجام یک عمل اصلاح انبوه در نمونههای RDS انجام دهیم، استفاده کرد.
چه چیزی از این تمرین یاد گرفتم؟
الگوی پاسخ به تماس یکی از ویژگی های قدرتمند توابع مرحله است. من مدتی را صرف اضافه کردن حالتهای انتظار پس از فراخوانی شروع/تغییر SDK API کرده بودم، اما به سرعت متوجه شدم که این زمان قابل پیشبینی نیست زیرا بر اساس موتورهای DB متفاوت است. آن زمان بود که الگوی تماس به کمک من آمد
لطفا کد را در مخزن github من پیدا کنید:
https://github.com/neetu-mallan/retentionperiodreset
از چه منابعی استفاده کردم؟
برای یادگیری و درک توابع مرحله، من از طریق مستندات AWS رفتهام:
https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html
https://www.youtube.com/watch?v=jXxKRd_9nC0 — این دوره آموزشی Step Functions Crash توسط Manoj Fernando واقعاً به من در درک چگونگی کمک توابع مرحله در موارد استفاده عملی کمک کرد.
- 2 پیوند زیر به من کمک کرد تا اجرای الگوی برگشت تماس را درک کنم:
https://docs.aws.amazon.com/step-functions/latest/dg/callback-task-sample-sqs.html
https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html