തുടക്കക്കാർക്കായി AWS: S3, Deduplication, Presigned URLs
വെറും പരീക്ഷണാടിസ്ഥാനത്തിലുള്ള ആപ്പുകൾ നിർമ്മിക്കുന്നത് നിർത്തൂ. പ്രൊഡക്ഷൻ സിസ്റ്റങ്ങൾ നിർമ്മിക്കാൻ തുടങ്ങൂ.
നിങ്ങളുടെ സെർവർ എപ്പോൾ വേണമെങ്കിലും മാറ്റാൻ കഴിയുന്ന ഒന്നാണെങ്കിൽ (disposable), ഫയലുകൾ അതിന്റെ ഡിസ്കിൽ സൂക്ഷിക്കാൻ പാടില്ല. നിങ്ങൾക്ക് AWS S3 ആവശ്യമാണ്. S3 എന്നത് ഒരു object storage ആണ്. ഇത് നിങ്ങളുടെ സെർവറുകളിൽ നിന്ന് സ്വതന്ത്രമായി പ്രവർത്തിക്കുന്നു. നിങ്ങളുടെ സെർവർ തകരാറിലായാലും അല്ലെങ്കിൽ ഇല്ലാതായാലും ഫയലുകൾ സുരക്ഷിതമായിരിക്കുമെന്ന് ഇത് ഉറപ്പാക്കുന്നു.
ഒരു പ്രൊഫഷണൽ ഫയൽ അപ്ലോഡ് ഫ്ലോ എങ്ങനെ നിർമ്മിക്കാം എന്ന് ഇതാ:
S3 Buckets-ഉം Keys-ഉം ഉപയോഗിക്കുക ഒരു bucket എന്നത് നിങ്ങളുടെ കണ്ടെയ്നറാണ്. ഒരു key എന്നത് നിങ്ങളുടെ ഫയലിന്റെ പൂർണ്ണമായ പാത്ത് (path) ആണ്. S3-യിൽ യഥാർത്ഥ ഫോൾഡറുകൾ ഇല്ല. ഇത് ഒരു ഫ്ലാറ്റ് സ്ട്രക്ചറിൽ (flat structure) പ്രിഫിക്സുകൾ (prefixes) ആണ് ഉപയോഗിക്കുന്നത്. കാര്യങ്ങൾ അടുക്കും ചിട്ടയോടെ സൂക്ഷിക്കാൻ images/ അല്ലെങ്കിൽ documents/ എന്നിങ്ങനെ ഫയലുകളെ അവയുടെ തരം അനുസരിച്ച് നിങ്ങൾക്ക് ക്രമീകരിക്കാം.
Content Deduplication നടപ്പിലാക്കുക ഒരേ ഫയലിന് രണ്ടുതവണ പണം നൽകേണ്ടി വരുന്ന സാഹചര്യം ഒഴിവാക്കുക. ഓരോ ഫയലിനും ഒരു യുണീക് ഫിംഗർപ്രിന്റ് (unique fingerprint) നിർമ്മിക്കാൻ SHA-256 അൽഗോരിതം ഉപയോഗിക്കുക. രണ്ട് ഉപയോക്താക്കൾ ഒരേ ചിത്രം തന്നെ അപ്ലോഡ് ചെയ്യുകയാണെങ്കിൽ, അതിന്റെ ഹാഷ് (hash) തുല്യമായിരിക്കും. S3-ലേക്ക് അപ്ലോഡ് ചെയ്യുന്നതിന് മുമ്പ് നിങ്ങളുടെ ഡാറ്റാബേസിൽ ഈ ഹാഷ് ഉണ്ടോ എന്ന് പരിശോധിക്കുക. ഹാഷ് ഉണ്ടെങ്കിൽ, നിലവിലുള്ള ഫയൽ തന്നെ വീണ്ടും ഉപയോഗിക്കുക.
വലിയ ഫയലുകൾ സ്ട്രീം ചെയ്യുക ഒരു 200MB വീഡിയോ ഹാഷ് ചെയ്യാൻ വേണ്ടി മാത്രം അത് നിങ്ങളുടെ സെർവറിലെ RAM-ലേക്ക് ലോഡ് ചെയ്യരുത്. ഫയലുകളെ ചെറിയ കഷണങ്ങളായി (chunks) പ്രോസസ്സ് ചെയ്യാൻ Node.js streams ഉപയോഗിക്കുക. ഇത് നിങ്ങളുടെ സെർവറിനെ വേഗതയുള്ളതാക്കി നിലനിർത്തുകയും ക്രാഷുകൾ ഒഴിവാക്കുകയും ചെയ്യുന്നു.
ഫയൽ സൈസ് പരിധികൾ നിജപ്പെടുത്തുക ഫ്രണ്ട്എൻഡ് പരിശോധന എന്നത് ഉപയോക്താവിന്റെ സൗകര്യത്തിന് (user experience) വേണ്ടി മാത്രമാണ്. അത് സുരക്ഷയല്ല. മൂന്ന് തലങ്ങളിൽ നിങ്ങൾ സൈസ് പരിധികൾ നിജപ്പെടുത്തണം: • UX-നായി ക്ലയന്റ് സൈഡിൽ (Client-side). • തെറ്റായ റിക്വസ്റ്റുകൾ നേരത്തെ തള്ളിക്കളയാൻ ബാക്കെൻഡ് വാലിഡേഷൻ (Backend validation). • അമിത വലുപ്പമുള്ള അപ്ലോഡുകൾ ഉറവിടത്തിൽ തന്നെ തടയാൻ presigned URLs വഴിയുള്ള S3 കണ്ടീഷനുകൾ.
സുരക്ഷയ്ക്കായി Presigned URLs ഉപയോഗിക്കുക നിങ്ങളുടെ bucket പബ്ലിക് ആക്കരുത്. "Block all public access" എന്നത് ഓൺ ആയി തന്നെ വെക്കുക. പകരം, ഒരു presigned URL ജനറേറ്റ് ചെയ്യുക. ഇത് ഒരു പ്രത്യേക ഫയൽ അപ്ലോഡ് ചെയ്യാൻ ഉപയോക്താവിന് താൽക്കാലിക അനുമതി നൽകുന്നു. നിങ്ങൾക്ക് ഇതിന് ഒരു എക്സ്പയറി ടൈം (expiry time) നിശ്ചയിക്കാം. ചെറിയ ഫയലുകൾക്ക് കുറഞ്ഞ സമയപരിധിയും വലിയ വീഡിയോ അപ്ലോഡുകൾക്ക് കൂടുതൽ സമയപരിധിയും നൽകുക.
അപ്ലോഡ് പരിശോധിക്കുക ക്ലയന്റിനെ ഒരിക്കലും വിശ്വസിക്കരുത്. അപ്ലോഡിന് ശേഷം, ഫയൽ യഥാർത്ഥത്തിൽ S3-യിൽ ഉണ്ടോ എന്നും അതിന്റെ സൈസ് നിങ്ങളുടെ റെക്കോർഡുകളുമായി പൊരുത്തപ്പെടുന്നുണ്ടോ എന്നും പരിശോധിക്കാൻ
HeadObjectകമാൻഡ് ഉപയോഗിക്കുക.
The Production Flow:
- ക്ലയന്റ് ഒരു അപ്ലോഡ് URL ആവശ്യപ്പെടുന്നു.
- ബാക്കെൻഡ് സൈസ്, ടൈപ്പ് എന്നിവ പരിശോധിക്കുകയും ഡ്യൂപ്ലിക്കേറ്റുകൾ ഉണ്ടോ എന്ന് നോക്കുകയും ചെയ്യുന്നു.
- ബാക്കെൻഡ് ഒരു സ്കോപ്പ് ചെയ്ത (scoped) presigned URL ജനറേറ്റ് ചെയ്യുന്നു.
- ക്ലയന്റ് നേരിട്ട് S3-ലേക്ക് ഫയൽ അപ്ലോഡ് ചെയ്യുന്നു.
HeadObjectവഴി ഫയൽ ഉണ്ടെന്ന് ബാക്കെൻഡ് സ്ഥിരീകരിക്കുന്നു.
ഡിഫോൾട്ട് ആയി തന്നെ സുരക്ഷിതമായ സിസ്റ്റങ്ങൾ നിർമ്മിക്കുക.
Source: https://dev.to/surajrkhonde/aws-for-newbies-episode-2-3jg5
