برنامه نویسی

Cloud Resume Challenge: راهی مناسب برای کشف ابر

من هنگام تحصیل در آزمون CCP AWS خود ، توسط Forrest Brazeal به چالش رزومه ابر رسیدم و بدون فکر زیاد ، وب سایت را به نشانک های خود اضافه کردم. من یقین داشتم که در بعضی از مواقع ، من این چالش را به عهده می گیرم ، زیرا به نظر می رسید فرصتی عالی برای دستیابی به تجربه دستی با AWS است. و … من این کار را کردم – بعد از گذراندن امتحان خود ، شروع به کار روی پروژه کردم.

شروع

در همان ابتدا ، مجبور شدم محیط توسعه شخصی AWS خود را تنظیم کنم تا اطمینان حاصل کنم که از حساب من (و کیف پول من!) به درستی محافظت شده است. برای این کار تصمیم گرفتم از سازمان های AWS استفاده کنم. من یک حساب “ریشه” AWS ایجاد کردم و یک سازمان AWS را با یک واحد سازمانی (OU) در داخل آن تنظیم کردم. تحت OU ، یک حساب جدید AWS ایجاد شد و این حساب کاربری برای ایجاد منابع مرتبط با پروژه بود.
سرانجام ، من SSO (تک ورود به سیستم) را در حساب “root” تنظیم کردم تا وارد حساب “پروژه” شوم. این کار از طریق مرکز هویت AWS IAM انجام شد. پس از گذراندن مدتی در مرور اینترنت برای یادگیری نحوه انجام این کار – و آنچه که من واقعاً انجام می دادم – کار کرد و من توانستم از طریق CLI وارد مرکز هویت IAM شوم.

جبهه

در این مرحله از پروژه ، من از یک فایل HTML ساختگی استفاده کردم ، همانطور که قصد داشتم وب سایت را در پایان چالش بسازم و سبک کنم. من قبلاً تجربه ای در ایجاد وب سایت ها داشتم ، بنابراین این قسمت برای من جدید نبود. برای یک ظاهر طراحی شده ، من به جای CSS “وانیلی” که در این چالش پیشنهاد شده است ، از CSS Tailwind استفاده کردم.
بعد از آماده شدن اسکلت HTML ، من آن را به عنوان یک وب سایت استاتیک در یک سطل S3 بارگذاری کردم. سپس ، من یک توزیع در Amazon Cloudfront ایجاد کردم ، که سطل S3 برای تهیه آن پیکربندی شده بود و آن را به یک ثبت دامنه خارجی (CloudFlare) وصل کردم. این مسئله در طول اعتبار سنجی DNS با مدیر گواهی AWS مشکل ایجاد کرد ، اما کمی از Googling روز را ذخیره کرد و همه چیز آماده بود – وب سایت من از طریق نام دامنه سفارشی من قابل دسترسی بود و از HTTPS برای امنیت استفاده می کرد.
نکته آخر اینکه من از ابتدا تصمیم گرفتم یک مخزن GitHub برای پروژه ایجاد کنم ، بنابراین پیگیری تغییرات در طول مسیر ساده تر خواهد بود.

پشت

برای ردیابی تعداد بازدید کنندگان به وب سایت من ، من یک پس زمینه ساده با استفاده از خدمات AWS ساختم. من با ایجاد یک جدول DynamoDB برای ذخیره تعداد بازدید کنندگان شروع کردم. سپس ، من یک تابع لامبدا مبتنی بر پایتون نوشتم که تعداد آن را از پایگاه داده افزایش و بازیابی می کند. این عملکرد از طریق یک دروازه API تنظیم شده به عنوان API REST انجام شد.
برای دسترسی به پس زمینه از قسمت جلوی ، من عملکرد لامبدا را در پشت نقطه انتهایی API Gateway مستقر کردم و CORS را فعال کردم. من همچنین اعتبار سنجی اساسی و رسیدگی به خطا را اضافه کردم تا اطمینان حاصل شود که عملکرد قابل اعتماد است.
ایجاد یک میز DynamoDB بسیار ساده بود. من قبلاً تجربه نوشتن اسکریپت های پایتون را تجربه کردم ، بنابراین بزرگترین چالش پیکربندی صحیح دروازه API بود – اطمینان حاصل کردم که تمام روشهای لازم تعریف شده است و عملکرد لامبدا اجازه فراخوانی از API را دارد. با این حال ، این چیزی نبود که باعث شود من بخوابم بیش از آن.

ادغام

اکنون زمان آن رسیده بود که جلوی آن را به هم گره بزنیم و به آنها عقب بیفتید و به آنها اجازه دهید تا ارتباط برقرار کنند. اولین قدم نوشتن یک اسکریپت JavaScript ساده بود که می توانست از طریق API Gateway تماس API را به پس زمینه تبدیل کند ، تعداد بازدید کنندگان را بازیابی کند و آن را در وب سایت نمایش دهد. من مجبور شدم حافظه خود را کمی در مورد توابع Async در JavaScript تازه کنم ، اما در کل ، همه چیز به راحتی جمع می شد.
این بخش همچنین شامل نوشتن تست های دود برای API بود. برای انجام این کار ، من Cypress را انتخاب کردم. من قبلاً فرصتی برای ایجاد تست های خودکار نداشتم ، بنابراین این برای من کاملاً جدید بود. بعد از برخی از Googling ، من آماده شروع کار بودم-معلوم شد که سرو بسیار کاربر پسند است و فقط باید بداند که URL شما باید در پاسخ به یک ورودی معین چه خروجی بازگردد.
من موفق شدم تست های زیر را تهیه کنم:

  1. بررسی کنید که آیا پیشخوان به درستی افزایش یافته است یا خیر.
  2. بررسی کنید که آیا API هنگام تصویب یک بدنه درخواست نامعتبر ، خطای 400 را برمی گرداند.
  3. بررسی کنید که آیا API هنگام استفاده از روش HTTP پشتیبانی نشده ، خطای 405 را برمی گرداند.
  4. (آزمایش اضافی ، نه بخشی از cypress.config.js) بررسی کنید که آیا مورد DynamoDB به درستی اولیه شده است یا خیر. این یکی برای اهداف تجربی/یادگیری ایجاد شده است. برای اجرای صحیح آن ، ابتدا مورد با تعداد باید حذف شود. در عملکرد لامبدا ، یک قطعه قطعه اضافه کردم که بررسی می کند که آیا چنین موردی در پایگاه داده وجود دارد – و اگر نه ، آن را آغاز می کند.

نتایج آزمون API

اتوماسیون/CI

تا این مرحله ، هر منبع AWS به صورت دستی از طریق کنسول AWS ایجاد شده است – اما در اینجا کلمه جادویی: اتوماسیون به وجود می آید.
زیرساخت ها به عنوان کد قطعاً یکی از چالش برانگیزترین بخش های کل پروژه بود. من تصمیم گرفتم از Terraform برای مدیریت آن استفاده کنم ، زیرا یادگیری آن برای مدتی در لیست کارهای من بوده است. من در ساخت پرونده های .tf سخت کار کردم – می خواستم این تنظیم ساده و در عین حال “حرفه ای” باشد. در پایان ، من تصمیم گرفتم ساختار پوشه خود را در ماژول ها سازماندهی کنم و فکر می کنم این یک تماس خوب بود. پیمایش از طریق آنها ساده و بصری است.

ساختار پوشه Terraform

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

لیست دولت Terraform

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

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

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

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