AWS ഓട്ടോമേഷന്റെ ശക്തി തുറന്നുവിടുക. ഈ ഗൈഡിൽ Boto3 സജ്ജീകരണം, പ്രധാന ആശയങ്ങൾ, S3, EC2, Lambda എന്നിവയ്ക്കായുള്ള പ്രായോഗിക ഉദാഹരണങ്ങൾ, ആഗോള ടീമുകൾക്കുള്ള മികച്ച രീതികൾ എന്നിവ ഉൾക്കൊള്ളുന്നു.
Python ഉപയോഗിച്ച് AWS-ൽ പ്രാവീണ്യം നേടുക: ക്ലൗഡ് സർവീസ് സംയോജനത്തിനായുള്ള Boto3 SDK-യെക്കുറിച്ചുള്ള ആഴത്തിലുള്ള പഠനം
ക്ലൗഡ് കമ്പ്യൂട്ടിംഗിന്റെ ലോകത്ത്, ആമസോൺ വെബ് സർവീസസ് (AWS) വിശാലവും എക്കാലത്തും വികസിച്ചുകൊണ്ടിരിക്കുന്നതുമായ സേവനങ്ങളുടെ ഒരു ശ്രേണി വാഗ്ദാനം ചെയ്തുകൊണ്ട് ഒരു ആഗോള നേതാവായി നിലകൊള്ളുന്നു. ഡെവലപ്പർമാർക്കും, DevOps എഞ്ചിനീയർമാർക്കും, സിസ്റ്റം ആർക്കിടെക്റ്റുകൾക്കും, ഈ സേവനങ്ങളുമായി പ്രോഗ്രമാറ്റിക്കായി ഇടപെടുന്നത് ഒരു സൗകര്യം മാത്രമല്ല, അത്യാവശ്യമാണ്. സ്കേലബിൾ, പ്രതിരോധശേഷിയുള്ള, കാര്യക്ഷമമായ ക്ലൗഡ് ഇൻഫ്രാസ്ട്രക്ചർ കൈകാര്യം ചെയ്യുന്നതിനുള്ള താക്കോലാണ് ഓട്ടോമേഷൻ. ഇവിടെയാണ് Python-നുള്ള ഔദ്യോഗിക AWS SDK ആയ Boto3 നിങ്ങളുടെ ആയുധപ്പുരയിലെ ഒഴിച്ചുകൂടാനാവാത്ത ഉപകരണമായി മാറുന്നത്.
Boto3-ലേക്ക് ആഴത്തിലുള്ള ഒരു പഠനം നൽകുന്ന ഈ സമഗ്ര ഗൈഡ് ഒരു ആഗോള പ്രേക്ഷകർക്കായി രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു. ഞങ്ങൾ അടിസ്ഥാനകാര്യങ്ങളിൽ നിന്ന് ആരംഭിച്ച്, പ്രധാന AWS സേവനങ്ങളുള്ള പ്രായോഗിക ഉദാഹരണങ്ങളിലേക്ക് നീങ്ങുകയും നൂതന ആശയങ്ങളും മികച്ച രീതികളും പര്യവേക്ഷണം ചെയ്യുകയും ചെയ്യും. നിങ്ങൾ ഒരു ലളിതമായ ടാസ്ക് ഓട്ടോമേറ്റ് ചെയ്യുകയാണെങ്കിലും അല്ലെങ്കിൽ ഒരു കോംപ്ലക്സ്, ക്ലൗഡ്-നേറ്റീവ് ആപ്ലിക്കേഷൻ നിർമ്മിക്കുകയാണെങ്കിലും, Boto3-ൽ പ്രാവീണ്യം നേടുന്നത് AWS-ൻ്റെ പൂർണ്ണമായ സാധ്യത ഉപയോഗിക്കാൻ നിങ്ങളെ സഹായിക്കും.
Boto3 ഉപയോഗിച്ച് ആരംഭിക്കുന്നു: AWS ഓട്ടോമേഷനിലേക്കുള്ള നിങ്ങളുടെ ആദ്യ ചുവടുകൾ
ഞങ്ങൾക്ക് കോഡ് എഴുതുന്നതിന് മുമ്പ്, സുരക്ഷിതവും പ്രവർത്തനക്ഷമവുമായ ഒരു ഡെവലപ്മെൻ്റ് എൻവയോൺമെൻ്റ് സ്ഥാപിക്കേണ്ടതുണ്ട്. AWS-മായുള്ള നിങ്ങളുടെ ഇടപെടലുകൾ വിജയകരവും സുരക്ഷിതവുമാണെന്ന് ഉറപ്പാക്കുന്നതിന് ഈ പ്രാരംഭ സജ്ജീകരണം നിർണായകമാണ്.
ആഗോള ഡെവലപ്മെൻ്റ് എൻവയോൺമെൻ്റിനായുള്ള മുൻവ്യവസ്ഥകൾ
- Python ഇൻസ്റ്റാളേഷൻ: Boto3 ഒരു Python ലൈബ്രറിയാണ്, അതിനാൽ നിങ്ങൾക്ക് Python ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. ഇത് Python-ൻ്റെ വിവിധ പതിപ്പുകളെ പിന്തുണയ്ക്കുന്നു. Python 3-യുടെ ഏറ്റവും പുതിയ സ്ഥിരതയുള്ള പതിപ്പ് ഉപയോഗിക്കാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു. Python-ൻ്റെ ക്രോസ്-പ്ലാറ്റ്ഫോം സ്വഭാവം ലോകമെമ്പാടുമുള്ള ടീമുകൾക്ക് മികച്ചൊരു തിരഞ്ഞെടുപ്പായി ഇതിനെ മാറ്റുന്നു.
- ഒരു AWS അക്കൗണ്ട്: നിങ്ങൾക്ക് ഇതിനകം ഒരെണ്ണം ഇല്ലെങ്കിൽ, നിങ്ങൾ ഒരു AWS അക്കൗണ്ടിനായി സൈൻ അപ്പ് ചെയ്യേണ്ടതുണ്ട്. ഈ പ്രക്രിയ സാർവത്രികമാണ്, കൂടാതെ പല സേവനങ്ങൾക്കും സൗജന്യ ടയറിലേക്ക് പ്രവേശനം നൽകുന്നു, ഇത് പഠനത്തിനും പരീക്ഷണത്തിനും അനുയോജ്യമാണ്.
- AWS റീജിയനുകളെക്കുറിച്ച് മനസ്സിലാക്കുക: AWS സേവനങ്ങൾ ലോകമെമ്പാടുമുള്ള ഡാറ്റാ സെൻ്ററുകളിൽ ഹോസ്റ്റ് ചെയ്യുന്നു, ഇത് ഭൂമിശാസ്ത്രപരമായ റീജിയനുകളായി ക്രമീകരിച്ചിരിക്കുന്നു (ഉദാഹരണത്തിന്, `us-east-1`, `eu-west-2`, `ap-southeast-1`). ലേറ്റൻസി, ഡാറ്റാ പരമാധികാരം, ചെലവ് എന്നിവയ്ക്ക് ശരിയായ റീജിയൻ തിരഞ്ഞെടുക്കുന്നത് നിർണായകമാണ്. Boto3 ഉപയോഗിക്കുമ്പോൾ, നിങ്ങൾ ഏത് റീജിയനുമായാണ് സംവദിക്കാൻ ആഗ്രഹിക്കുന്നതെന്ന് വ്യക്തമാക്കേണ്ടി വരും.
ഇൻസ്റ്റാളേഷനും കോൺഫിഗറേഷനും: ഒരു സുരക്ഷിത അടിത്തറ
മുൻവ്യവസ്ഥകൾ പൂർത്തിയായ ശേഷം, Boto3 ഇൻസ്റ്റാൾ ചെയ്ത് നിങ്ങളുടെ AWS അക്കൗണ്ടിലേക്ക് സുരക്ഷിതമായി കണക്റ്റുചെയ്യാൻ ഇത് കോൺഫിഗർ ചെയ്യാം.
1. Boto3 ഇൻസ്റ്റാൾ ചെയ്യുന്നു
Python-ൻ്റെ പാക്കേജ് ഇൻസ്റ്റാളറായ `pip` ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യുന്നത് ലളിതമാണ്. നിങ്ങളുടെ ടെർമിനൽ അല്ലെങ്കിൽ കമാൻഡ് പ്രോംപ്റ്റ് തുറന്ന് ഇത് റൺ ചെയ്യുക:
pip install boto3
2. AWS ക്രെഡൻഷ്യലുകൾ സുരക്ഷിതമായി കോൺഫിഗർ ചെയ്യുന്നു
ഇതാണ് ഏറ്റവും നിർണായകമായ ഘട്ടം. നിങ്ങളുടെ AWS ക്രെഡൻഷ്യലുകൾ (ആക്സസ് കീ ഐഡിയും സീക്രട്ട് ആക്സസ് കീയും) നിങ്ങളുടെ കോഡിൽ നേരിട്ട് ഹാർഡ്കോഡ് ചെയ്യരുത്. ഇത് വലിയ സുരക്ഷാ അപകടമാണ്. AWS കമാൻഡ് ലൈൻ ഇൻ്റർഫേസ് (CLI) ഉപയോഗിച്ച് സുരക്ഷിതമായ സ്ഥലത്ത് അവ കോൺഫിഗർ ചെയ്യുകയാണ് നല്ലത്.
ആദ്യം, AWS CLI ഇൻസ്റ്റാൾ ചെയ്യുക (ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ലെങ്കിൽ). തുടർന്ന്, താഴെ പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക:
aws configure
CLI നിങ്ങളോട് നാല് വിവരങ്ങൾ ആവശ്യപ്പെടും:
- AWS ആക്സസ് കീ ID: നിങ്ങളുടെ തനതായ ഐഡൻ്റിഫയർ.
- AWS സീക്രട്ട് ആക്സസ് കീ: നിങ്ങളുടെ രഹസ്യ പാസ്വേഡ്. ഇത് മറ്റേതൊരു പാസ്വേഡും പോലെ പരിഗണിക്കുക.
- സ്ഥിര റീജിയൻ പേര്: നിങ്ങളുടെ കോഡ് സ്ഥിരമായി കണക്ട് ചെയ്യുന്ന AWS റീജിയൻ (ഉദാഹരണത്തിന്, `us-west-2`).
- സ്ഥിര ഔട്ട്പുട്ട് ഫോർമാറ്റ്: സാധാരണയായി `json`.
ഈ കമാൻഡ് നിങ്ങളുടെ ക്രെഡൻഷ്യലുകൾ `~/.aws/credentials`-ൽ സ്ഥിതി ചെയ്യുന്ന ഫയലുകളിലും നിങ്ങളുടെ സ്ഥിര റീജിയൻ/ഔട്ട്പുട്ട് ഫോർമാറ്റ് `~/.aws/config`-ലും സുരക്ഷിതമായി സംഭരിക്കുന്നു. Boto3 ഈ ഫയലുകൾക്കായി സ്വയമേവ തിരയുന്നു, അതിനാൽ നിങ്ങളുടെ സ്ക്രിപ്റ്റുകളിൽ ക്രെഡൻഷ്യലുകൾ വ്യക്തമാക്കേണ്ടതില്ല. ഈ രീതി നിങ്ങളുടെ കോഡിനെ പോർട്ടബിളും സുരക്ഷിതവുമാക്കാൻ സഹായിക്കുന്നു, കാരണം സെൻസിറ്റീവ് കീകൾ നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ലോജിക്കിൽ നിന്ന് വേർതിരിക്കപ്പെടുന്നു.
Boto3-യുടെ പ്രധാന ഘടകങ്ങൾ: ക്ലയിന്റുകളും റിസോഴ്സുകളും
AWS സേവനങ്ങളുമായി സംവദിക്കാൻ Boto3 രണ്ട് വ്യത്യസ്ത വഴികൾ വാഗ്ദാനം ചെയ്യുന്നു, ക്ലയിന്റുകൾ എന്നും റിസോഴ്സുകൾ എന്നും അറിയപ്പെടുന്നു. ഫലപ്രദവും വായിക്കാവുന്നതുമായ കോഡ് എഴുതുന്നതിന് ഈ വ്യത്യാസം മനസ്സിലാക്കേണ്ടത് അത്യാവശ്യമാണ്.
രണ്ട് അബ്സ്ട്രാക്ഷനുകളെക്കുറിച്ച് മനസ്സിലാക്കുക
അവയെ ആശയവിനിമയത്തിൻ്റെ രണ്ട് വ്യത്യസ്ത തലങ്ങളായി കരുതുക:
- ക്ലയിന്റുകൾ (താഴ്ന്ന-തലം): AWS സർവീസ് API പ്രവർത്തനങ്ങളിലേക്ക് നേരിട്ടുള്ള, ഒന്ന് മുതൽ ഒന്ന് വരെയുള്ള മാപ്പിംഗ് നൽകുന്നു. ഒരു സേവനത്തിലെ സാധ്യമായ എല്ലാ പ്രവർത്തനങ്ങളും അതിൻ്റെ ക്ലയിൻ്റിലൂടെ ലഭ്യമാണ്. API-യിൽ നിന്നുള്ള റോ JSON പ്രതികരണത്തിന് സമാനമായി പ്രതികരണങ്ങൾ സാധാരണയായി നിഘണ്ടുക്കളാണ്.
- റിസോഴ്സുകൾ (ഉയർന്ന-തലം): കൂടുതൽ抽象മായ, ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് ഇൻ്റർഫേസ് നൽകുന്നു. രീതികൾ വിളിക്കുന്നതിനുപകരം, ആട്രിബ്യൂട്ടുകളും പ്രവർത്തനങ്ങളുമുള്ള 'റിസോഴ്സ്' ഒബ്ജക്റ്റുകളുമായി നിങ്ങൾ സംവദിക്കുന്നു. ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് ഒരു `S3.Bucket` ഒബ്ജക്റ്റ് ഉണ്ടാകാം, അതിന് ഒരു പേര് ആട്രിബ്യൂട്ടും `delete()` പ്രവർത്തനവും ഉണ്ടായിരിക്കും.
ക്ലയിന്റ് API: താഴ്ന്ന-തലം, നേരിട്ടുള്ള സേവന ആക്സസ്
ക്ലയിന്റുകളാണ് Boto3-ൻ്റെ അടിസ്ഥാനപരമായ പാളി. അവ സേവനത്തിൻ്റെ API നിർവചന ഫയലിൽ നിന്ന് നേരിട്ട് ജനറേറ്റ് ചെയ്യപ്പെടുന്നു, അതിനാൽ അവ എപ്പോഴും കാലികവും പൂർണ്ണവുമാണെന്ന് ഉറപ്പാക്കുന്നു.
എപ്പോഴാണ് ഒരു ക്ലയിന്റ് ഉപയോഗിക്കേണ്ടത്:
- റിസോഴ്സ് API-യിലൂടെ ലഭ്യമല്ലാത്ത ഒരു സേവന പ്രവർത്തനം നിങ്ങൾക്ക് ആക്സസ് ചെയ്യണമെങ്കിൽ.
- നിഘണ്ടു അടിസ്ഥാനമാക്കിയുള്ള പ്രതികരണങ്ങളുമായി പ്രവർത്തിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ.
- API കോളുകളിൽ നിങ്ങൾക്ക് സമ്പൂർണ്ണമായ മികച്ച നിയന്ത്രണം ആവശ്യമായി വരുമ്പോൾ.
ഉദാഹരണം: ഒരു ക്ലയിന്റ് ഉപയോഗിച്ച് S3 ബക്കറ്റുകൾ ലിസ്റ്റ് ചെയ്യുന്നു
import boto3
# ഒരു S3 ക്ലയിന്റ് ഉണ്ടാക്കുക
s3_client = boto3.client('s3')
# list_buckets രീതി വിളിക്കുക
response = s3_client.list_buckets()
# ബക്കറ്റ് പേരുകൾ പ്രിന്റ് ചെയ്യുക
print('നിലവിലുള്ള ബക്കറ്റുകൾ:')
for bucket in response['Buckets']:
print(f' {bucket["Name"]}')
ബക്കറ്റ് പേരുകൾ ലഭിക്കാൻ നമ്മൾ `response` നിഘണ്ടു എങ്ങനെ പാഴ്സ് ചെയ്യണമെന്ന് ശ്രദ്ധിക്കുക.
റിസോഴ്സ് API: ഒരു ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് സമീപനം
AWS-മായി സംവദിക്കാൻ റിസോഴ്സുകൾ കൂടുതൽ 'Pythonic' മാർഗ്ഗം നൽകുന്നു. അവ ചില അടിസ്ഥാന നെറ്റ്വർക്ക് കോളുകൾ മറയ്ക്കുകയും വൃത്തിയുള്ളതും ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് ഇൻ്റർഫേസ് നൽകുകയും ചെയ്യുന്നു.
എപ്പോഴാണ് ഒരു റിസോഴ്സ് ഉപയോഗിക്കേണ്ടത്:
- കൂടുതൽ വായിക്കാവുന്നതും അവബോധജന്യവുമായ കോഡിനായി.
- AWS ഒബ്ജക്റ്റുകളിൽ സാധാരണ പ്രവർത്തനങ്ങൾ നടത്തുമ്പോൾ.
- നിങ്ങൾ ഒരു ഒബ്ജക്റ്റ്-ഓറിയൻ്റഡ് പ്രോഗ്രാമിംഗ് ശൈലി ഇഷ്ടപ്പെടുമ്പോൾ.
ഉദാഹരണം: ഒരു റിസോഴ്സ് ഉപയോഗിച്ച് S3 ബക്കറ്റുകൾ ലിസ്റ്റ് ചെയ്യുന്നു
import boto3
# ഒരു S3 റിസോഴ്സ് ഉണ്ടാക്കുക
s3_resource = boto3.resource('s3')
# എല്ലാ ബക്കറ്റ് ഒബ്ജക്റ്റുകളിലൂടെയും ആവർത്തിക്കുക
print('നിലവിലുള്ള ബക്കറ്റുകൾ:')
for bucket in s3_resource.buckets.all():
print(f' {bucket.name}')
ഈ കോഡ് കൂടുതൽ വൃത്തിയുള്ളതാണെന്ന് പറയാം. ഞങ്ങൾ നേരിട്ട് `bucket` ഒബ്ജക്റ്റുകളിലൂടെ ആവർത്തിക്കുകയും `.name` ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് അവയുടെ പേരുകൾ ആക്സസ് ചെയ്യുകയും ചെയ്യുന്നു.
ക്ലയിന്റ് vs. റിസോഴ്സ്: നിങ്ങൾ ഏതാണ് തിരഞ്ഞെടുക്കേണ്ടത്?
ഒരൊറ്റ ശരിയായ ഉത്തരമില്ല; ഇത് പലപ്പോഴും ടാസ്ക്കിനെയും വ്യക്തിപരമായ ഇഷ്ടത്തെയും ആശ്രയിച്ചിരിക്കുന്നു. ഒരു നല്ല തംബ് റൂൾ ഇതാ:
- റിസോഴ്സുകളിൽ നിന്ന് ആരംഭിക്കുക: സാധാരണ ടാസ്ക്കുകൾക്ക്, റിസോഴ്സ് API കൂടുതൽ വായിക്കാവുന്നതും പരിപാലിക്കാവുന്നതുമായ കോഡിലേക്ക് നയിക്കുന്നു.
- ശക്തിക്കായി ക്ലയിന്റുകളിലേക്ക് മാറുക: റിസോഴ്സ് API-ൽ ഒരു പ്രത്യേക API കോൾ ലഭ്യമല്ലെങ്കിൽ, അല്ലെങ്കിൽ പാരാമീറ്ററുകളിൽ വിശദമായ നിയന്ത്രണം ആവശ്യമുണ്ടെങ്കിൽ, ഒരു ക്ലയിന്റ് ഉപയോഗിക്കുക.
നിങ്ങൾക്ക് മിക്സ് ആൻഡ് മാച്ച് ചെയ്യാൻ പോലും കഴിയും. ഒരു റിസോഴ്സ് ഒബ്ജക്റ്റ് `meta` ആട്രിബ്യൂട്ട് വഴി അതിൻ്റെ അടിസ്ഥാന ക്ലയിന്റിലേക്ക് ആക്സസ് നൽകുന്നു (ഉദാഹരണത്തിന്, `s3_resource.meta.client`).
പ്രവർത്തനത്തിലുള്ള പ്രായോഗിക Boto3: പ്രധാന AWS സേവനങ്ങൾ ഓട്ടോമേറ്റ് ചെയ്യുന്നു
ലോകമെമ്പാടുമുള്ള ഓർഗനൈസേഷനുകൾ ഉപയോഗിക്കുന്ന ഏറ്റവും സാധാരണമായ ചില AWS സേവനങ്ങൾ ഓട്ടോമേറ്റ് ചെയ്തുകൊണ്ട് നമുക്ക് സിദ്ധാന്തം പ്രയോഗത്തിൽ വരുത്താം.
Amazon S3 (Simple Storage Service): ആഗോള ഡാറ്റാ ഹബ്
S3 എന്നത് വ്യവസായ പ്രമുഖ സ്കേലബിലിറ്റി, ഡാറ്റാ ലഭ്യത, സുരക്ഷ, പ്രകടനം എന്നിവ വാഗ്ദാനം ചെയ്യുന്ന ഒരു ഒബ്ജക്റ്റ് സ്റ്റോറേജ് സേവനമാണ്. ഇത് പലപ്പോഴും ആപ്ലിക്കേഷനുകൾക്കായുള്ള ഡാറ്റാ സ്റ്റോറേജിൻ്റെ നെടുംതൂണാണ്.
ഉദാഹരണം: ഒരു സമ്പൂർണ്ണ S3 വർക്ക്ഫ്ലോ
import boto3
import uuid # ഒരു തനതായ ബക്കറ്റ് പേര് ഉണ്ടാക്കാൻ
# ഉയർന്ന തലത്തിലുള്ള ഇൻ്റർഫേസിനായി S3 റിസോഴ്സ് ഉപയോഗിക്കുക
s3 = boto3.resource('s3')
# ബക്കറ്റ് ഉണ്ടാക്കുന്ന ഒരു റീജിയൻ തിരഞ്ഞെടുക്കുക
# ശ്രദ്ധിക്കുക: S3 ബക്കറ്റ് പേരുകൾ ആഗോളതലത്തിൽ തനതായിരിക്കണം!
region = 'us-east-1'
bucket_name = f'boto3-guide-unique-bucket-{uuid.uuid4()}'
file_name = 'hello.txt'
try:
# 1. ഒരു ബക്കറ്റ് ഉണ്ടാക്കുക
print(f'ബക്കറ്റ് ഉണ്ടാക്കുന്നു: {bucket_name}...')
s3.create_bucket(
Bucket=bucket_name,
CreateBucketConfiguration={'LocationConstraint': region}
)
print('ബക്കറ്റ് വിജയകരമായി ഉണ്ടാക്കി.')
# 2. ഒരു ഫയൽ അപ്ലോഡ് ചെയ്യുക
print(f'{file_name} {bucket_name}-ലേക്ക് അപ്ലോഡ് ചെയ്യുന്നു...')
bucket = s3.Bucket(bucket_name)
bucket.put_object(Key=file_name, Body=b'Hello, World from Boto3!')
print('ഫയൽ വിജയകരമായി അപ്ലോഡ് ചെയ്തു.')
# 3. ബക്കറ്റിലെ ഒബ്ജക്റ്റുകൾ ലിസ്റ്റ് ചെയ്യുക
print(f'{bucket_name}-ലെ ഒബ്ജക്റ്റുകൾ ലിസ്റ്റ് ചെയ്യുന്നു:')
for obj in bucket.objects.all():
print(f' - {obj.key}')
# 4. ഫയൽ ഡൗൺലോഡ് ചെയ്യുക
download_path = f'downloaded_{file_name}'
print(f'{file_name} {download_path}-ലേക്ക് ഡൗൺലോഡ് ചെയ്യുന്നു...')
bucket.download_file(file_name, download_path)
print('ഫയൽ വിജയകരമായി ഡൗൺലോഡ് ചെയ്തു.')
finally:
# 5. വൃത്തിയാക്കുക: ഒബ്ജക്റ്റുകൾ ഡിലീറ്റ് ചെയ്യുക, തുടർന്ന് ബക്കറ്റ്
print('റിസോഴ്സുകൾ വൃത്തിയാക്കുന്നു...')
bucket = s3.Bucket(bucket_name)
# ബക്കറ്റ് ഡിലീറ്റ് ചെയ്യുന്നതിന് മുമ്പ് എല്ലാ ഒബ്ജക്റ്റുകളും ഡിലീറ്റ് ചെയ്യേണ്ടത് പ്രധാനമാണ്
bucket.objects.all().delete()
bucket.delete()
print(f'ബക്കറ്റ് {bucket_name} അതിന്റെ ഉള്ളടക്കങ്ങളും ഡിലീറ്റ് ചെയ്തു.')
Amazon EC2 (Elastic Compute Cloud): വെർച്വൽ സെർവറുകൾ കൈകാര്യം ചെയ്യുന്നു
EC2 ക്ലൗഡിൽ സുരക്ഷിതവും വലുപ്പം മാറ്റാൻ കഴിയുന്നതുമായ കമ്പ്യൂട്ട് ശേഷി നൽകുന്നു. ഡെവലപ്പർമാർക്ക് വെബ്-സ്കെയിൽ ക്ലൗഡ് കമ്പ്യൂട്ടിംഗ് എളുപ്പമാക്കാൻ ഇത് രൂപകൽപ്പന ചെയ്തിട്ടുള്ളതാണ്.
ഉദാഹരണം: ഒരു EC2 ഇൻസ്റ്റൻസ് ലോഞ്ച് ചെയ്ത് കൈകാര്യം ചെയ്യുന്നു
import boto3
import time
# EC2 റിസോഴ്സ് ഉപയോഗിക്കുക
ec2 = boto3.resource('ec2', region_name='us-west-2')
# നിർദ്ദിഷ്ട റീജിയണിൽ അനുയോജ്യമായ ഒരു Amazon Linux 2 AMI കണ്ടെത്തുക
# ഏറ്റവും പുതിയ AMI ID ലഭിക്കുന്നതിന് ഒരു ക്ലയിന്റ് ഉപയോഗിക്കുന്നു
ec2_client = boto3.client('ec2', region_name='us-west-2')
filters = [
{'Name': 'name', 'Values': ['amzn2-ami-hvm-*-x86_64-gp2']},
{'Name': 'state', 'Values': ['available']}
]
images = ec2_client.describe_images(Owners=['amazon'], Filters=filters)
ami_id = images['Images'][0]['ImageId']
print(f'AMI ID ഉപയോഗിക്കുന്നു: {ami_id}')
# 1. ഒരു പുതിയ t2.micro ഇൻസ്റ്റൻസ് ലോഞ്ച് ചെയ്യുക (പലപ്പോഴും സൗജന്യ ടയറിൽ)
instance = ec2.create_instances(
ImageId=ami_id,
InstanceType='t2.micro',
MinCount=1,
MaxCount=1,
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [{'Key': 'Name', 'Value': 'Boto3-Guide-Instance'}]
}
]
)[0] # create_instances ഒരു ലിസ്റ്റ് നൽകുന്നു
print(f'ഇൻസ്റ്റൻസ് {instance.id} ലോഞ്ച് ചെയ്യുന്നു...')
# 2. ഇൻസ്റ്റൻസ് 'running' അവസ്ഥയിലാകുന്നതുവരെ കാത്തിരിക്കുക
instance.wait_until_running()
print(f'ഇൻസ്റ്റൻസ് {instance.id} ഇപ്പോൾ പ്രവർത്തിക്കുന്നു.')
# പബ്ലിക് IP വിലാസം ലഭിക്കുന്നതിന് ഇൻസ്റ്റൻസ് ആട്രിബ്യൂട്ടുകൾ വീണ്ടും ലോഡ് ചെയ്യുക
instance.reload()
print(f'പബ്ലിക് IP വിലാസം: {instance.public_ip_address}')
# 3. ഇൻസ്റ്റൻസ് നിർത്തുക
print(f'ഇൻസ്റ്റൻസ് {instance.id} നിർത്തുന്നു...')
instance.stop()
instance.wait_until_stopped()
print(f'ഇൻസ്റ്റൻസ് {instance.id} നിർത്തി.')
# 4. ഇൻസ്റ്റൻസ് അവസാനിപ്പിക്കുക (ഇത് ശാശ്വതമായി ഡിലീറ്റ് ചെയ്യുന്നു)
print(f'ഇൻസ്റ്റൻസ് {instance.id} അവസാനിപ്പിക്കുന്നു...')
instance.terminate()
instance.wait_until_terminated()
print(f'ഇൻസ്റ്റൻസ് {instance.id} അവസാനിപ്പിച്ചു.')
AWS Lambda: സെർവർലെസ് സംയോജനം
സെർവറുകൾProvision ചെയ്യാതെയും കൈകാര്യം ചെയ്യാതെയും കോഡ് പ്രവർത്തിപ്പിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ഒരു സെർവർലെസ് കമ്പ്യൂട്ട് സേവനമാണ് Lambda. നിങ്ങൾക്ക് 200-ൽ അധികം AWS സേവനങ്ങളിൽ നിന്ന് Lambda ഫംഗ്ഷനുകൾ ട്രിഗർ ചെയ്യാം അല്ലെങ്കിൽ ഏതെങ്കിലും വെബ് അല്ലെങ്കിൽ മൊബൈൽ ആപ്പിൽ നിന്ന് നേരിട്ട് വിളിക്കാം.
ഉദാഹരണം: ഒരു Lambda ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു
ആദ്യം, നിങ്ങളുടെ AWS അക്കൗണ്ടിൽ ഒരു Lambda ഫംഗ്ഷൻ ആവശ്യമാണ്. JSON പേലോഡ് എടുത്ത് പ്രോസസ്സ് ചെയ്ത് ഒരു ഫലം നൽകുന്ന `my-data-processor` എന്ന് പേരുള്ള ഒരു ലളിതമായ ഫംഗ്ഷൻ നിങ്ങൾക്കുണ്ടെന്ന് കരുതുക.
import boto3
import json
# Lambda ക്ലയിന്റ് ഉപയോഗിക്കുക
lambda_client = boto3.client('lambda', region_name='eu-central-1')
function_name = 'my-data-processor'
payload = {
'customer_id': '12345',
'transaction_amount': 99.99
}
try:
print(f'Lambda ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു: {function_name}')
response = lambda_client.invoke(
FunctionName=function_name,
InvocationType='RequestResponse', # സിൻക്രണസ് ഉപയോഗം
Payload=json.dumps(payload)
)
# പ്രതികരണ പേലോഡ് ഒരു സ്ട്രീമിംഗ് ബോഡിയാണ്, അതിനാൽ നമ്മൾ അത് വായിച്ച് ഡീകോഡ് ചെയ്യേണ്ടതുണ്ട്
response_payload = json.loads(response['Payload'].read().decode('utf-8'))
print('Lambda ഉപയോഗം വിജയകരം.')
print(f'സ്ഥിതി കോഡ്: {response["StatusCode"]}')
print(f'പ്രതികരണ പേലോഡ്: {response_payload}')
except lambda_client.exceptions.ResourceNotFoundException:
print(f'Error: Lambda ഫംഗ്ഷൻ {function_name} കണ്ടെത്തിയില്ല.')
except Exception as e:
print(f'ഒരു പിശക് സംഭവിച്ചു: {e}')
ശക്തമായ ആപ്ലിക്കേഷനുകൾക്കായുള്ള നൂതന Boto3 ആശയങ്ങൾ
അടിസ്ഥാനകാര്യങ്ങളിൽ നിങ്ങൾക്ക് സുഖകരമാകുമ്പോൾ, പ്രതിരോധശേഷിയുള്ളതും കാര്യക്ഷമവും സ്കേലബിളും ആയ ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ Boto3-യുടെ കൂടുതൽ നൂതനമായ സവിശേഷതകൾ നിങ്ങൾക്ക് ഉപയോഗിക്കാം.
പിശകുകളും ഒഴിവാക്കലുകളും മനോഹരമായി കൈകാര്യം ചെയ്യുന്നു
നെറ്റ്വർക്ക് പ്രശ്നങ്ങൾ, അനുമതി പിശകുകൾ അല്ലെങ്കിൽ നിലവിലില്ലാത്ത ഉറവിടങ്ങൾ എന്നിവ നിങ്ങളുടെ സ്ക്രിപ്റ്റ് പരാജയപ്പെടാൻ കാരണമാകും. ശക്തമായ കോഡ് ഈ പിശകുകൾ മുൻകൂട്ടി കാണുകയും കൈകാര്യം ചെയ്യുകയും ചെയ്യുന്നു. Boto3, സേവന-നിർദ്ദിഷ്ട പിശകുകൾക്കായി ഒഴിവാക്കലുകൾ ഉയർത്തുന്നു, സാധാരണയായി `botocore.exceptions.ClientError`-ൻ്റെ ഉപവിഭാഗങ്ങൾ.
നിങ്ങൾക്ക് ഈ ഒഴിവാക്കലുകൾ പിടിക്കാനും നിർദ്ദിഷ്ട പ്രശ്നം നിർണ്ണയിക്കാൻ പിശക് കോഡ് പരിശോധിക്കാനും കഴിയും.
import boto3
from botocore.exceptions import ClientError
s3_client = boto3.client('s3')
bucket_name = 'നിലവിലില്ലാത്ത-ഒരു-ബക്കറ്റ്-12345'
try:
s3_client.head_bucket(Bucket=bucket_name)
print(f'ബക്കറ്റ് "{bucket_name}" നിലവിലുണ്ട്.')
except ClientError as e:
# പ്രത്യേക '404 കണ്ടെത്തിയില്ല' എന്ന പിശക് കോഡിനായി പരിശോധിക്കുക
error_code = e.response['Error']['Code']
if error_code == '404':
print(f'ബക്കറ്റ് "{bucket_name}" നിലവിലില്ല.')
elif error_code == '403':
print(f'ആക്സസ് നിഷേധിച്ചു. ബക്കറ്റ് "{bucket_name}" ആക്സസ് ചെയ്യാൻ നിങ്ങൾക്ക് അനുമതിയില്ല.')
else:
print(f'പ്രതീക്ഷിക്കാത്ത ഒരു പിശക് സംഭവിച്ചു: {e}')
വെയിറ്റർമാർ: അസിൻക്രണസ് പ്രവർത്തനങ്ങൾ സമന്വയിപ്പിക്കുന്നു
ഒരു EC2 ഇൻസ്റ്റൻസ് അല്ലെങ്കിൽ ഒരു S3 ബക്കറ്റ് ഉണ്ടാക്കുന്നത് പോലുള്ള പല AWS പ്രവർത്തനങ്ങളും അസിൻക്രണസ് ആണ്. API കോൾ ഉടൻ മടങ്ങിവരും, എന്നാൽ ഉറവിടം ആവശ്യമുള്ള അവസ്ഥയിലെത്താൻ സമയമെടുക്കും. കോംപ്ലക്സ് പോളിംഗ് ലൂപ്പുകൾ എഴുതുന്നതിനുപകരം, നിങ്ങൾക്ക് Boto3-യുടെ അന്തർനിർമ്മിതമായ 'വെയിറ്റർമാർ' ഉപയോഗിക്കാം.
ഒരു വെയിറ്റർ ഒരു നിശ്ചിത അവസ്ഥയിലെത്തുന്നതുവരെ അല്ലെങ്കിൽ സമയം കഴിയുന്നതുവരെ നിശ്ചിത ഇടവേളകളിൽ ഉറവിടത്തിൻ്റെ നില പരിശോധിക്കും.
# ഇത് EC2 ഉദാഹരണത്തിൽ ഇതിനകം തന്നെ കാണിച്ചിട്ടുണ്ട്:
# ഇൻസ്റ്റൻസ് പ്രവർത്തിക്കുന്നതിനുള്ള വെയിറ്റർ
instance.wait_until_running()
# S3 ബക്കറ്റ് നിലവിലുണ്ടെന്ന് ഉറപ്പാക്കുന്നതിനുള്ള വെയിറ്റർ
s3_client = boto3.client('s3')
waiter = s3_client.get_waiter('bucket_exists')
waiter.wait(Bucket='എൻ്റെ-പുതുതായി-ഉണ്ടാക്കിയ-ബക്കറ്റ്')
print('ബക്കറ്റ് ഇപ്പോൾ ഉപയോഗിക്കാൻ തയ്യാറാണ്.')
പേജിനേറ്റർമാർ: വലിയ ഡാറ്റാസെറ്റുകൾ കാര്യക്ഷമമായി കൈകാര്യം ചെയ്യുന്നു
വലിയ അളവിൽ ഇനങ്ങൾ (ഒരു S3 ബക്കറ്റിലെ എല്ലാ ഒബ്ജക്റ്റുകളും അല്ലെങ്കിൽ എല്ലാ IAM ഉപയോക്താക്കളെയും ലിസ്റ്റ് ചെയ്യുന്നത് പോലെ) നൽകാൻ കഴിയുന്ന API കോളുകൾ പലപ്പോഴും പേജിനേറ്റ് ചെയ്യപ്പെടുന്നു. ഇതിനർത്ഥം നിങ്ങൾക്ക് ഫലങ്ങളുടെ ഒരു 'പേജ്', അടുത്ത പേജ് അഭ്യർത്ഥിക്കുന്നതിനുള്ള ഒരു 'ടോക്കൺ' എന്നിവ ലഭിക്കുമെന്നാണ്. ഈ ടോക്കൺ സ്വമേധയാ കൈകാര്യം ചെയ്യുന്നത് ബുദ്ധിമുട്ടാണ്.
നിങ്ങൾക്കായി ടോക്കൺ ലോജിക് കൈകാര്യം ചെയ്തുകൊണ്ട് പേജിനേറ്റർമാർ ഈ പ്രക്രിയ ലളിതമാക്കുന്നു, ഇത് എല്ലാ ഫലങ്ങളിലും തടസ്സമില്ലാതെ ആവർത്തിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
import boto3
s3_client = boto3.client('s3')
# ഒരു പേജിനേറ്റർ ഉണ്ടാക്കുക
paginator = s3_client.get_paginator('list_objects_v2')
# എല്ലാ പേജുകൾക്കുമായി ഒരു ഇറ്ററബിൾ ഒബ്ജക്റ്റ് നേടുക
pages = paginator.paginate(Bucket='വളരെ-വലിയ-ഒരു-ബക്കറ്റ്')
object_count = 0
for page in pages:
if 'Contents' in page:
for obj in page['Contents']:
# print(obj['Key'])
object_count += 1
print(f'ആകെ കണ്ടെത്തിയ ഒബ്ജക്റ്റുകൾ: {object_count}')
ആഗോള Boto3 വികസനത്തിനുള്ള മികച്ച രീതികൾ
ഫങ്ഷണൽ കോഡ് എഴുതുന്നത് ഒരു കാര്യമാണ്; സുരക്ഷിതവും പരിപാലിക്കാവുന്നതും ചെലവ് കുറഞ്ഞതുമായ കോഡ് എഴുതുന്നത് മറ്റൊന്നാണ്. മികച്ച രീതികൾ പാലിക്കുന്നത് നിർണായകമാണ്, പ്രത്യേകിച്ചും ആഗോള ആപ്ലിക്കേഷനുകളിൽ പ്രവർത്തിക്കുന്ന ടീമുകൾക്ക്.
സുരക്ഷ
- ക്രെഡൻഷ്യലുകൾ ഒരിക്കലും ഹാർഡ്കോഡ് ചെയ്യരുത്: ഇത് എത്ര പറഞ്ഞാലും മതിയാവില്ല. EC2, Lambda പോലുള്ള സേവനങ്ങൾക്കായി IAM റോളുകൾ ഉപയോഗിക്കുക, ഇത് താൽക്കാലികവും സ്വയമേവ റൊട്ടേറ്റ് ചെയ്യുന്നതുമായ ക്രെഡൻഷ്യലുകൾ നൽകുന്നു. പ്രാദേശിക വികസനത്തിന്, AWS CLI വഴി കോൺഫിഗർ ചെയ്ത `~/.aws/credentials` ഫയൽ ഉപയോഗിക്കുക.
- കുറഞ്ഞ പ്രത്യേകാവകാശത്തിൻ്റെ തത്വം ഉപയോഗിക്കുക: നിങ്ങളുടെ സ്ക്രിപ്റ്റ് ഉപയോഗിക്കുന്ന IAM ഉപയോക്താവിനോ റോളിനോ അത് നടത്താൻ ആവശ്യമുള്ള പ്രവർത്തനങ്ങൾക്ക് മാത്രം അനുമതി ഉണ്ടായിരിക്കണം. ഉദാഹരണത്തിന്, ഒരു S3 ബക്കറ്റിൽ നിന്ന് വായിക്കാൻ മാത്രമുള്ള ഒരു സ്ക്രിപ്റ്റിന് `s3:PutObject` അല്ലെങ്കിൽ `s3:DeleteObject` അനുമതികൾ ഉണ്ടാകരുത്.
പ്രകടനം
- ക്ലയിന്റ്/റിസോഴ്സ് ഒബ്ജക്റ്റുകൾ വീണ്ടും ഉപയോഗിക്കുക: ഒരു Boto3 ക്ലയിന്റ് അല്ലെങ്കിൽ റിസോഴ്സ് ഒബ്ജക്റ്റ് ഉണ്ടാക്കുന്നതിൽ കുറച്ച് ഓവർഹെഡ് ഉൾപ്പെടുന്നു. ദീർഘകാലം പ്രവർത്തിക്കുന്ന ആപ്ലിക്കേഷനുകളിലോ Lambda ഫംഗ്ഷനുകളിലോ, ഒബ്ജക്റ്റ് ഒരുതവണ ഉണ്ടാക്കി ഒന്നിലധികം കോളുകളിൽ വീണ്ടും ഉപയോഗിക്കുക.
- പ്രാദേശിക ലേറ്റൻസി മനസ്സിലാക്കുക: സാധ്യമാകുമ്പോഴെല്ലാം, നിങ്ങൾ സംവദിക്കുന്ന അതേ AWS റീജിയണിൽ നിങ്ങളുടെ Boto3 സ്ക്രിപ്റ്റുകൾ പ്രവർത്തിപ്പിക്കുക. ഉദാഹരണത്തിന്, `eu-west-1`-ലെ മറ്റ് ഉറവിടങ്ങൾ കൈകാര്യം ചെയ്യാൻ നിങ്ങളുടെ കോഡ് `eu-west-1`-ലെ ഒരു EC2 ഇൻസ്റ്റൻസിൽ പ്രവർത്തിപ്പിക്കുക. ഇത് നെറ്റ്വർക്ക് ലേറ്റൻസി ഗണ്യമായി കുറയ്ക്കുന്നു.
കോഡിന്റെ ഗുണനിലവാരവും പരിപാലനക്ഷമതയും
- Boto3 കോളുകൾ അമൂർത്തമാക്കുക: നിങ്ങളുടെ കോഡ്ബേസിൽ Boto3 കോളുകൾ ചിതറിക്കിടക്കാതെ സൂക്ഷിക്കുക. അവയെ നിങ്ങളുടെ സ്വന്തം ഫംഗ്ഷനുകളിലോ ക്ലാസുകളിലോ പൊതിയുക (ഉദാഹരണത്തിന്, ഒരു `S3Manager` ക്ലാസ്). ഇത് നിങ്ങളുടെ കോഡ് വായിക്കാനും പരിശോധിക്കാനും പരിപാലിക്കാനും എളുപ്പമാക്കുന്നു.
- ലോഗിംഗ് ഉപയോഗിക്കുക: `print()` സ്റ്റേറ്റ്മെന്റുകൾക്ക് പകരം, Python-ൻ്റെ `logging` മൊഡ്യൂൾ ഉപയോഗിക്കുക. ഇത് വെർബോസിറ്റി നിയന്ത്രിക്കാനും ഫയലുകളിലേക്കോ ലോഗിംഗ് സേവനങ്ങളിലേക്കോ ഔട്ട്പുട്ട് നയിക്കാനും നിങ്ങളെ അനുവദിക്കുന്നു, ഇത് പ്രൊഡക്ഷൻ ആപ്ലിക്കേഷനുകൾ ഡീബഗ് ചെയ്യുന്നതിന് അത്യാവശ്യമാണ്.
ചെലവ് മാനേജ്മെന്റ്
- API ചെലവുകളെക്കുറിച്ച് ബോധവാനായിരിക്കുക: പല API കോളുകളും സൗജന്യമാണെങ്കിലും, ചിലതിന്, പ്രത്യേകിച്ചും ഉയർന്ന അളവിലുള്ള `List` അല്ലെങ്കിൽ `Get` അഭ്യർത്ഥനകൾക്ക് ചെലവ് വരും. നിങ്ങൾ ഉപയോഗിക്കുന്ന സേവനങ്ങളുടെ AWS വിലനിർണ്ണയ മോഡലിനെക്കുറിച്ച് ബോധവാനായിരിക്കുക.
- ഉറവിടങ്ങൾ വൃത്തിയാക്കുക: വികസനത്തിലും പരിശോധനയിലും ഉണ്ടാക്കിയ ഉറവിടങ്ങൾ എപ്പോഴും അവസാനിപ്പിക്കുക അല്ലെങ്കിൽ ഡിലീറ്റ് ചെയ്യുക. മുകളിലുള്ള EC2, S3 ഉദാഹരണങ്ങളിൽ ക്ലീനപ്പ് ഘട്ടങ്ങൾ ഉൾപ്പെടുന്നു. ക്ലീനപ്പ് ഓട്ടോമേറ്റ് ചെയ്യുന്നത് Boto3-ക്കുള്ള മികച്ച ഉപയോഗമാണ്!
ഉപസംഹാരം: ക്ലൗഡ് പ്രാവീണ്യത്തിലേക്കുള്ള നിങ്ങളുടെ യാത്ര
Boto3 ഒരു ലൈബ്രറി മാത്രമല്ല; ഇത് AWS ഇക്കോസിസ്റ്റത്തിന് പ്രോഗ്രമാറ്റിക്കായി നിയന്ത്രിക്കാനുള്ള ഒരു കവാടമാണ്. അതിൻ്റെ പ്രധാന ആശയങ്ങൾ - ക്ലയിന്റുകളും റിസോഴ്സുകളും, പിശക് കൈകാര്യം ചെയ്യൽ, വെയിറ്റർമാർ, പേജിനേറ്റർമാർ - എന്നിവയിൽ പ്രാവീണ്യം നേടുന്നതിലൂടെ, ഇൻഫ്രാസ്ട്രക്ചർ ഓട്ടോമേറ്റ് ചെയ്യാനും ഡാറ്റാ കൈകാര്യം ചെയ്യാനും ആപ്ലിക്കേഷനുകൾ വിന്യസിക്കാനും വലിയ തോതിലുള്ള സുരക്ഷ നടപ്പിലാക്കാനും നിങ്ങൾക്ക് കഴിയും.
ഈ യാത്ര ഇവിടെ അവസാനിക്കുന്നില്ല. ഈ ഗൈഡിൽ ചർച്ച ചെയ്ത തത്വങ്ങളും പാറ്റേണുകളും RDS ഉപയോഗിച്ചുള്ള ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് മുതൽ SageMaker ഉപയോഗിച്ചുള്ള മെഷീൻ ലേണിംഗ് വരെ Boto3 പിന്തുണയ്ക്കുന്ന നൂറുകണക്കിന് മറ്റ് AWS സേവനങ്ങൾക്ക് ബാധകമാണ്. ഓരോ സേവനത്തിനുമുള്ള പ്രത്യേക പ്രവർത്തനങ്ങൾ പര്യവേക്ഷണം ചെയ്യുന്നതിനുള്ള മികച്ച ഉറവിടമാണ് ഔദ്യോഗിക Boto3 ഡോക്യുമെൻ്റേഷൻ.
Boto3 നിങ്ങളുടെ വർക്ക്ഫ്ലോയിൽ സംയോജിപ്പിക്കുന്നതിലൂടെ, നിങ്ങൾ ഇൻഫ്രാസ്ട്രക്ചർ ആസ് കോഡിൻ്റെ പരിശീലനം സ്വീകരിക്കുകയും ലോകത്തിലെ മുൻനിര ക്ലൗഡ് പ്ലാറ്റ്ഫോമിൽ കൂടുതൽ ശക്തവും സ്കേലബിളും കാര്യക്ഷമവുമായ പരിഹാരങ്ങൾ നിർമ്മിക്കാൻ നിങ്ങളെയും നിങ്ങളുടെ ടീമിനെയും സഹായിക്കുകയും ചെയ്യുന്നു. സന്തോഷകരമായ കോഡിംഗ്!