# നിങ്ങളുടെ അപ്ലിക്കേഷൻ ലോജിക്ക് ക്ലൗഡിലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുക ![ഈ പാഠത്തിന്റെ ഒരു സ്കെച്ച്നോട്ട് അവലോകനം](../../../../../translated_images/ml/lesson-9.dfe99c8e891f48e1.webp) > സ്കെച്ച്നോട്ട് [Nitya Narasimhan](https://github.com/nitya)യിൽ നിന്നുള്ളതാണ്. വലിയ പതിപ്പ് കാണാൻ ചിത്രത്തിൽ ക്ലിക്ക് ചെയ്യുക. ഈ പാഠം [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) യിൽ നിന്നുള്ള [IoT for Beginners Project 2 - Digital Agriculture സീരിസ്](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) എന്ന പ്രൊജക്റ്റിന്റെ ഭാഗമായി പഠിപ്പിച്ചു. [![സർവർലെസ് കോഡ് ഉപയോഗിച്ച് നിങ്ങളുടെ IoT ഉപകരണം നിയന്ത്രിക്കുക](https://img.youtube.com/vi/VVZDcs5u1_I/0.jpg)](https://youtu.be/VVZDcs5u1_I) ## പ്രീ-ലെക്ചർ ക്വിസ് [പ്രീ-ലെക്ചർ ക്വിസ്](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/17) ## പരിചയം കഴിഞ്ഞ പാഠത്തിൽ, നിങ്ങളുടെ പ്ലാന്റ് സോയിലു മോയിസ്റ്റർ മോൺട്ടറിംഗ് 及 റീലേ കൺട്രോള്‍ ക്ലൗഡ്-അടിസ്ഥിതമായ IoT സേവനവുമായി എങ്ങനെ കണക്ട് ചെയ്യാമെന്ന് പഠിച്ചിരിക്കുന്നു. അടുത്ത ചുവട് റീലേയുടെ ടൈമിംഗ് നിയന്ത്രിക്കുന്ന സർവർ കോഡ് ക്ലൗഡിലേക്ക് മാറ്റുകയാണ്. ഈ പാഠത്തിൽ നിങ്ങൾക്ക് സർവർലെസ് ഫങ്ഷനുകൾ ഉപയോഗിച്ച് ഇത് എങ്ങനെ ചെയ്യാമെന്ന് പഠിക്കാം. ഈ പാഠത്തിൽ നമ്മൾ വായിക്കാം: * [സർവർലെസ് എന്താണ്?](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) * [ഒരു സർവർലെസ് അപ്ലിക്കേഷൻ സൃഷ്ടിക്കുക](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) * [IoT ഹബ് ഇവന്റ് ട്രിഗ്ഗർ സൃഷ്ടിക്കുക](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) * [സർവർലെസ് കോഡിൽ നിന്ന് ഡയറക്ട് മെതഡ് അഭ്യർത്ഥനകൾ അയക്കുക](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) * [നിങ്ങളുടെ സർവർലെസ് കോഡ് ക്ലൗഡിലേക്ക് ഡിപ്ലോയുചെയ്യുക](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) ## സർവർലെസ് എന്താണ്? സർവർലെസ് അല്ലെങ്കിൽ സർവർലെസ് കംപ്യൂട്ടിംഗ്, വ്യത്യസ്ത തരത്തിലുള്ള ഇവന്റുകൾക്ക് പ്രതികരിച്ച് ക്ലൗഡില്‍ പ്രവർത്തിക്കുന്ന ചെറിയ കോഡ് ബ്ലോകുകൾ സൃഷ്ടിക്കുകയാണ്. ഇവന്റ് ഉണ്ടാകുമ്പോൾ നിങ്ങളുടെ കോഡ് പ്രവർത്തിപ്പിച്ച്, അവരെക്കുറിച്ചുള്ള ഡാറ്റ ഫംഗ്ഷനിൽ പാസാക്കുന്നു. ഈ ഇവന്റ്‌കള്‍ വെബ് അഭ്യർത്ഥനകൾ, കൃത്യത്തിലാക്കപ്പെട്ട സന്ദേശങ്ങൾ, ഡാറ്റാബേസിലെ ഡാറ്റ മാറ്റങ്ങൾ, അല്ലെങ്കിൽ IoT ഉപകരണങ്ങൾ വഴി IoT സേവനത്തിലേക്ക് അയക്കപ്പെട്ട സന്ദേശങ്ങൾ എന്നിവയിൽ നിന്നാകാം. ![ഒരു IoT സേവനത്തിൽ നിന്നുള്ള ഇവന്റുകൾ സർവർലെസ് സേവനത്തിലേക്ക് അയച്ചുകൊടുക്കുമ്പോൾ, അവ ഒട്ട് സമയത്ത് പല ഫങ്ഷനുകളും പ്രവർത്തിപ്പിക്കുന്നു](../../../../../translated_images/ml/iot-messages-to-serverless.0194da1cc0732bb7.webp) > 💁 നിങ്ങള്‍ മുമ്പ് ഡാറ്റാബേസ് ട്രിഗ്ഗറുകൾ ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, ഇതിനെ അതേ പോലെ കരുതാം, ഏറ്റവും പുതിയ പരിചയപ്പെടുന്ന ഒരു ഇവന്റ് പോലെ ഒരു വരി inserir ചെയ്യലും കോഡ് ട്രിഗ്ഗർ ചെയ്യും. ![ഒട്ട് സമയത്ത് നിരവധി ഇവന്റുകൾ അയച്ചാൽ, സർവർലെസ് സേവനം അവയെല്ലാം ഒരേസമയം ഓടാൻ സ്കെയിൽ ചെയ്യുന്നു](../../../../../translated_images/ml/serverless-scaling.f8c769adf0413fd1.webp) നിങ്ങളുടെ കോഡ് ഇവന്റ് ഉണ്ടാകുമ്പോഴേ ഓടും, മറ്റുപോലുള്ള സമയങ്ങളിൽ നിങ്ങളുടെ കോഡ് ഓടാൻ ഒന്നും നിലനിർത്തുകയില്ല. ഇത്തരം മോഡൽ സർവർലെസ് വളരെ സ്കെയിലബിള്‍ ആക്കുന്നു - ഒരേസമയം നിരവധി ഇവന്റുകൾ ഉണ്ടാകുമ്പോൾ, ക്ലൗഡ് പ്രൊവൈഡർ നിങ്ങളുടെ ഫങ്ഷൻ എത്ര തവണ വേണമെങ്കിലും ഒരേസമയം ഓടിക്കാൻ സാദ്ധ്യമാണ്, അവരുടെ ആവശ്യാനുസരണം ലഭ്യമായ സെർവറുകളിൽ. ഇതിന്റെ ദോഷം എന്തെന്നാൽ ഇവന്റുകൾക്കിടയിൽ വിവരങ്ങൾ പങ്കിടേണ്ടി വന്നാൽ, അത് മെമ്മറിയിൽ സൂക്ഷിക്കുന്നതിനുപകരം ഡാറ്റാബേസിലോ മറ്റേതെങ്കിലും ഇടത്തേക്ക് സൂക്ഷിക്കണം. നിങ്ങളുടെ കോഡ് ഇവന്റ് വിവരങ്ങൾ ഒരു പാരാമീറ്ററായി സ്വീകരിക്കുന്ന ഫങ്ഷൻ രൂപത്തിൽ എഴുതുന്നു. ഈ സർവർലെസ് ഫങ്ഷനുകൾ എഴുതാൻ നാനാതരം പ്രോഗ്രാമിങ് ഭാഷകൾ ഉപയോഗിക്കാം. > 🎓 സർവർലെസ് "ഫങ്ഷന്‍സ് അസ എ സർവീസ്" (FaaS) എന്നും അറിയപ്പെടുന്നു, കാരണം ഓരോ ഇവന്റ് ട്രിഗ്ഗറും കോഡിലെ ഒരു ഫങ്ഷനായി നടപ്പിലാക്കുന്നു. പേര് തിരഞ്ഞെടുക്കുമ്പോൾ, സർവർലെസ് യഥാർത്ഥത്തിൽ സെർവറുകൾ ഉപയോഗിക്കുന്നു. പേര് നമുക്ക് സെർവർകൾ ആവശ്യമില്ല എന്ന് സൂചിപ്പിക്കുന്നുവെന്നും മനസ്സിലാക്കാം, പക്ഷേ ഒരു ഡെവലപ്പറായി നിങ്ങൾക്കു് കോഡ് ഓടിക്കുന്നതിന് ആവശ്യമായ സെർവർകൾ എങ്ങനെ നടത്താമെന്ന് അവതരിക്കേണ്ടതാണ്. ക്ലൗഡ് പ്രൊവൈഡറിന് ഒരു സർവർലെസ് *രൺടൈം* ഉണ്ട്, ഇത് സെർവർ, നെറ്റ്‌വർക്ക്, സ്റ്റോറേജ്, CPU, മെമ്മറി എന്നിവ കൈകാര്യം ചെയ്യുന്നു. ഈ മോഡൽ കാരണം നിങ്ങൾക്ക് സെർവർ അടിസ്ഥാനത്തിൽ പണം നൽകാനാകില്ല, കാരണം സെർവർ എവിടെ ഉപയോഗിക്കപ്പെടുന്നു എന്നാണ് പറയാൻ കഴിയാത്തത്. പകരം, നിങ്ങളുടെ കോഡ് ഓടുന്ന സമയം, ഉപയോഗിക്കുന്ന മെമ്മറിയുടെ അളവു എന്നിവയ്ക്ക് പണം നൽകും. > 💰 സർവർലെസ് ക്ലൗഡിൽ കോഡ് ഓടിക്കുന്നത് ഏറ്റവും കുറഞ്ഞ ചെലവുള്ള മാർഗമാണ്. ഉദാഹരണത്തിന്, എഴുതുകയാണ് ഈ സമയത്ത്, ഒരു ക്ലൗഡ് പ്രൊവൈഡർ നിങ്ങളുടെ എല്ലാ സർവർലെസ് ഫങ്ഷന്‍ 1,000,000 തവണ പോലും ചാർജ് ചെയ്യാതെ ഓടിക്കാൻ അനുവദിക്കുന്നു, അതിന് ശേഷം ഓരോ 1,000,000 എക്സിക്യൂഷന്‌സിനും US$0.20 ചാർജ് ചെലവായി ഈടാക്കുന്നു. നിങ്ങളുടെ കോഡ് ഓടാത്തപ്പോൾ നിങ്ങൾ പണം നൽകേണ്ടതില്ല. ഒരു IoT ഡെവലപ്പറായി സർവർലെസ് മോഡൽ അഭ്യുദയകരമാണ്. നിങ്ങളുടെ ക്ലൗഡിലേ പ്രധാനപ്പെട്ട IoT സേവനത്തിലേക്ക് കണക്ട് ചെയ്ത ഏതെല്ലാം IoT ഉപകരണങ്ങളിൽ നിന്നുമുള്ള സന്ദേശങ്ങൾക്കു ഉത്തരം നൽകുന്ന ഫങ്ഷൻ നിങ്ങൾ എഴുതാം. നിങ്ങളുടെ കോഡ് എല്ലാ സന്ദേശങ്ങളും കൈകാര്യം ചെയ്യും, എന്നാൽ അത് ആശ്രയമില്ലാതെ ആവശ്യമായപ്പോൾ മാത്രമേ പ്രവർത്തിക്കൂ. ✅ MQTT വഴി സന്ദേശങ്ങൾക്ക് ലിസൺ ചെയ്യുന്ന സർവർ കോഡ് നിങ്ങൾ എഴുതിയ കോഡ് തിയ്യതിക്ക് തിരിഞ്ഞു നോക്കുക. ഇത് ക്ലൗഡിൽ സർവർലെസ് ഉപയോഗിച്ച് എങ്ങനെ ഓടാമെന്ന് നിങ്ങൾക്കു തോന്നുന്നതിനിടയിൽ എന്തെന്ത് മാറ്റങ്ങൾ വരുത്തണം? > 💁 സർവർലെസ് മോഡൽ നിലവിൽ കോഡ് ഓടിക്കുന്നതിനു പുറമേ മറ്റ് ക്ലൗഡ് സേവനങ്ങളിലും വ്യാപിക്കുന്നു. ഉദാഹരണത്തിന്, സർവർലെസ് ഡാറ്റാബേസ് ക്ലൗഡിൽ ലഭ്യമാണ്, അത് സർവർലെസ് പ്രൈസിംഗ് മോഡൽ ഉപയോഗിക്കുന്നു, ഉദാഹരണത്തിന് കോറിയാം ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ ഇൻസേർട്ട് ചെയ്യുമ്പോൾ ആവശ്യമായ പ്രൈസ് അടയ്ക്കുന്നു, സാധാരണ ആവശ്യമായ പ്രവർത്തനങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് വില നിർണ്ണയം. ഉദാഹരണത്തിന് ഒരു പ്രൈമറി കീക്ക് എതിരെ സിംഗിൾ സെലക്ട് നടത്തുന്നത്, വിവിധ പട്ടികകൾ ജോയിനിങ് ചെയ്ത് ആയിരത്തിലധികം വരികൾ ലഭ്യമാക്കുന്ന സ്പീഷ്യൽ ഒഎപ്പറേഷൻ ഒന്നിനേക്കാൾ കുറവ് ചിലവാകും. ## ഒരു സർവർലെസ് അപ്ലിക്കേഷൻ സൃഷ്ടിക്കുക Microsoft-ന്റെ സർവർലെസ് കംപ്യൂട്ടിംഗ് സർവീസ് വളമയാണ് Azure Functions. ![Azure Functions ലോഗോ](../../../../../translated_images/ml/azure-functions-logo.1cfc8e3204c9c44a.webp) താഴെയുള്ള ചെറിയ വീഡിയോ Azure Functions-ന്റെ അവലോകനമാണ് [![Azure Functions അവലോകന വീഡിയോ](https://img.youtube.com/vi/8-jz5f_JyEQ/0.jpg)](https://www.youtube.com/watch?v=8-jz5f_JyEQ) > 🎥 വീഡിയോ കാണാൻ മുകളില്‍ ചിത്രത്തിൽ ക്ലിക്ക് ചെയ്യുക ✅ ഒന്ന് ക്ഷണം ചെയ്ത് Microsoft Azure Functions ഡോക്യുമെന്റേഷനിലാണ് [Azure Functions അവലോകനം](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn) വായിക്കുക. Azure Functions എഴുതാൻ, നിങ്ങളുടെ ഇഷ്ടഭാഷയിൽ ഒരു Azure Functions ആപ്പ് സൃഷ്ടിച്ച് തുടങ്ങുക. Azure Functions Python, JavaScript, TypeScript, C#, F#, Java, Powershell എന്നിവ പിന്തുണയ്ക്കുന്നു. ഈ പാഠത്തിൽ Python-ൽ Azure Functions ആപ്പ് എഴുതുന്നത് നിങ്ങൾക്ക് പഠിപ്പിക്കും. > 💁 Azure Functions കസ്റ്റം ഹാൻഡ്ലറുകളും പിന്തുണയ്ക്കുന്നു, അതുവഴി HTTP അഭ്യർത്ഥനകൾ പിന്തുണയ്ക്കുന്ന ഏതെങ്കിലും ഭാഷയിൽ ഫങ്ഷനുകൾ എഴുതാം, പഴയ ഭാഷകൾ പോലെ COBOL ഉൾപ്പെടെ. ഫങ്ഷൻസ് ആപ്പുകൾ ഒരോ അല്ലെങ്കിൽ അതിലധികം *ട്രിഗ്ഗറുകൾ* ആയി നിർമ്മിച്ചിരിക്കുന്നു - ഇവന്റ്‌കളെ പ്രതികരിക്കുന്ന ഫങ്ഷനുകൾ. ഒരേ ആപ്പിനുള്ളിൽ നിരവധി ട്രിഗ്ഗറുകൾ കൈകാര്യം ചെയ്യാം, അവ മാറ്റി വേർതിരിച്ച് കേവലം സഞ്ചാരത്തിലുള്ള കോൺഫിഗരേഷൻ പങ്കിടുന്നു. ഉദാഹരണത്തിന്, Functions ആപ്പിന്റെ കോൺഫിഗരേഷൻ ഫയലിൽ നിങ്ങളുടെ IoT ഹബ് കണക്ഷൻ വിശദീകരണങ്ങൾ ഉണ്ടാകാം, ആപ് ഉള്ള എല്ലാ ഫങ്ഷനുകൾ ഇവ ഉപയോഗിച്ച് കണക്ട് ചെയ്ത് ഇവന്റുകൾ കേൾക്കാൻ കഴിയുന്നു. ### ടാസ്‌ക്ക് - Azure Functions ടൂളിംഗ് ഇൻസ്റ്റാൾ ചെയ്യുക > എഴുതുന്ന സമയത്ത് Azure Functions കോഡ് ടൂളുകൾ Apple Silicon-ൽ Python പ്രോജക്റ്റിന് പൂർത്തിയായി പ്രവർത്തിക്കുന്നില്ല. Intel-അടിസ്ഥാനമുള്ള Mac, Windows PC അല്ലെങ്കിൽ Linux PC ഉപയോഗിക്കേണ്ടതാണ്. Azure Functions ന്റെ ഒരു മികച്ച സവിശേഷത ഇത് ലോക്കലായി ഓടിക്കാൻ കഴിയുന്നതാണ്. ക്ലൗഡിൽ ഉപയോഗിക്കുന്ന അതേ രൺടൈം നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ഓടിപ്പോകുന്നു, ഇതിലൂടെ IoT സന്ദേശങ്ങൾക്കു് സഹായം പറഞ്ഞ് കോഡ് എഴുതാനും അവ ലോക്കലായി ഓടിക്കാനും കഴിയും. നിങ്ങൾക്ക് കോഡ് ഡിബഗ് ചെയ്യാനും സാധിക്കും. നിങ്ങളുടെ കോഡ് സ്വീകാര്യമാകുമ്പോൾ, അത് ക്ലൗഡിലേക്ക് ഡിപ്ലോയുചെയ്യേണ്ടതാണ്. Azure Functions ടൂളിംഗ് CLI രൂപത്തിലാണ്, Azure Functions Core Tools എന്ന് അറിയപ്പെടുന്നു. 1. [Azure Functions Core Tools ഡോക്യുമെന്റേഷൻ](https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=academic-17441-jabenn) അനുസരിച്ച് Azure Functions കോർ ടൂൾസ് ഇൻസ്റ്റാൾ ചെയ്യുക 1. VS Code-ന് Azure Functions എക്സ്റ്റൻഷൻ ഇൻസ്റ്റാൾ ചെയ്യുക. ഈ എക്സ്റ്റൻഷൻ Azure Functions സൃഷ്ടിക്കൽ, ഡിബഗിംഗ്, ഡിപ്ലോയ്മെന്റ് എന്നിവയ്ക്ക് പിന്തുണ നൽകുന്നു. VS Code ല്‍ ഈ എക്സ്റ്റൻഷൻ ഇന്സ്റ്റാൾ ചെയ്യുന്നതിന് [Azure Functions എക്സ്റ്റൻഷൻ ഡോക്യുമെന്റേഷൻ](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-azuretools.vscode-azurefunctions) കാണുക. നിങ്ങളുടെ Azure Functions ആപ്പ് ക്ലൗഡിലേക്ക് ഡിപ്ലോയ് ചെയ്യുമ്പോൾ, ആപ്പ് ഫയലുകളും ലോഗ് ഫയലുകളും സ്റ്റോർ ചെയ്യാൻ ചെറിയ അവകാശം ക്ലൗഡ് സ്റ്റോറേജ് ആവശ്യമാണ്. Functions ആപ്പ് ലോക്കലായി ഓടുമ്പോൾ നിങ്ങൾക്ക് ക്ലൗഡ് സ്റ്റോറേജുമായി കണക്ട് ചെയ്യേണ്ടതുണ്ട്, എന്നാൽ യഥാർത്ഥ ക്ലൗഡ് സ്റ്റോറേജ് ഉപയോഗിക്കാതെ [Azurite](https://github.com/Azure/Azurite) എന്ന സ്റ്റോറേജ് എംമുലേറ്റർ ഉപയോഗിച്ച് പ്രവർത്തിക്കാം. ഇത് ലോക്കലായി ഓടുന്നു പക്ഷേ ക്ലൗഡ് സ്റ്റോറേജിനെ പോലെ പ്രവർത്തിക്കുന്നു. > 🎓 Azure-യിൽ Azure Functions ഉപയോഗിക്കുന്ന സ്റ്റോറേജ് ഒരു Azure Storage അക്കൗണ്ടാണ്. ഈ അക്കൗണ്ട് ഫയലുകൾ, ബ്ളോബുകൾ, പട്ടികകളിലുള്ള ഡാറ്റ അല്ലെങ്കിൽ ക്യൂകളിലുള്ള ഡാറ്റ സംഭരിച്ചു നില്ക്കാൻ കഴിയും. ഒന്നേ സ്റ്റോറേജ് അക്കൗണ്ട് പല ആപ്പുകൾക്കായി പങ്കിടാം, ഉദാഹരണത്തിന് Functions ആപ്പ് മുകളിലോ വെബ് ആപ്പുമായോ. 1. Azurite ഒരു Node.js ആപ് ആണ്, അതിനാൽ നിങ്ങൾക്ക് ആദ്യം Node.js ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. [Node.js വെബ്സൈറ്റ്](https://nodejs.org/) നിൽകുന്ന ഡൗൺലോഡും ഇൻസ്റ്റലും വിവരണങ്ങൾ കാണാം. മാക് ഉപയോഗിക്കുന്നവർക്ക് [Homebrew](https://formulae.brew.sh/formula/node) വഴി ഇൻസ്റ്റാൾ ചെയ്യുക സാധിക്കും. 1. താഴെയുള്ള കമാൻഡ് ഉപയോഗിച്ച് Azurite ഇൻസ്റ്റാൾ ചെയ്യുക (`npm` Node.js ഇൻസ്റ്റാളേഷൻ സമയത്ത് ഇൻസ്റ്റാൾചെയ്ത ഒരു ടൂൾ ആണ്): ```sh npm install -g azurite ``` 1. Azurite ഉപയോഗിക്കുന്നതിന് ഡാറ്റ സംഭരിക്കാൻ 'azurite' എന്ന ഫോൾഡർ സൃഷ്ടിക്കുക: ```sh mkdir azurite ``` 1. Azurite-നെ ഈ പുതിയ ഫോൾഡർ ഉപയോഗിച്ച് ഓടിക്കുക: ```sh azurite --location azurite ``` Azurite സ്റ്റോറേജ് എംമുലേറ്റർ ആരംഭിച്ച് ലോക്കൽ Functions രൺടൈം കണക്ട് ചെയ്യാൻ സജ്ജമാകും. ```output ➜ ~ azurite --location azurite Azurite Blob service is starting at http://127.0.0.1:10000 Azurite Blob service is successfully listening at http://127.0.0.1:10000 Azurite Queue service is starting at http://127.0.0.1:10001 Azurite Queue service is successfully listening at http://127.0.0.1:10001 Azurite Table service is starting at http://127.0.0.1:10002 Azurite Table service is successfully listening at http://127.0.0.1:10002 ``` ### ടാസ്‌ക്ക് - Azure Functions പ്രോജക്റ്റ് സൃഷ്ടിക്കുക Azure Functions CLI പുതിയ Functions ആപ്പ് സൃഷ്ടിക്കാൻ ഉപയോഗിക്കാം. 1. നിങ്ങളുടെ Functions ആപ്പിന് ഫോൾഡർ സൃഷ്ടിച്ച് അതിലേക്ക് പോവുക. പേരു 'soil-moisture-trigger' വെക്കുക ```sh mkdir soil-moisture-trigger cd soil-moisture-trigger ``` 1. ഈ ഫോൾഡറിനുള്ളിൽ ഒരു Python virtual environment സൃഷ്ടിക്കുക: ```sh python3 -m venv .venv ``` 1. ആ virtual environment ആക്ടിവേറ്റ് ചെയ്യുക: * Windows-ൽ: * നിങ്ങൾ Command Prompt അല്ലെങ്കിൽ Windows Terminal വഴി Command Prompt ഉപയോഗിക്കുന്നുവെങ്കിൽ താഴെയുള്ള കമാൻഡ് ഓടിക്കുക: ```cmd .venv\Scripts\activate.bat ``` * നിങ്ങൾ PowerShell ഉപയോഗിക്കുന്നെങ്കിൽ കമാൻഡ് ഓടിക്കുക: ```powershell .\.venv\Scripts\Activate.ps1 ``` * macOS അല്ലെങ്കിൽ Linux-ൽ കമാൻഡ് ഓടിക്കുക: ```cmd source ./.venv/bin/activate ``` > 💁 ഈ കമാൻഡുകൾ നിങ്ങളുടെ virtual environment സൃഷ്ടിച്ചത് ചെയ്തിട്ടുള്ളിടത്തുനിന്ന് ഓടിക്കാനാണ്. നിങ്ങൾക്ക് `.venv` ഫോൾഡർ തുറക്കേണ്ടതില്ല, virtual environment ആക്ടിവേറ്റ് ചെയ്യുന്ന കമാൻഡും പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യാനുള്ള കമാൻഡുകളും എല്ലാം നിങ്ങൾ virtual environment സൃഷ്ടിച്ച ഫോൾഡറുകളിൽ നിന്നുമാത്രം ഓടിക്കണം. 1. താഴെയുള്ള കമാൻഡ് ഉപയോഗിച്ച് Functions ആപ്പ് സൃഷ്ടിക്കുക: ```sh func init --worker-runtime python soil-moisture-trigger ``` ഇതോടെ നിലവിലെ ഫോൾഡറിന്റെ ഉള്ളിൽ മൂന്ന് ഫയലുകൾ സൃഷ്ടിക്കും: * `host.json` - Functions ആപ്പിനുള്ള സജ്ജീകരണങ്ങൾ ഉള്ള JSON ഡോക്യുമെന്റ്. നിങ്ങൾക്ക് ഇത് മാറ്റേണ്ടതില്ല. * `local.settings.json` - ലൊക്കലായി ഓടുമ്പോൾ ആപ്പ് ഉപയോഗിക്കുന്ന സജ്ജീകരണങ്ങൾ ഉള്ള JSON. ഉദാഹരണത്തിന്, IoT ഹബ് കണക്ഷൻ സ്ട്രിംഗുകള്‍. ഈ സജ്ജീകരണങ്ങൾ കൃത്യമായി സോഴ്സ് കോഡ് നിയന്ത്രണത്തിൽ ചേർക്കരുത്. ആപ്പ് ക്ലൗഡിലേക്ക് ഡിപ്ലോയുചെയ്യുമ്പോൾ ഈ സജ്ജീകരണങ്ങൾ ഉപയോഗിക്കില്ല, മറിച്ച് ആപ്ലിക്കേഷൻ സജ്ജീകരണങ്ങളിൽ നിന്നും ലോഡ് ചെയ്യും. ഇത് പാഠത്തിൽ പിന്നീട് വിശദീകരിക്കും. * `requirements.txt` - [Pip requirements ഫയൽ](https://pip.pypa.io/en/stable/user_guide/#requirements-files) ആണ്, Functions ആപ്പ് ഓടാൻ ആവശ്യമുള്ള പൈറ്റ് പാക്കേജുകൾ ഇതിൽ സൂക്ഷിക്കുന്നു. 1. Functions ആപ്പ് ഉപയോഗിക്കുന്ന സ്റ്റോറേജ് അക്കൗണ്ടിനുള്ള സജ്ജീകരണം `local.settings.json` -ൽ കാണാം. ഇത് നിലവില്‍ ശൂന്യമാണ്, അതിനാൽ സജ്ജീകരിക്കുക വേണം. Azurite ലൊക്കൽ സ്റ്റോറേജ് എംമുലേറ്ററുമായി ബന്ധിപ്പിക്കാൻ ഇതിന്റെ മൂല്യം താഴെപ്പറയുന്ന പോലെ സെറ്റ് ചെയ്യുക: ```json "AzureWebJobsStorage": "UseDevelopmentStorage=true", ``` 1. requirements ഫയൽ ഉപയോഗിച്ച് ആവശ്യമായ പൈപാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക: ```sh pip install -r requirements.txt ``` > 💁 ആവശ്യമായ പൈപ്പ് പാക്കേജുകൾ ഈ ഫയലിൽ ഉണ്ടാകണം, Functions ആപ്പ് ക്ലൗഡിലേക്ക് ഡിപ്ലോയിംഗിനുശേഷം, രൺടൈം ശരിയായ പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യുന്ന ഉറപ്പ് നൽകും. 1. എല്ലാം ശരിയായി പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കാൻ Functions രൺടൈം സ്റ്റാർട്ട് ചെയ്യുക. താഴെയുള്ള കമാൻഡ് ഓടിക്കുക: ```sh func start ``` രൺടൈം ആരംഭിച്ച് ജോബ് ഫങ്ഷനുകൾ ഒന്നുമില്ലെന്ന് (ട്രിഗ്ഗറുകൾ) റിപ്പോർട്ട് ചെയ്യും. ```output (.venv) ➜ soil-moisture-trigger func start Found Python version 3.9.1 (python3). Azure Functions Core Tools Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) Function Runtime Version: 3.0.15417.0 [2021-05-05T01:24:46.795Z] No job functions found. ``` > ⚠️ ഫയർവാൾ അറിയിപ്പുകൾ വന്നാൽ, `func` അപേക്ഷയ്ക്ക് നിങ്ങളുടെ നെറ്റ്വർക്കിൽ റീഡും റൈറ്റും അനുവദിക്കുക. > ⚠️ macOS ഉപയോഗിക്കുമ്പോൾ ഔട്ട്പുട്ടിൽ ചില മുന്നറിയിപ്പുകൾ കാണാമാകും: > > ```output > (.venv) ➜ soil-moisture-trigger func start > Found Python version 3.9.1 (python3). > > Azure Functions Core Tools > Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) > Function Runtime Version: 3.0.15417.0 > > [2021-06-16T08:18:28.315Z] Cannot create directory for shared memory usage: /dev/shm/AzureFunctions > [2021-06-16T08:18:28.316Z] System.IO.FileSystem: Access to the path '/dev/shm/AzureFunctions' is denied. Operation not permitted. > [2021-06-16T08:18:30.361Z] No job functions found. > ``` > > Functions ആപ്പ് ശരിയായി ആരംഭിച്ചും പ്രവർത്തിക്കുന്ന ഫങ്ഷനുകൾ കാണിച്ചും തുടങ്ങിയാൽ, ഇവ അവഗണിക്കാം. [Microsoft Docs Q&A](https://docs.microsoft.com/answers/questions/396617/azure-functions-core-tools-error-osx-devshmazurefu.html?WT.mc_id=academic-17441-jabenn) ലെ ചോദ്യത്തിൽ ഇത് വ്യക്തമാക്കിയിട്ടുണ്ട്. 1. Functions ആപ്പ് `ctrl+c` അമർത്തി നിർത്തുക. 1. നിലവിലെ ഫോൾഡർ VS Code ൽ തുറക്കുക, അതായത് ആദ്യം VS Code തുറന്നു പിന്നീട് ഫോൾഡർ ഓപ്പൺ ചെയ്യുകയോ അല്ലെങ്കിൽ താഴെ പറയുന്ന കമാൻഡ് ഓടിക്കുകയായിരുന്നു: ```sh code . ``` VS കോഡ് നിങ്ങളുടെ Functions പ്രോജക്ട് കണ്ടെത്തുകയും ഇതു പറയുന്ന ഒരു അറിയിപ്പ് കാണിക്കുകയും ചെയ്യും: ```output Detected an Azure Functions Project in folder "soil-moisture-trigger" that may have been created outside of VS Code. Initialize for optimal use with VS Code? ``` ![The notification](../../../../../translated_images/ml/vscode-azure-functions-init-notification.bd19b49229963edb.webp) ഈ അറിയിപ്പിൽ നിന്നു **Yes** തിരഞ്ഞെടുക്കുക. 1. VS കോഡ് ടെർമിനലിൽ Python വേർചിയത് പ്രവർത്തനക്ഷമമാണെന്ന് ഉറപ്പാക്കുക. ആവശ്യമെങ്കിൽ അത് ആപേക്ഷിച്ച് പുനരാരംഭിപ്പിക്കുക. ## ഒരു IoT ഹബ് ഇവന്റ് ട്രിഗർ സൃഷ്‌ടിക്കുക Functions എപ്പ് നിങ്ങളുടെ സർവറ്ലെസ് കോഡിന്റെ ഷെൽ ആണ്. IoT ഹബ് ഇവന്റുകൾക്ക് പ്രതികരിക്കാൻ, നിങ്ങൾ ഈ അപ്ലിക്കേഷനിൽ ഒരു IoT ഹബ് ട്രിഗർ ചേർക്കാനാകും. ഈ ട്രിഗർ IoT ഹബ്‌ക്ക് അയക്കുന്ന സന്ദേശങ്ങളുടെ സ്ട്രീമുമായി ബന്ധപ്പെടണം மற்றும் അവയ്ക്കു പ്രതികരിക്കണം. ഈ സന്ദേശ സ്ട്രീം കിട്ടാൻ, നിങ്ങളുടെ ട്രിഗർ IoT ഹബിന്റെ *event hub compatible endpoint* ലുമായി ബന്ധപ്പെടണം. IoT ഹബ് മറ്റൊരു Azure സേവനം ആയ Azure Event Hubs ആധാരമാക്കിയുള്ളതാണ്. Event Hubs ഒരു സന്ദേശങ്ങൾ അയയ്ക്കാനും സ്വീകരിക്കാനും അനുവദിക്കുന്ന സേവനമാണ്, IoT ഹബ് ഇത് വിപുലീകരിച്ച് IoT ഉപകരണങ്ങൾക്ക് ഫീച്ചറുകൾ ചേർക്കുന്നു. IoT ഹബ് സന്ദേശങ്ങൾ വായിക്കാനാണ് Event Hubs ഉപയോഗിക്കുന്നത് എന്നതുപോലെ ഈ ഹബിലേക്കും കൂടി നിങ്ങൾ ബന്ധപ്പെടുന്നു. ✅ ചില ഗവേഷണം ചെയ്യുക: [Azure Event Hubs ഡോക്യുമെന്റേഷനിൽ](https://docs.microsoft.com/azure/event-hubs/event-hubs-about?WT.mc_id=academic-17441-jabenn) Event Hubs സംഗ്രഹം വായിക്കുക. അടിസ്ഥാന ഫീച്ചറുകൾ IoT ഹബിന് എങ്ങനെ താരതമ്യം ചെയ്യുന്നു? ഒരു IoT ഉപകരണം IoT ഹബുമായി ബന്ധപ്പെടുന്നതിന്, അത് ഒരു രഹസ്യ കീ ഉപയോഗിക്കണം, ഇത് അനുവദിച്ച ഉപകരണങ്ങൾ മാത്രമേ ബന്ധപ്പെടാൻ പറ്റൂ എന്നാണ് ഉറപ്പാക്കുന്നത്. സന്ദേശങ്ങൾ വായിക്കാനാവശ്യമായ താരതമ്യം പരിഗണിക്കുമ്പോഴും ഇത് ബാധകമാണ്, നിങ്ങളുടെ കോഡിന് ഹബ് വിശദാംശങ്ങളോടൊപ്പം രഹസ്യ കീ അടങ്ങിയ ഒരു കണക്റ്റ് സ്‌ട്രിംഗ് ആവശ്യമാകും. > 💁 നിങ്ങൾക്ക് ലഭിക്കുന്ന ഡീഫോൾറ്റ് കണക്റ്റ് സ്‌ട്രിംഗിന് **iothubowner** അനുമതികളുണ്ട്, ഇത് അതുപയോഗിക്കുന്ന കോഡിന് IoT ഹബ് അ 롊ളുള്ള പൂർണ്ണ അനുമതികൾ നൽകുന്നു. അനുയോജ്യമായത് ആവശ്യമായ കുറഞ്ഞ അനുമതികളോടെ ബന്ധപ്പെടുക എന്നതാണ്. ഇത് അടുത്ത പാഠത്തിൽ ഉൾപ്പെടും. നിങ്ങളുടെ ട്രിഗർ ബന്ധപ്പെടുമ്പോൾ, ഫങ്ഷനിലെ കോഡ് ഓരോ സന്ദേശത്തിനും വിളിക്കപ്പെടും, ഏത് ഉപകരണം അയച്ചിരുന്നെങ്കിലും വേണ്ട. സന്ദേശം ട്രിഗർക്ക് പാരാമീറ്ററായി ലഭിക്കും. ### ടാസ്‌ക് - Event Hub compatible endpoint കണക്റ്റ് സ്‌ട്രിംഗ് നേടുക 1. VS കോഡ് ടെർമിനലിൽ താഴെ കാണിച്ച കമാൻഡ് നടത്തുക, IoT ഹബ് Event Hub compatible endpoint കണക്റ്റ് സ്‌ട്രിംഗ് പിടിക്കാൻ: ```sh az iot hub connection-string show --default-eventhub \ --output table \ --hub-name ``` `` പകരം നിങ്ങൾ ഉപയോഗിച്ച IoT ഹബ് നാമം നൽകുക. 1. VS കോഡിൽ `local.settings.json` ഫയൽ തുറക്കുക. `Values` വിഭാഗത്തിനുള്ളിൽ താഴെ കാണിച്ച മൂല്യം ചേർക്കുക: ```json "IOT_HUB_CONNECTION_STRING": "" ``` `` പകരം മുകളിൽ നിന്നുള്ള മൂല്യം ചേർക്കുക. ഇത് സാധുവായ JSON ആക്കാൻ മുൻവർഷ പകുതി ഒടുക്കം വരിയിൽ ഒരു കോമാ ചേർക്കണം. ### ടാസ്‌ക് - ഒരു ഇവന്റ് ട്രിഗർ സൃഷ്ടിക്കുക ഇപ്പോൾ ഇവന്റ് ട്രിഗർ സൃഷ്ടിക്കാൻ നിങ്ങൾ തയ്യാറാണ്. 1. VS കോഡ് ടെർമിനലിൽ `soil-moisture-trigger` ഫോൾഡറിനുള്ളിൽ നിന്ന് താഴെ കാണിച്ച കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: ```sh func new --name iot-hub-trigger --template "Azure Event Hub trigger" ``` ഇത് `iot-hub-trigger` എന്ന പുതിയ Function സൃഷ്ടിക്കും. ട്രിഗർ IoT ഹബ് Event Hub compatible endpointലേക്ക് കണക്റ്റ് ചെയ്യും, അതിനാൽ ഒരു event hub trigger ഉപയോഗിക്കാം. വ്യക്തമായ IoT ഹബ് ട്രിഗർ ഇല്ല. ഇത് `soil-moisture-trigger` ഫോൾഡറിനുള്ളിൽ `iot-hub-trigger` ഫോൾഡർ സൃഷ്ടിക്കും, ഈ ഫംഗ്ഷൻ അടങ്ങിയിട്ടുള്ളത്. ഇതിനുള്ളിൽ താഴെ കാണിച്ച ഫയലുകൾ ഉണ്ടാകും: * `__init__.py` - Python കോഡ് ഫയൽ ഈ ട്രിഗർ ചേര്‍ക്കുന്നതിന്; സാധാരണ Python ഫയൽനാമ പ്രയോഗം ഉപയോഗിച്ച് ഈ ഫോൾഡറെ Python മോഡ്യൂളായി മാറ്റുന്നു. ഈ ഫയലിൽ താഴെ കാണിക്കുന്ന കോഡ് അടങ്ങിയിരിക്കും: ```python import logging import azure.functions as func def main(event: func.EventHubEvent): logging.info('Python EventHub trigger processed an event: %s', event.get_body().decode('utf-8')) ``` ട്രിഗറിന്റെ പ്രധാന ഭാഗമാണ് `main` ഫങ്ഷൻ. IoT ഹബ്‌ഹിൽ നിന്നുള്ള ഇവന്റുകൾ ഇതിലൂടെ വിളിക്കപ്പെടുന്നു. ഈ ഫങ്ഷനിനു `event` എന്ന പാരാമീറ്റർ ഉണ്ട്, ഈ параметർ `EventHubEvent` ആണ്. ഓരോ സന്ദേശത്തിനും ഇത് IoT ഹബിലേക്കു അയച്ചറിയിക്കും, കഴിഞ്ഞ പാഠത്തിൽനിന്നും ഓർത്തുള്ള അനോട്ടേഷനുകളുമായി പൊരുത്തമുള്ള പ്രോപ്പർട്ടികളും. പ്രധാന ഭാഗം ഈ ഇവന്റ് ലോഗ് ചെയ്യുകയാണ്. * `function.json` - ട്രിഗറിന്റെ കോൺഫിഗറേഷൻ അടങ്ങിയ ഫയൽ. പ്രധാന കോൺഫിഗറേഷൻ `bindings` ഭാഗത്തിൽ ആണ്. ബൈൻഡിങ് Azure Functions മദ്യെയുള്ള ബന്ധത്തിന് ഉപയോഗിക്കുന്ന പദമാണ്. ഈ ഫങ്ഷനു ഒരു ഇൻപുട്ട് ബൈൻഡിങ് ഒരു event hub നോട് - അതിലൂടെ ഒരു event hub ൽ നിന്ന് ഡാറ്റ സ്വീകരിക്കുന്നു. > 💁 നിങ്ങൾക്ക് ഔട്ട്‌പുട്ട് ബൈൻഡിങുകളും ഉണ്ടാക്കാനാകും, അഥവാ ഫങ്ഷൻ ഔട്ട്‌പുട്ട് മറ്റൊരു സേവനത്തിലേക്ക് അയക്കാൻ. ഉദാഹരണത്തിന് ഡാറ്റാബേസിനു ഔട്ട്‌പുട്ട് ബൈൻഡിങ് ചേർക്കാം, IoT ഹബ് ഇവന്റ് ഫങ്ഷന് നിന്ന് തിരിച്ചു നൽകുക, അത് സ്വയം ഡാറ്റാബേസിൽ ചേർക്കും. ✅ കുറച്ച് പഠിക്കുക: [Azure Functions ട്രിഗറുകളും ബൈൻഡിംഗുകളും](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python) സംബന്ധിച്ച ഡോക്യുമെന്റേഷൻ വായിക്കുക. `bindings` ഭാഗം ബൈൻഡിങിന്റെ കോൺഫിഗറേഷൻ അടങ്ങുന്നു. താഴെപ്പെട്ട മൂല്യങ്ങളാണ് പ്രധാനപ്പെട്ടത്: * `"type": "eventHubTrigger"` - ഫങ്ഷനു event hub ഇവന്റുകൾ കേൾക്കണം എന്നത് അറിയിക്കുന്നു * `"name": "events"` - event hub ഇവന്റുകൾക്കുള്ള പാരാമീറ്റർ നാമം, Python കോഡിലെ `main` ഫങ്ഷനിലെ പാരാമീറ്ററുമായി പൊരുത്തപ്പെടുന്നു * `"direction": "in"` - ഇത് ഇൻപുട്ട് ബൈൻഡിങ് ആണ്, ഫങ്ഷനിലേക്ക് ഡാറ്റ Event Hub നിന്നു വരുന്നു * `"connection": ""` - കണക്‌എക്സൻ സ്ട്രിംഗ് വായിക്കാൻ ഉപയോഗിക്കുന്ന സജ്ജീകരണത്തിന്റെ പേര്. ലോക്കലി പ്രവർത്തനത്തിലായാൽ ഈ സജ്ജീകരണം `local.settings.json` ഫയലിൽ നിന്നു വായിക്കും. > 💁 `function.json` ഫയലിൽ കണക്‌എക്സൻ സ്ട്രിംഗ് സൂക്ഷിക്കാനാകില്ല, സജ്ജീകരണങ്ങളിൽ നിന്നു വായിക്കണം. ഇത് നിങ്ങളുടെ കണക്‌എക്സൻ സ്ട്രിംഗ് അനാവശ്യമായി പുറത്തുവിടുന്നതു തടയാൻ ആണ്. 1. [Azure Functions ടെംപ്ലേറ്റിൽ ഉണ്ടാകുന്ന ബഗ്](https://github.com/Azure/azure-functions-templates/issues/1250) കാരണം `function.json` ഫയലിലെ `cardinality` ഫീൽഡിന്റെ മൂല്യം തെറ്റാണ്. ഈ ഫീൽഡ് `many` ലുനിന്ന് `one` ആക്കുക: ```json "cardinality": "one", ``` 1. `function.json` ഫയലിൽ `"connection"` മൂല്യം, `local.settings.json`-ൽ നിങ്ങൾ ചേർത്ത പുതിയ മൂല്യത്തേക്കു അപ്ഡേറ്റ് ചെയ്യുക: ```json "connection": "IOT_HUB_CONNECTION_STRING", ``` > 💁 ഓർക്കുക - ഇത് സജ്ജീകരണത്തിന്റെ പേര് കാണിക്കും, യഥാർത്ഥ കണക്‌എക്സൻ സ്ട്രിംഗ് അല്ല. 1. കണക്‌എക്സൻ സ്ട്രിംഗ് `eventHubName` മൂല്യം ഉൾക്കൊള്ളുന്നതു കൊണ്ടു, `function.json`-ല് ഈ മൂല്യം ശൂന്യം ആക്കുക: ```json "eventHubName": "", ``` ### ടാസ്‌ക് - ഇവന്റ് ട്രിഗർ പ്രവർത്തിപ്പിക്കുക 1. IoT ഹബ് ഇവന്റ് നിരീക്ഷകൻ പ്രവർത്തിക്കുന്നില്ല എന്ന് ഉറപ്പാക്കുക. functions അപ്ലിക്കേഷൻ അവസരപ്രദമായ സമയത്ത് ഇത് പ്രവർത്തിക്കുന്നുണ്ടെങ്കിൽ, functions അപ്ലിക്കേഷൻ കണക്റ്റ് ചെയ്തു ഇവന്റ് ഉപയോഗിക്കാൻ കഴിയുകയില്ല. > 💁 നിരവധി അപ്ലിക്കേഷനുകൾ വ്യത്യസ്ത *consumer groups* ഉപയോഗിച്ച് IoT ഹബ് എണ്ഡ്പോയിന്റുകളോട് ബന്ധപ്പെടാം. ഇത് പിന്നീട് അടുത്ത പാഠത്തിൽ ഉൾപ്പെടും. 1. Functions അപ്ലിക്കേഷൻ പ്രവർത്തിപ്പിക്കാൻ VS കോഡ് ടെർമിനലിൽ താഴെ കാണുന്ന കമാൻഡ് നൽകുക ```sh func start ``` Functions അപ്ലിക്കേഷൻ ആരംഭിക്കും, `iot-hub-trigger` ഫങ്ഷൻ കണ്ടെത്തും. കഴിഞ്ഞ 1 ദിവസത്തിനുള്ളിൽ IoT ഹബിലേക്കു അയച്ചിരിക്കുന്ന ഏതെങ്കിലും ഇവന്റുകളും ഇത് പ്രോസസ്സാക്കി നിറത്തിൽ കാണിക്കും. ```output (.venv) ➜ soil-moisture-trigger func start Found Python version 3.9.1 (python3). Azure Functions Core Tools Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) Function Runtime Version: 3.0.15417.0 Functions: iot-hub-trigger: eventHubTrigger For detailed output, run func with --verbose flag. [2021-05-05T02:44:07.517Z] Worker process started and initialized. [2021-05-05T02:44:09.202Z] Executing 'Functions.iot-hub-trigger' (Reason='(null)', Id=802803a5-eae9-4401-a1f4-176631456ce4) [2021-05-05T02:44:09.205Z] Trigger Details: PartitionId: 0, Offset: 1011240-1011632, EnqueueTimeUtc: 2021-05-04T19:04:04.2030000Z-2021-05-04T19:04:04.3900000Z, SequenceNumber: 2546-2547, Count: 2 [2021-05-05T02:44:09.352Z] Python EventHub trigger processed an event: {"soil_moisture":628} [2021-05-05T02:44:09.354Z] Python EventHub trigger processed an event: {"soil_moisture":624} [2021-05-05T02:44:09.395Z] Executed 'Functions.iot-hub-trigger' (Succeeded, Id=802803a5-eae9-4401-a1f4-176631456ce4, Duration=245ms) ``` ഓരോ function വിളിപ്പോഴും ഫലപ്രദമായ `Executing 'Functions.iot-hub-trigger'` / `Executed 'Functions.iot-hub-trigger'` ലോഗുകൾ കാണും, അതിലൂടെ ഓരോ ഫങ്ഷൻ വിളിപ്പോഴും എത്ര സന്ദേശങ്ങൾ പ്രോസസ്സായി എന്നറിയാം. 1. നിങ്ങളുടെ IoT ഉപകരണം പ്രവർത്തനവിധേയമാണെന്ന് ഉറപ്പാക്കുക. Functions അപ്ലിക്കേഷനിൽ പുതിയ സോയിൽ മോയ്സ്ചർ സന്ദേശങ്ങൾ കാണാൻ സാധിക്കും. 1. Functions അപ്ലിക്കേഷൻ നിർത്തി പുനരാരംഭിക്കുക. പഴയ സന്ദേശങ്ങൾ വീണ്ടും പ്രോസസ്സാകുകയില്ല, പുതിയ സന്ദേശങ്ങൾ മാത്രം പ്രോസസ്സ് ചെയ്യും. > 💁 VS കോഡ് ഫങ്ഷനുകളുടെ ഡിബഗിംഗിനും പിന്തുണ നൽകുന്നു. ഓരോ കോഡ് വരിയുടെ തുടങ്ങിയ ഭാഗത്ത് ക്ലിക്ക് ചെയ്ത് ബ്രേക്ക്പോയിന്റ് സജ്ജീകരിക്കാം, അല്ലെങ്കിൽ കോഡ് ലൈൻ സെലക്റ്റ് ചെയ്ത് *Run -> Toggle breakpoint* തിരഞ്ഞെടുക്കാം, അല്ലെങ്കിൽ `F9` അമർത്താം. *Run -> Start debugging* തിരഞ്ഞെടുക്കുകയോ `F5` അമർത്തുകയോ *Run and debug* പെയിൻ-ൽ നിന്നും **Start debugging** ബട്ടൺ ക്ലിക്ക് ചെയ്യുകയോ ചെയ്ത് ഡിബഗർ തുടങ്ങാം. ഇതിലൂടെ പ്രോസസ്സ് ചെയ്യുന്ന ഇവന്റുകളുടെ വിശദാംശങ്ങൾ കാണാം. #### പ്രശ്ന പരിഹാരങ്ങൾ * താഴെ കാണുന്ന പിഴവ് വന്നാൽ: ```output The listener for function 'Functions.iot-hub-trigger' was unable to start. Microsoft.WindowsAzure.Storage: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused. ``` Azurite പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക, `local.settings.json`ിൽ `AzureWebJobsStorage` സജ്ജീകരണം `UseDevelopmentStorage=true` ആണെന്ന് പരിശോധിക്കുക. * താഴെ കാണുന്ന പിഴവ് വന്നാൽ: ```output System.Private.CoreLib: Exception while executing function: Functions.iot-hub-trigger. System.Private.CoreLib: Result: Failure Exception: AttributeError: 'list' object has no attribute 'get_body' ``` `function.json` ഫയലിലെ `cardinality` മൂല്യം `one` ആക്കിയെന്ന് ഉറപ്പാക്കുക. * താഴെ കാണുന്ന പിഴവ് വന്നാൽ: ```output Azure.Messaging.EventHubs: The path to an Event Hub may be specified as part of the connection string or as a separate value, but not both. Please verify that your connection string does not have the `EntityPath` token if you are passing an explicit Event Hub name. (Parameter 'connectionString'). ``` `function.json` ഫയലിലെ `eventHubName` മൂല്യം ശൂന്യം ആക്കിയെന്ന് ഉറപ്പാക്കുക. ## സർവറ്ലെസ് കോഡിൽ നിന്ന് നേരിട്ട് മെത്തഡ് അഭ്യർത്ഥനകൾ അയയ്ക്കുക ഇതുവരെ Functions അപ്ലിക്കേഷൻ Event Hub compatible endpoint ഉപയോഗിച്ച് IoT ഹബ് സന്ദേശങ്ങൾ കേൾക്കുന്നതിനായി പ്രവർത്തിച്ചിട്ടുണ്ട്. ഇപ്പോൾ IoT ഉപകരണത്തിലേക്ക് കമാൻഡുകൾ അയയ്ക്കേണ്ടതുണ്ട്. ഇത് Registry Manager വഴി മറ്റൊരു കണക്‌എക്ഷൻ ഉപയോഗിച്ച് ചെയ്യും. Registry Manager IoT ഹബിൽ രജിസ്റ്റർ ചെയ്ത ഉപകരണങ്ങൾ കാണാനും, ക്ലൗഡ് ടു ഡിവൈസ് സന്ദേശങ്ങൾ, ന്റെറെക്റ്റ് മെത്തഡുകൾ അല്ലെങ്കിൽ ഡിവൈസ് ട്വിൻ അപ്ഡേറ്റ് ചെയ്യാനും ഉപകരിക്കുന്നു. ഇതുപയോഗിച്ച് IoT ഉപകരണങ്ങൾ രജിസ്റ്റർ ചെയ്യാനും, അപ്ഡേറ്റു ചെയ്യാനും, നീക്കം ചെയ്‌യാനുമാകുന്നു. Registry Manager കണക്ട് ചെയ്യാൻ ഒരു കണക്‌എക്ഷൻ സ്ട്രിംഗ് ആവശ്യമുണ്ട്. ### ടാസ്‌ക് - Registry Manager കണക്റ്റ് സ്‌ട്രിംഗ് നേടുക 1. കണക്റ്റ് സ്‌ട്രിംഗ് നേടാൻ താഴെ കാണുന്ന കമാൻഡ് ഓടിക്കുക: ```sh az iot hub connection-string show --policy-name service \ --output table \ --hub-name ``` `` സ്ഥാനം നിങ്ങൾ ഉപയോഗിച്ച IoT ഹബ് നാമം നൽകുക. കണക്റ്റ് സ്‌ട്രിംഗ് *ServiceConnect* പോളിസിക്ക് ആവശ്യമാണ്, `--policy-name service` പാരാമീറ്റർ ഉപയോഗിച്ച്. കണക്‌ഷൻ സ്ട്രിംഗിന് ഏത് അനുമതികൾ അനുവദിക്കുമെന്ന് നിർണയിക്കാം. ServiceConnect പോളിസി കമാൻഡ് അയയ്ക്കാനും IoT ഉപകരണങ്ങളുമായി ബന്ധപ്പെടാനും കോഡിനു സാധ്യത നൽകുന്നു. ✅ കുറച്ച് പഠിക്കുക: [IoT Hub permissions](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn) സംബന്ധിച്ച ഡോക്യുമെന്റേഷൻ വായിക്കുക. 1. VS കോഡിൽ `local.settings.json` ഫയൽ തുറന്ന് `Values` വിഭാഗത്തിൽ താഴെ കാണുന്ന മൂല്യം ചേർക്കുക: ```json "REGISTRY_MANAGER_CONNECTION_STRING": "" ``` മുമ്പത്തെ നിന്നും ലഭിച്ച കണക്റ്റ് സ്‌ട്രിംഗ് ഇവിടെ പകരുക. ഇത് സാധുവായ JSON ആവാൻ മുൻ വരിയിൽ കോമ ചേർക്കണം. ### ടാസ്‌ക് - ഒരു ഉപകരണത്തിലേക്ക് നേരിട്ടുള്ള മെത്തഡ് അഭ്യർത്ഥന അയയ്ക്കുക 1. Registry Manager SDK പിപ്പ് പാക്കേജ് വഴി ലഭ്യമാണ്. `requirements.txt` ഫയലിലേക്ക് താഴെ കാണുന്ന വരി ചേർക്കുക: ```sh azure-iot-hub ``` 1. VS കോഡ് ടെർമിനലിൽ വേർചിതാവസ്ഥ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കി, പിപ്പ് പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ താഴെ കാണുന്ന കമാൻഡ് നടത്തുക: ```sh pip install -r requirements.txt ``` 1. `__init__.py` ഫയലിൽ താഴെ കാണുന്ന ഇംപോർട്ടുകൾ ചേർക്കുക: ```python import json import os from azure.iot.hub import IoTHubRegistryManager from azure.iot.hub.models import CloudToDeviceMethod ``` ഇതിൽ ചില സിസ്റ്റം ലൈബ്രറിയും Registry Manager-ുമായി ഇടപഴകാനും നേരിട്ട് മെത്തഡ് അഭ്യർത്ഥനയ അയക്കാനുമുള്ള ലൈബ്രറികളും ഉൾപ്പെടുന്നു. 1. `main` മെത്തഡിനുള്ളിലെ കോഡ് നീക്കം ചെയ്യുക, പക്ഷേ മെത്തഡിന്റെ ഒറ്റപ്പെടുത്തൽ മതി. 1. `main` മെത്തഡിൽ താഴെ കാണുന്ന കോഡ് ചേർക്കുക: ```python body = json.loads(event.get_body().decode('utf-8')) device_id = event.iothub_metadata['connection-device-id'] logging.info(f'Received message: {body} from {device_id}') ``` ഈ കോഡ് ഇവന്റിന്റെ ബോഡി JSON സന്ദേശമാണ്, ഉപകരണത്തിലേക്ക് നിന്നും അയച്ചതെന്ന് പകർന്നു എടുത്തിരിക്കുന്നു. അതിനുശേഷം ഈ സന്ദേശത്തെല്ലാം ഉള്ള അനോട്ടേഷനുകളിൽ നിന്ന് ഡിവൈസ് ഐഡി നേടുന്നു. ഇവന്റിന്റെ ബോഡിയിൽ ടെലിമെട്രി സന്ദേശം അടങ്ങിയിരിക്കുന്നു, `iothub_metadata` ഡിക്ഷണറി IoT ഹബ് സജ്ജീകരിച്ച പ്രോപ്പർട്ടികൾ ഉൾക്കൊള്ളുന്നു, ഉദാഹരണത്തിന് അയച്ച ഡിവൈസ് ഐഡി, സന്ദേശം അയച്ച സമയം. ഈ വിവരങ്ങൾ ടെർമിനലിൽ ലോ​ഗിങ്ങായി കാണും, Functions അപ്ലിക്കേഷൻ ലോക്കലായി പ്രവർത്തിക്കുമ്പോൾ. 1. ഇതിനു താഴെ താഴെ കാണുന്ന കോഡ് ചേർക്കുക: ```python soil_moisture = body['soil_moisture'] if soil_moisture > 450: direct_method = CloudToDeviceMethod(method_name='relay_on', payload='{}') else: direct_method = CloudToDeviceMethod(method_name='relay_off', payload='{}') ``` കോഡ് സന്ദേശത്തിലെ മണ്ണ് നമുക്കുള്ള ഈർപ്പം എടുത്തുകൊണ്ടിരിക്കുന്നു. മണ്ണ് നമുക്കുള്ള ഈർപ്പം പരിശോധിച്ച്, മൂല്യത്തിനു അനുസരിച്ച് `relay_on` അല്ലെങ്കിൽ `relay_off` നേരിട്ടുള്ള മെത്തഡ് അഭ്യർത്ഥനയ്ക്കുള്ള സഹായക ക്ലാസ് ഉണ്ടാക്കുന്നു. പayload വേണ്ട, അതിനാൽ ശൂന്യ JSON ഡോക്യുമെന്റ് അയക്കം. 1. ഇതിനു താഴെ ചേർക്കുക: ```python logging.info(f'Sending direct method request for {direct_method.method_name} for device {device_id}') registry_manager_connection_string = os.environ['REGISTRY_MANAGER_CONNECTION_STRING'] registry_manager = IoTHubRegistryManager(registry_manager_connection_string) ``` `REGISTRY_MANAGER_CONNECTION_STRING` `local.settings.json`-ൽ നിന്ന് വായിക്കുന്നു. ഈ ഫയലിലെ മൂല്യങ്ങൾ പരിസ്ഥിതി വാരിയബിളുകളായി ലഭ്യമാകും, അവ `os.environ` ഉപയോഗിച്ച് വായിക്കാം, ഇത് പരിസ്ഥിതി വാരിയബിളുകളുടെ നിഘണ്ടു നൽകുന്നു. > 💁 ഈ കോഡ് ക്ലൗഡിൽ പ്രയോഗിക്കുമ്പോൾ, `local.settings.json`-ലെ മൂല്യങ്ങൾ *Application Settings* ആയി സെറ്റ് ചെയ്യപ്പെടും, അവ പരിസ്ഥിതി വാരിയബിളുകളിൽ നിന്നും ലഭിക്കും. കണക്റ്റ് സ്‌ട്രിംഗ് ഉപയോഗിച്ച് Registry Manager സഹായക ക്ലാസ് ഉദാഹരിക്കുന്നു. 1. ഇതിനു താഴെ ചേർക്കുക: ```python registry_manager.invoke_device_method(device_id, direct_method) logging.info('Direct method request sent!') ``` Registry Manager ഉപകരണത്തിലേക്ക് നേരിട്ടുള്ള മെത്തഡ് അഭ്യർത്ഥന അയയ്ക്കാൻ പറഞ്ഞുകൊണ്ടിരിക്കുന്നു, ടെലിമെട്രി അവിടെ നിന്നുവന്നു. > 💁 MQTT ഉപയോഗിച്ച് പടിപടിയായി നിങ്ങള്‍ സൃഷ്ടിച്ച ആപ്പിന്റെ പതിപ്പുകളിൽ, റീലേ കൺട്രോൾ കമാൻഡുകൾ എല്ലാ ഡിവൈസുകൾക്കും അയക്കാറുണ്ടായിരുന്നു. കോഡ് ഒരു ഡിവൈസ്സ് മാത്രമുണ്ടെന്ന് കരുതിയിരുന്നു. കോഡിന്റെ ഈ പതിപ്പ് ഒരു ഡിവൈസിനെയോ മെത്തഡ് അഭ്യർത്ഥന അയക്കുന്നു, അതിനാൽ നിങ്ങൾക്ക് ഒന്നിലധികം ഈർപ്പ് സെൻസറുകളും റീലേകളും എന്നിങ്ങനെ സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, യഥാർത്ഥ_direct_method_ അഭ്യർത്ഥന ശരിയായ ഉപകരണത്തിലേക്ക് അയയ്ക്കും. 1. Functions ആപ്പ് നടത്തുക, നിങ്ങളുടെ IoT ഡിവൈസ് ഡാറ്റ അയയ്ക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക. സന്ദേശങ്ങൾ പ്രോസസ് ചെയ്യപ്പെടുന്നതും_direct_method_ അഭ്യർത്ഥനകൾ അയക്കപ്പെടുന്നതും നിങ്ങൾ കാണാം. മണ്ണിലെ ഈർപ്പ് സെൻസർ മണ്ണിന്‍റെ ഉള്ളിലും പുറത്തും നീട്ടി മൂല്യങ്ങൾ മാറുന്നതും റീലേ ഓണായി ഓഫ് ആകുന്നതും കാണുക > 💁 ഈ കോഡ് [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions) ഫോൾഡറിലെ കോഡ് കണ്ടെത്താം. ## നിങ്ങളുടെ സെർവർലെസ് കോഡ് ക്ലൗഡിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക നിങ്ങളുടെ കോഡ് ഇപ്പോൾ ലോക്കലായി പ്രവർത്തിക്കുകയാണ്, അതിനാൽ അടുത്ത ഘട്ടം Functions ആപ്പ് ക്ലൗഡിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക. ### പ്രവർത്തി - ക്ലൗഡ് റിസോഴ്സ് സൃഷ്ടിക്കുക നിങ്ങളുടെ Functions ആപ്പ് Azure-യിലെ Functions App റിസോഴ്‌സായി അപ്‌ലോഡ് ചെയ്യണം, നിങ്ങളുടെ IoT Hub-ക്കായി സൃഷ്ടിച്ച Resource Group-ഇന്റെ ഉള്ളിൽ. ലോക്കലിൽ പ്രവർത്തിക്കുന്ന ഇമുലേറ്റഡ് സ്റ്റോറേജ് അക്കൗണ്ടിന്റെ പകരം ഒരു Storage Account Azure-യിൽ സൃഷ്ടിക്കേണ്ടതാണ്. 1. സ്റ്റൊഴേജ് അക്കൗണ്ട് സൃഷ്ടിക്കാൻ താഴെക്കൊടുത്തിരിക്കുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: ```sh az storage account create --resource-group soil-moisture-sensor \ --sku Standard_LRS \ --name ``` `` എന്നത് നിങ്ങളുടെ സ്റ്റോറേജ് അക്കൗണ്ടിന് ഒരു പേര് നൽകുക. ഇത് ഗ്ലോബലായി സവിശേഷമായിരിക്കണം, കാരണം സ്റ്റോറേജ് അക്കൗണ്ടിൽ ആക്സസ് ചെയ്യാനായി ഉപയോഗിക്കുന്ന URL ഭാഗമാണ് ഇത്. ഈ പേരിൽ താഴെക്കാഴ്മ അക്ഷരങ്ങളും സംഖ്യകളും മാത്രം ഉപയോഗിക്കാം, മറ്റ് ചിഹ്നങ്ങൾ ഉപയോഗിക്കാനില്ല, കൂടാതെ ഇത് 24 അക്ഷരങ്ങളിൽ പരിമിതമാണ്. ഉദാഹരണത്തിന് `sms` ഉദാഹരണമായി എടുത്ത് അതിന്റെ അവസാനം സ്വതന്ത്രമായ ഒരു ഐഡന്റിഫയർ ചേർക്കുക, ഉദാഹരണത്തിന് ചില സ്ഫോടനങ്ങളോ നിന്റെ പേര് പോലെയുള്ളവ. `--sku Standard_LRS` സജ്ജീകരിക്കുന്നത് വിലനിരക്കിനായി, താഴ്ന്ന ചെലവുള്ള സാധാരണ ഉപയോഗത്തിന്റെ നിരയിലെ അക്കൗണ്ട് തിരഞ്ഞെടുക്കുന്നു. സ്റ്റൊഴേജ് സൗജന്യ നിര ലഭ്യമല്ല, നിങ്ങള്‍ ഉപയോഗിക്കുന്നതിനു വേണ്ടി മാത്രം പണം കൊടുക്കണം. ചെലവ് അത്ര ഉയർന്നതല്ല, ഏറ്റവും വിലവികലമായ സ്റ്റൊഴേജ് സ്റ്റോറേജ് ഗിഗാബൈറ്റിന് മാസത്തിൽ US$0.05-ല് താഴെയായി. ✅ വിലനിരക്കുകൾക്കായി [Azure Storage Account വിലപ്പേജ്](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn) വായിക്കുക 1. Functions App സൃഷ്ടിക്കാൻ താഴെ പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: ```sh az functionapp create --resource-group soil-moisture-sensor \ --runtime python \ --functions-version 3 \ --os-type Linux \ --consumption-plan-location \ --storage-account \ --name ``` `` എന്നത് മുമ്പത്തെ പാഠത്തിൽ Resource Group സൃഷ്ടിക്കുമ്പോൾ ഉപയോഗിച്ചിരുന്ന ലൊക്കേഷൻ ആക്കുക. `` എന്നത് മുൻപത്തെ ഘട്ടത്തിൽ സൃഷ്ടിച്ച സ്റ്റോറേജ് അക്കൗണ്ടിന്റെ പേര് ആക്കുക. `` എന്നത് Functions App-നായി സവിശേഷമായ ഒരു പേര് നൽകുക. ഇത് ഗ്ലോബൽ സവിശേഷമായിരിക്കണം, കാരണം Functions App-നായി ഉപയോഗിക്കുന്ന URL-ന്റെ ഭാഗമായിരിക്കും. ഉദാഹരണത്തിന് `soil-moisture-sensor-` തുടങ്ങിയവയും അതിന്റെ അവസാനം ഒരു സവിശേഷ ഐഡന്റിഫയർ ചേർക്കുക, ഉദാഹരണത്തിന് ചില സ്‌പേസ് വാക്കുകൾ അല്ലെങ്കിൽ നിന്റെ പേര്. `--functions-version 3` ഓപ്ഷൻ Azure Functions പതിപ്പ് 3 ആണ് ഉപയോഗിക്കുന്നത് എന്ന് ക്രമീകരിക്കുന്നു. പതിപ്പ് 3 ആണ് ഏറ്റവും പുതിയ പതിപ്പ്. `--os-type Linux` ഓപ്ഷൻ Functions റൺടൈംക്ക് ഈ ഫംഗ്ഷനുകൾ ഹോസ്റ്റ് ചെയ്യുന്നതിനായി Linux ഓഎസ് ഉപയോഗിക്കണമെന്നു പറയുന്നു. Functions Linux-ൽ അല്ലെങ്കിൽ Windows-ൽ ഹോസ്റ്റ് ചെയ്യാം, ഉപയോഗിച്ച ഭാഷയെ ആശ്രയിച്ച്. Python ആപ്ലിക്കേഷനുകൾ Linux-ൽ മാത്രമേ പിന്തുണയ്ക്കപ്പെടൂ. ### പ്രവർത്തി - അനുഭവസേവന ക്രമീകരണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുക Functions ആപ്പ് വികസിപ്പിക്കുമ്പോൾ, `local.settings.json` ഫയലിൽ നിങ്ങളുടെ IoT Hub-ന് വേണ്ടിയുള്ള കണക്ഷൻ സ്ട്രിംഗുകൾ ഉൾപ്പെടുത്തി ചില ക്രമീകരണങ്ങൾ സൂക്ഷിച്ചിരിക്കുന്നു. ഈ ക്രമീകരണങ്ങൾ Functions App-ന്റെയും ഒരു Application Settings-ൽ Azure-യിൽ എഴുതണം, നിങ്ങളുടെ കോഡ് ഉപയോഗിക്കാനാകും. > 🎓 `local.settings.json` ഫയൽ ലൊക്കൽ ഡവലപ്‌മെന്റ് ക്രമീകരണങ്ങൾക്കായി മാത്രമാണ്, ഇവ GitHub പോലുള്ള സോഴ്‌സ് കണ്ട്രോൾ ഇനിൽ ചേർക്കരുത്. ക്ലൗഡിലേക്ക് അപ്‌ലോഡ് ചെയ്യുമ്പോൾ Application Settings ഉപയോഗിക്കും. Application Settings കോൺഫിഗറേഷന്റെ കീ/വാല്യൂ ജോഡികളായി ക്ലൗഡിൽ ഹോസ്റ്റ് ചെയ്യപ്പെടുന്നു, നിങ്ങളുടെ കോഡ് അല്ലാതിരുന്ന് റൺടൈം എന്വയോൺമെന്റ് വേരിബിളുകൾ ആയി വായിക്കുന്നു. 1. Functions App Application Settings-ൽ `IOT_HUB_CONNECTION_STRING` ക്രമീകരണം സെറ്റ് ചെയ്യാൻ താഴെ പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: ```sh az functionapp config appsettings set --resource-group soil-moisture-sensor \ --name \ --settings "IOT_HUB_CONNECTION_STRING=" ``` `` എന്നത് നിങ്ങളുടെ Functions App-നായി ഉപയോഗിച്ച പേര്. `` എന്നത് നിങ്ങളുടെ `local.settings.json` ഫയലിൽ നിന്നുള്ള `IOT_HUB_CONNECTION_STRING` വില. 1. മുമ്പത്തെ ഘട്ടം ആവർത്തിച്ച്, `REGISTRY_MANAGER_CONNECTION_STRING`-ന്റെ മൂല്യം നിങ്ങളുടെ `local.settings.json` ഫയലിൽനിന്നുള്ള മൂല്യവുമായ് ക്രമീകരിക്കുക. ഈ കമാൻഡുകൾ പ്രവർത്തിക്കുമ്പോൾ, അവ Functions App-ന്റെ എല്ലാ Application Settings-ന്റെ പട്ടികയും പുറത്തു കാണിക്കും. നിങ്ങളുടെ ക്രമീകരണങ്ങൾ ശരിയായി സജ്ജമാണെന്ന് ഇത് പരിശോധിക്കാം. > 💁 നിങ്ങൾക്ക് `AzureWebJobsStorage` എന്ന വാല്യു ഇതിനകം കണ്ടുവരാം. നിങ്ങളുടെ `local.settings.json` ഫയലിൽ ഇത് ലോക്കൽ സ്റ്റോറേജ് ഇമുലേറ്റർ ഉപയോഗിക്കാൻ സജ്ജീകരിച്ചിരുന്നതാണ്. Functions App സൃഷ്ടിക്കുമ്പോൾ, സ്റ്റോറേജ് അക്കൗണ്ട് പാരാമീറ്ററായി പാസ്സാക്കുന്നു, ഇത് ആ ഓപ്ഷനിൽ നീക്കാതെ തന്നെ ഓട്ടോമാറ്റിക്കായി ക്രമീകരിക്കും. ### പ്രവർത്തി - Functions App ക്ലൗഡിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക Functions App റെഡി ആകുമ്പോൾ, കോഡ് ക്ലൗഡിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക. 1. Functions App പ്രസിദ്ധീകരിക്കാൻ VS Code ടെർമിനലിൽ താഴെ കാണിച്ച കമാൻഡ് പ്രവർത്തിപ്പിക്കുക: ```sh func azure functionapp publish ``` `` എന്നത് Functions App-നായി ഉപയോഗിച്ച പേര്. കോഡ് പാക്കേജ് ചെയ്ത് Functions App-ലേക്ക് അയയ്ക്കും, അവിടെ അത് ഡിപ്ലോയുചെയ്യും, തുടങ്ങും. അവിടെ നിരവധി കോൺസോൾ ഔട്ട്പുട്ട് കാണും, അവസാനത്തിൽ ഡിപ്ലോയ്മെന്റ് സ്ഥിരീകരണവും Functions പട്ടികയും കാണാം. ഇവിടെ പട്ടികയിൽ ട്രിഗർ മാത്രം ഉണ്ടാകും. ```output Deployment successful. Remote build succeeded! Syncing triggers... Functions in soil-moisture-sensor: iot-hub-trigger - [eventHubTrigger] ``` നിങ്ങളുടെ IoT ഡിവൈസ് പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക. മണ്ണിലെ ഈർപ്പ് നിരക്കുകൾ മാറ്റി, സെൻസർ മണ്ണിനുള്ളിലെയും പുറത്തും നീക്കുക. മണ്ണിലെ ഈർപ്പ് മാറുമ്പോൾ റീലേ ഓണായി ഓഫ് ആകുന്നത് കാണാം. --- ## 🚀 ചാലഞ്ച് മുൻപത്തെ പാഠത്തിൽ, MQTT സന്ദേശങ്ങളിൽ നിന്ന് Unsubscribe ചെയ്ത് റീലേ പ്രവർത്തന കാലസമയം നിയന്ത്രിച്ചിരുന്നു. ഇവിടെ ഇതുപോലെ ചെയ്യാൻ പറ്റില്ല - നിങ്ങൾക്ക് നിങ്ങളുടെ IoT Hub ട്രിഗർ Unsubscribe ചെയ്യാൻ സാധിക്കുകയില്ല. നിങ്ങളുടെ Functions ആപ്പിൽ ഇതു എങ്ങനെ കൈകാര്യം ചെയ്യാമെന്ന് വിവിധ മാർഗങ്ങൾ ചിന്തിക്കുക. ## പാഠാനന്തര ക്വിസ് [Post-lecture quiz](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18) ## അവലോകനം & സ്വയം പഠനം * [Serverless Computing പേജ് Wikipedia-യിൽ](https://wikipedia.org/wiki/Serverless_computing) വായിക്കുക * Azure-യിൽ serverless ഉപയോഗിക്കുന്നത് സംബന്ധിച്ച് കൂടുതൽ ഉദാഹരണങ്ങളുള്ള [Go serverless for your IoT needs Azure blog post](https://azure.microsoft.com/blog/go-serverless-for-your-iot-needs/?WT.mc_id=academic-17441-jabenn) വായിക്കുക * Azure Functions കുറിച്ച് കൂടുതൽ അറിയാൻ [Azure Functions YouTube ചാനൽ](https://www.youtube.com/c/AzureFunctions) കാണുക ## അസൈൻമെൻറ് [Add manual relay control](assignment.md) --- **ഡിസ്ക്ലെയിമർ**: ഈ രേഖ AI പരിഭാഷാ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷപ്പെടുത്തിയതാണ്. നാം കൃത്യതയിൽ പരമാവധി ശ്രദ്ധ ചെലുത്തുന്നുണ്ടെങ്കിലും, യാന്ത്രിക പരിഭാഷകളിൽ പിശകുകളോ അകൃത്യതകളോ ഉണ്ടാകാമെന്ന് അറിയിക്കുക. യഥാര്‍ഥ ഭാഷയിലെ മാതൃലിപി പ്രാമാണികതയുള്ള ഉറവിടമായി കണക്കാക്കണമെന്ന് അഭ്യര്‍ത്ഥിക്കുന്നു. പ്രധാന വിവരങ്ങൾക്കായി, പ്രൊഫഷണൽ മാനുഷിക പരിഭാഷാ സേവനം ഉപയോഗിക്കുന്നത് ശുപാർശ ചെയ്യുന്നു. ഈ പരിഭാഷയുടെ ഉപയോഗത്തിൽ നിന്നുള്ള ഏതെങ്കിലും തെറ്റിദ്ധാരണകൾക്കോ വ്യാഖ്യാനത്തിലെ പിശകുകളിലേക്കോ ഞങ്ങൾ ഉത്തരവാദികളല്ല.