You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/te/2-farm/lessons/5-migrate-application-to-th.../README.md

652 lines
74 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# మీ అనువర్తన లాజిక్‌ని క్లౌడ్‌కు మైగ్రేట్ చేయండి
![ఈ పాఠం యొక్క స్కెచ్‌నోట్ అవలోకనం](../../../../../translated_images/te/lesson-9.dfe99c8e891f48e1.webp)
> స్కెచ్‌నోట్ [నిత్య నరసింహన్](https://github.com/nitya) చేత. పెద్ద వెర్షన్ కోసం చిత్రంపై క్లిక్ చేయండి.
ఈ పాఠం [మైక్రోసాఫ్ట్ రియాక్టర్](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) నుండి [IoT ఫర్ బిగినర్స్ ప్రాజెక్ట్ 2 - డిజిటల్ అగ్రికల్చర్ సిరీస్](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/te/iot-messages-to-serverless.0194da1cc0732bb7.webp)
> 💁 మీరు గతంలో డేటాబేస్ ట్రిగ్గర్స్ ఉపయోగించిండా, దీన్ని ఒక ఈవెంట్ ద్వారా కోడ్ ట్రిగ్గర్ అయ్యే విధంగా భావించవచ్చు, ఉదాహరణకు ఒక రో చొప్పించడం.
![చాలా ఈవెంట్లు ఒకేసారి పంపబడినప్పుడు, సర్వర్‌లెస్ సేవ వాటిదన్నిటినీ ఒకేసారి నడపడానికి స్కేలు చేస్తుంది](../../../../../translated_images/te/serverless-scaling.f8c769adf0413fd1.webp)
ఈవెంట్ జరిగినప్పుడు మాత్రమే మీ కోడ్ నడుస్తుంది, ఇతర సమయంలో మీ కోడ్ చురుకుగా ఉండదు. ఈవెంట్ జరిగితే, మీ కోడ్ లోడ్ అవుతుంది మరియు నడుస్తుంది. దీనివల్ల సర్వర్‌లెస్ చాలా స్కేలబుల్‌గా ఉంటుంది — ఒకేసారి చాలా ఈవెంట్లు జరిగినప్పుడు, క్లౌడ్ ప్రొవైడర్ మీ ఫంక్షన్‌ను అవసరమైన మొత్తం సర్వర్లలో ఏకకాలంలో నడిపించగలదు. ఇదే సందర్భంలో, ఈవెంట్ల మధ్య సమాచారం పంచుకోవాలి అంటే, మీరు దాన్ని మెమొరీలో కాకుండా డేటాబేస్ వంటి ఎక్కడో సేవ్ చేయాలి.
మీ కోడ్ ఒక ఫంక్షన్‌గా ఉంటుంది, ఇది ఈవెంట్ వివరాలు పారామీటర్‌గా తీసుకుంటుంది. మీరు ఈ సర్వర్‌లెస్ ఫంక్షన్లను రాయడానికి అనేక ప్రోగ్రామింగ్ భాషలను ఉపయోగించవచ్చు.
> 🎓 సర్వర్‌లెస్‌ను ఫంక్షన్స్ ఆజ్ ఎ సర్వీస్ (FaaS) అని కూడా అంటారు, ఎందుకంటే ప్రతి ఈవెంట్ ట్రిగ్గర్ కోడ్‌లో ఒక ఫంక్షన్‌గా అమలవుతుంది.
పేరు ఉన్నప్పటికీ, సర్వర్‌లెస్ వాస్తవానికి సర్వర్లను ఉపయోగిస్తుంది. పేరు వచ్చే కారణం మీరు డెవలపర్‌గా మీ కోడ్ నడపడానికి అవసరమైన సర్వర్ల గురించి పట్టించుకోవడం లేదని, మీరు పరిగణించేది మీ కోడ్ ఈవెంట్‌కు స్పందించటం మాత్రమే అని. క్లౌడ్ ప్రొవైడర్ ఒక సర్వర్‌లెస్ *రన్‌టైమ్* కలిగి ఉంటుంది, ఇది సర్వర్లకు కేటాయింపు, నెట్‌వర్కింగ్, నిల్వ, CPU, మెమొరీ మరియు మీ కోడ్ నడపడానికి అవసరమైన ఇతర అన్ని విషయాలను నిర్వహిస్తుంది. ఈ మోడల్ మీరు సర్వర్‌కు అనుగుణంగా చెల్లించలేరు, ఎందుకంటే సర్వర్ వుండదు. ఇందుకు బదులుగా, మీ కోడ్ నడిచే సమయం మరియు ఉపయోగించిన మెమొరీ పరిమాణం ఆధారంగా చెల్లించాలి.
> 💰 సర్వర్‌లెస్ క్లౌడ్‌లో కోడ్ నడపడానికి చాలా తక్కువ ఖర్చు పరిష్కారం. ఉదాహరణకు, రచన సమయానికే, ఒక క్లౌడ్ ప్రొవైడర్ మీ సర్వర్‌లెస్ ఫంక్షన్లను మొత్తం 1,000,000 సార్లు ఒక్క నెలలో అమలు చేసేందుకు అనుమతిస్తుందని, ఆ తర్వాత ప్రతి 1,000,000 అమలుకు US$0.20 వసూలు చేస్తుంది. మీ కోడ్ నడవనప్పుడు మీరు చెల్లించాల్సి ఉండదు.
ఒక IoT డెవలపర్‌గా, సర్వర్‌లెస్ మోడల్ చాలా సరిపోతుంది. మీరు మీ క్లౌడ్ ఆధారిత IoT సేవతో కనెక్ట్ అయిన ఏవైనా IoT డివైస్‌ల నుండి పంపబడే సందేశాలకు స్పందించడానికి ఒక ఫంక్షన్ రాయవచ్చు. మీ కోడ్ అన్ని సందేశాలను నిర్వహిస్తుంది, కానీ అవసరమైనప్పుడు మాత్రమే నడుస్తుంది.
✅ మీరు MQTT ద్వారా సందేశాలను వింటూ ఉండే సర్వర్ కోడ్ రాశారు. దాన్ని క్లౌడ్‌లో సర్వర్‌లెస్‌గా ఎలా నడిపించవచ్చు? సర్వర్‌లెస్ కంప్యూటింగ్‌కు మద్దతు ఇవ్వడానికి కోడ్ ఎలా మారవచ్చని మీరు భావిస్తారు?
> 💁 సర్వర్‌లెస్ మోడల్ కోడ్ నడపటంపై కాకుండా, ఇతర క్లౌడ్ సేవలకూ వ్యాప్తంగా మారుతున్నది. ఉదాహరణకు, సర్వర్‌లెస్ డేటాబేసులు క్లౌడ్‌లో అందుబాటులో ఉన్నవి, అక్కడ మీరు డేటాబేస్‌పై చేసే ప్రతి అభ్యర్థన (జ్ఞాపకం లేదా చొప్పింపు వంటి) కి చెల్లిస్తారు, ఇది ఆ అభ్యర్థనను సేవ్ చేయడానికి చేయబడిన పనిపై ఆధారపడి ఉంటుంది. ఉదాహరణకు, ఒక ప్రాథమిక కీపై ఒకే రోను సెలెక్ట్ చేయడం, అనేక పట్టికలు జత చేసుకొని వేలాదిమందిరోజులను తిరిగి ఇచ్చే క్లిష్టమైన ఆపరేషన్ కంటే తక్కువ ఖర్చు అవుతుంది.
## సర్వర్‌లెస్ అనువర్తనం సృష్టించండి
మైక్రోసాఫ్ట్ నుండి సర్వర్‌లెస్ కంప్యూటింగ్ సేవ Azure Functions అని పిలవబడుతుంది.
![Azure Functions లోగో](../../../../../translated_images/te/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 డాక్యుమెంటేషన్](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn) లో Azure Functions అవలోకనం చదవండి.
Azure Functions రాయడానికి, మీరు మీ ఇష్టమైన భాషలో Azure Functions యాప్‌తో ప్రారంభిస్తారు. Azure Functions డిఫాల్ట్‌గా Python, JavaScript, TypeScript, C#, F#, Java, Powershell ను మద్దతు ఇస్తుంది. ఈ పాఠంలో మీరు Pythonలో Azure Functions యాప్ ఎలా రాయాలో నేర్చుకొంటారు.
> 💁 Azure Functions అనుమతించిన HTTP అభ్యర్థనలను మద్దతు ఇచ్చే ఏ భాషనలోనైనా (పాత భాషలు, ఉదా: COBOL సహా) ఫంక్షన్లు రాయడానికి కస్టమ్ హ్యాండ్లర్లు కూడా మద్దతుగా ఉన్నాయి.
ఫంక్షన్స్ యాప్లు ఒక లేదా అంతకంటే ఎక్కువ *ట్రిగ్గర్‌లు* ను కలిగి ఉంటాయి - ఇవి ఈవెంట్లకు స్పందించే ఫంక్షన్లు. ఒకే ఫంక్షన్స్ యాప్‌లో అనేక ట్రిగ్గర్లను కలిగి ఉండవచ్చు, వీటన్నీ సాధారణ కాన్ఫిగరేషన్‌ను పంచుకుంటాయి. ఉదాహరణకు, మీ ఫంక్షన్స్ యాప్ కోసం కాన్ఫిగరేషన్ ఫైల్‌లో మీ 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 కోడ్ కోసం Azure Functions పొడిగింపును ఇన్స్టాల్ చేయండి. ఈ ఎక్స్టెన్షన్ Azure ఫంక్షన్ల సృష్టింపు, డీబగింగ్ మరియు క్లౌడ్‌లో ప్రదర్శన కి మద్దతు ఇస్తుంది. VS కోడ్‌లో ఈ ఎక్స్టెన్షన్ ఇన్స్టాలేషన్ సూచనల కోసం [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 స్టోరేజ్ అకౌంట్. వీటిలో ఫైళ్లు, బ్లోబ్స్, పట్టికలలో డేటా లేదా క్యూలలో డేటా నిల్వ చేయవచ్చు. మీరు ఒకే నిల్వ అకౌంట్‌ను అనేక యాప్ల మధ్య పంచుకోవచ్చు, ఉదా: ఫంక్షన్స్ యాప్ మరియు వెబ్ యాప్.
1. Azurite అనేది Node.js యాప్, అందువల్ల మీరు Node.js ను ఇన్స్టాల్ చేయాలి. [Node.js వెబ్‌సైట్](https://nodejs.org/) లో డౌన్లోడ్ మరియు ఇన్స్టాలేషన్ సూచనలను చూడండి. మీరు Mac వాడితే, [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 నిల్వ ఎమ్యులేటర్ ప్రారంభమవుతుంది మరియు లోకల్ ఫంక్షన్స్ రన్‌టైమ్ కనెక్ట్ అయ్యేందుకు సిద్ధమవుతుంది.
```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 ఒక కొత్త ఫంక్షన్స్ యాప్ సృష్టించడానికి ఉపయోగించవచ్చు.
1. మీ ఫంక్షన్స్ యాప్ కోసం ఒక ఫోల్డర్ సృష్టించి దాన్ని సెలెక్ట్ చేయండి. దీనిని `soil-moisture-trigger` అని పిలవండి
```sh
mkdir soil-moisture-trigger
cd soil-moisture-trigger
```
1. ఈ ఫోల్డర్‌లో Python వర్చువల్ ఎన్విరాన్మెంట్ సృష్టించండి:
```sh
python3 -m venv .venv
```
1. వర్చువల్ ఎన్విరాన్మెంట్ను యాక్టివేట్ చేయండి:
* Windowsపై:
* Command Prompt లేదా Windows టెర్మినల్ ద్వారా Command Prompt వాడితే:
```cmd
.venv\Scripts\activate.bat
```
* PowerShell వాడితే:
```powershell
.\.venv\Scripts\Activate.ps1
```
* macOS లేదా Linux పై:
```cmd
source ./.venv/bin/activate
```
> 💁 ఈ కమాండ్లు మీరు వర్చువల్ ఎన్విరాన్మెంట్ సృష్టించిన ఫోల్డర్‌లోనే నడిపాలి. మీరు `.venv` ఫోల్డర్ లోకి పోవాల్సిన అవశ్యకత లేదు, యాక్టివేట్ కమాండ్ మరియు ప్యాకేజీలు ఇన్స్టాల్ చేయటానికి లేదా కోడ్ నడపటానికి ఆ ఫోల్డర్ లోనే ఉండండి.
1. ఈ ఫోల్డర్‌లో ఫంక్షన్స్ యాప్ సృష్టించడానికి క్రింది కమాండ్ నడపండి:
```sh
func init --worker-runtime python soil-moisture-trigger
```
ఇది ప్రస్తుత ఫోల్డర్‌లో మూడు ఫైళ్ళను సృష్టిస్తుంది:
* `host.json` - ఈ JSON డాక్యుమెంట్ ఫంక్షన్స్ యాప్ కొరకు సెట్టింగ్స్ కలిగి ఉంటుంది. ఇన్ని మార్చాల్సిన అవసరం ఉండదు.
* `local.settings.json` - ఈ JSON డాక్యుమెంట్ లోకల్‌గా నడుస్తున్నప్పుడు యాప్ వాడే సెట్టింగ్స్, ఉదా: మీరు ఇక్కడ మీ IoT హబ్ కనెక్షన్ స్ట్రింగ్స్ ఇన్స్టాల్ చేస్తారు. ఇవి లోకల్ మాత్రమే, సోర్స్ కోడ్ కంట్రోల్‌లో ఉంచకూడదు. క్లౌడ్‌కు పంపేటప్పుడు ఈ సెట్టింగ్స్ పంపబడవు, అటువంటి సెట్టింగ్‌లు అప్లికేషన్ సెట్టింగ్స్ నుండి లోడ్ అవుతాయి. దీనిని తర్వాత ఈ పాఠంలో చర్చిస్తాము.
* `requirements.txt` - ఈ ఫైల్ [Pip requirements file](https://pip.pypa.io/en/stable/user_guide/#requirements-files), ఫంక్షన్స్ యాప్ నడపడానికి అవసరమైన Pip ప్యాకేజీలను కలిగి ఉంటుంది.
1. `local.settings.json` ఫైల్లో ఫంక్షన్స్ యాప్ ఉపయోగించే స్టోరేజ్ అకౌంట్ కోసం సెట్టింగ్ ఉంటుంది. ఇది డిఫాల్ట్‌గా ఉన్నట్టుగా ఉంటుంది, కాబట్టి దీన్ని సెట్ చేయాలి. Azurite లోకల్ స్టోరేజ్ ఎమ్యులేటర్‌కు కనెక్ట్ కావడానికి ఈ విలువను క్రింది విధంగా సెట్ చేయండి:
```json
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
```
1. అవసరమైన Pip ప్యాకేజీలను ఇన్‌స్టాల్ చేసుకోండి, requirements ఫైల్ ఉపయోగించి:
```sh
pip install -r requirements.txt
```
> 💁 అవసరమైన Pip ప్యాకేజీలు ఈ ఫైల్లో ఉండాలి, తద్వారా ఫంక్షన్స్ యాప్ క్లౌడ్‌కు పంపినప్పుడు, రన్‌టైమ్ సరైన ప్యాకేజీలను ఇన్‌స్టాల్ చేస్తున్నదని నిర్ధారించగలదు.
1. ప్రతిదీ సరిగ్గా పని చేస్తోందేమో పరీక్షించడానికి ఫంక్షన్స్ రన్‌టైమ్ ప్రారంభించండి. దీని కోసం క్రింది కమాండ్ నడపండి:
```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.
> ```
>
> ఈ హెచ్చరికలను మీరు ఈ పాఠంలో పదివార్త Microsoft Docs Q&A లో వివరించినట్లుగానే ([link](https://docs.microsoft.com/answers/questions/396617/azure-functions-core-tools-error-osx-devshmazurefu.html?WT.mc_id=academic-17441-jabenn)) మీరు పరిగణించకూడదు, పాఠం సరిగ్గా ప్రారంభమై, ఫంక్షన్లు చూపించడం ప్రారంభిస్తే సరిపోతుంది.
1. `ctrl+c` నొక్కి ఫంక్షన్స్ యాప్‌ను ఆపు.
1. ప్రస్తుత ఫోల్డర్‌ను VS కోడ్‌లో ఓపెన్ చేయండి, VS కోడ్ ఓపెన్ చేసి ఈ ఫోల్డర్ ఓపెన్ చేయవచ్చు లేదా క్రింది కమాండ్ నడపండి:
```sh
code .
```
VS Code మీ 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/te/vscode-azure-functions-init-notification.bd19b49229963edb.webp)
ఈ నోటిఫికేషన్ నుండి **Yes**ని ఎంచుకోండి.
1. VS Code టెర్మినల్‌లో Python వర్చువల్ ఎన్విరాన్మెంట్ రన్ అవుతోందో లేదో ధృవీకరించండి. అవసరం అయితే അത് ముగించి మళ్లీ ప్రారంభించండి.
## IoT హబ్ ఈవెంట్ ట్రిగ్గర్ సృష్టించండి
Functions యాప్ మీ సర్వర్‍‍లెస్ కోడ్ యొక్క షెల్. IoT హబ్ ఈవెంట్లకు స్పందించడానికి, మీరు ఈ యాప్‌లో IoT హబ్ ట్రిగ్గర్ ని జోడించవచ్చు. ఈ ట్రిగ్గర్ IoT హబ్‌కు పంపబడుతున్న సందేశాల స్ట్రీమ్‌తో కనెక్ట్ కావాలి మరియు వాటికి స్పందించాలి. ఈ సందేశాల స్ట్రీమ్‌ను పొందడానికి, మీ ట్రిగ్గర్ IoT హబ్ యొక్క *ఈవెంట్ హబ్ అనుకూలమైన ఎండపాయింట్*తో కనెక్షన్ కావాలి.
IoT హబ్ Azure Event Hubs అనే మరో Azure సేవపై ఆధారపడి ఉంటుంది. 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 Hubతో ఎలా సరిపోలుతాయో తెలుసుకోండి.
IoT పరికరం IoT హబ్‌కు కనెక్ట్ కావాలంటే, అనుమతించబడిన పరికరాలకే కనెక్ట్ అవ్వడానికి రహస్య కీ ఉపయోగించాలి. సందేశాలను చదవడానికి కనెక్ట్ అయినప్పుడు కూడా ఇదే వర్తిస్తుంది, మీ కోడ్‌కు రహస్య కీతో కూడిన కనెక్షన్ స్ట్రింగ్ అవసరం, పాటు IoT హబ్ వివరాలతో.
> 💁 మీరు పొందే డిఫాల్ట్ కనెక్షన్ స్ట్రింగ్ కి **iothubowner** అనుమతులు ఉంటాయి, దీనితో ఏ కోడ్ అయినా IoT హబ్ పై పూర్తి అనుమతులు పొందుతుంది. సాధ్యమైన దేనికంటే తక్కువ అనుమతులు ఉపయోగించడం ఉత్తమం. ఇది తదుపరి పాఠంలో కవర్ చేయబడుతుంది.
మీ ట్రిగ్గర్ కనెక్ట్ అయిన వెంటనే, IoT హబ్ కు పంపబడిన ప్రతి సందేశానికి ఫంక్షన్ లో కోడ్ పిలవబడుతుంది, దాన్ని ఏ పరికరం పంపినా సరే. ట్రిగ్గర్ కు సందేశం ఒక పరిణామంగా ఇవ్వబడుతుంది.
### టాస్క్ - ఈవెంట్ హబ్ అనుకూల ఎండపాయింట్ కనెక్షన్ స్ట్రింగ్ పొందండి
1. VS Code టెర్మినల్ నుండి ఈ క్రింది కమాండ్ నడుపండి IoT హబ్ ఈవెంట్ హబ్ అనుకూల ఎండపాయింట్ కోసం కనెక్షన్ స్ట్రింగ్ పొందడానికి:
```sh
az iot hub connection-string show --default-eventhub \
--output table \
--hub-name <hub_name>
```
`<hub_name>` ను మీరు ఉపయోగించిన IoT హబ్ పేరుతో మార్చండి.
1. VS Codeలో `local.settings.json` ఫైల్ తెరవండి. `Values` సెక్షన్ లో క్రింది అదనపు విలువను జోడించండి:
```json
"IOT_HUB_CONNECTION_STRING": "<connection string>"
```
`<connection string>`ను మునుపటి స్టెప్ లోని విలువతో మార్చండి. ఈ విలువను చేర్చిన తర్వాత సరైన JSON కోసం పై లైన్ తర్వాత కామాను జోడించాలి.
### టాస్క్ - ఈవెంట్ ట్రిగ్గర్ సృష్టించండి
ఇప్పుడు మీరు ఈవెంట్ ట్రిగ్గర్ సృష్టించడానికి సిద్ధంగా ఉన్నారు.
1. VS Code టెర్మినల్ నుండి `soil-moisture-trigger` ఫోల్డర్ లో ఈ క్రింది కమాండ్ నడుపండి:
```sh
func new --name iot-hub-trigger --template "Azure Event Hub trigger"
```
ఇది `iot-hub-trigger` అనే కొత్త ఫంక్షన్ సృష్టిస్తుంది. ఈ ట్రిగ్గర్ IoT హబ్ యొక్క ఈవెంట్ హబ్ అనుకూల ఎండపాయింట్ కు కనెక్ట్ అవుతుంది కనుక మీరు ఈవెంట్ హబ్ ట్రిగ్గర్ ఉపయోగించవచ్చు. ప్రత్యేక IoT హబ్ ట్రిగ్గర్ ఉండదు.
`soil-moisture-trigger` ఫోల్డర్ లో `iot-hub-trigger` అనే ఫోల్డర్ సృష్టించబడుతుంది, దీనిలో ఈ ఫంక్షన్ ఉంటుంది. ఈ ఫోల్డర్ లో ఈ క్రింది ఫైళ్లుంటాయి:
* `__init__.py` - ఇది ట్రిగ్గర్ ఉన్న 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 హబ్ కు సందేశం పంపబడగానే, ఈ ఫంక్షన్ ఆ సందేశాన్ని `event` గా పాసింగ్ చేసి పిలవబడుతుంది, గత పాఠంలో చూపినnotationsతో సమానంగా.
ఈ ఫంక్షన్ ప్రధానంగా ఈవెంట్ ను లాగ్ చేస్తుంది.
* `function.json` - ఇది ట్రిగ్గర్ కొరకు కాన్ఫిగరేషన్ కలిగి ఉంటుంది. ముఖ్య కాన్ఫిగరేషన్ `bindings` అనే సెక్షన్ లో ఉంటుంది. బైండింగ్ అంటే Azure Functions మరియు ఇతర Azure సేవల మధ్య కనెక్షన్ ని సూచిస్తుంది. ఈ ఫంక్షన్ కు ఎంటరీ బైండింగ్ ఒక ఈవెంట్ హబ్ కు ఉంటుంది - ఇది ఈవెంట్ హబ్ ను కనెక్ట్ చేసి డేటాను స్వీకరిస్తుంది.
> 💁 మీరు అవుట్‌పుట్ బైండింగ్‌లను కూడా కలిగి ఉండవచ్చు, అప్పుడు ఫంక్షన్ విడుదల అవుతున్న డేటా మరొక సేవకు పంపబడుతుంది. ఉదాహరణకి, మీరు డేటాబేస్ కు అవుట్‌పుట్ బైండింగ్ జోడించి IoT Hub ఈవెంట్ ను ఫంక్షన్ నుంచి తిరిగి పంపవచ్చు, అది ఆటోమేటిగ్గా డేటాబేస్ లో చేర్చబడుతుంది.
✅ కొద్దిగా అధ్యయనం చేయండి: [Azure Functions ట్రిగ్గర్లు మరియు బైండింగ్స్ కాన్సెప్ట్ డాక్యుమెంటేషన్](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python)లో బైండింగ్స్ గురించి చదవండి.
`bindings` సెక్షన్ లో ఆసక్తికరమైన విలువలు:
* `"type": "eventHubTrigger"` - ఫంక్షన్ ఈవెంట్ హబ్ నుండి ఈవెంట్లను వింటున్నట్లు చెపుతుంది
* `"name": "events"` - ఈవెంట్ హబ్ ఈవెంట్ల కోసం ఉపయోగించే పరిమాణం పేరు. ఇది Python కోడ్ లోని `main` ఫంక్షన్ లోని పేరుతో సరిపోతుంది.
* `"direction": "in"` - ఇది ఇన్‌పుట్ బైండింగ్, ఈవెంట్ హబ్ నుంచి డేటా ఫంక్షన్ లోకి వస్తుంది
* `"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 యాప్ తో సమయంగా నడుస్తే, ఫంక్షన్స్ యాప్ కనెక్ట్ కావడం మరియు ఈవెంట్లు స్వీకరించడంలో దెబ్బతింటుంది.
> 💁 అనేక యాప్‌లు IoT హబ్ ఎండపాయింట్లను విభిన్న *consumer groups* ఉపయోగించి కనెక్ట్ చేయవచ్చు. ఇవి తర్వాతి పాఠంలో వివరించబడతాయి.
1. Functions యాప్ నడపడానికి, VS Code టెర్మినల్ నుండి ఈ క్రింది కమాండ్ నడపండి
```sh
func start
```
Functions యాప్ ప్రారంభమవుతుంది, `iot-hub-trigger` ఫంక్షన్‌ను గుర్తించి process చేస్తుంది. ఇది 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)
```
ప్రతి ఫంక్షన్ కాల్ `Executing 'Functions.iot-hub-trigger'`/`Executed 'Functions.iot-hub-trigger'` బ్లాక్‌తో కూడి ఉంటుంది, తద్వారా మీరు ప్రతి కాల్లో ప్రాసెస్ అయిన సందేశాల సంఖ్యను చూచుకోగలరు.
1. మీ IoT పరికరం రన్ అవుతోందో లేదో ధృవీకరించండి. మీరు Functions యాప్ లో కొత్త మట్టి తేమ సందేశాలు కనిపిస్తాయ.
1. Functions యాప్‌ను ఆపు మళ్లీ ప్రారంభించండి. ఇది ముందనున్న సందేశాలను మళ్ళీ ప్రాసెస్ చేయదు, కొత్త సందేశాలకే ప్రాసెస్ చేస్తుంది.
> 💁 VS Code మీ Functionsను డీబగ్ చేయడాన్ని కూడా మద్దతిస్తుంది. మీరు కోడ్ లైన్ల ప్రారంభంలో బోర్డర్ పై క్లిక్ చేసి బ్రేక్ పాయింట్లు సెట్ చేయవచ్చు లేదా కోడ్ లైన్ పై కర్సర్ ఉంచి *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 యాప్ IoT హబ్ నుండి Event Hub అనుకూల ఎండపాయింట్ ద్వారా సందేశాలను వింటోంది. ఇప్పుడు మీరు IoT పరికరానికి కమాండ్లు పంపవలసి ఉంది. ఇది Registry Manager ద్వారాIoT హబ్ కి వేరే కనెక్షన్ ఉపయోగించడం ద్వారా జరుగుతుంది. Registry Manager ఒక సాధనం ఇది IoT హబ్‌లో నమోదు చేయబడిన పరికరాలను చూడడానికి మరియు క్లౌడ్ నుండి పరికరాలకు సందేశాలు, డైరెక్ట్ మెథడ్ రిక్వెస్ట్‌లు పంపడానికి, లేదా పరికరం ట్విన్‌ను అప్‌డేట్ చేయడానికి ఉపయోగించబడుతుంది. మీరు దీన్ని IoT పరికరాలను నమోదు చేయడానికి, అప్‌డేట్ చేయడానికి లేదా తీసివేయడానికి కూడా ఉపయోగించవచ్చు.
Registry Manager కి కనెక్ట్ కావడానికి, కనెక్షన్ స్ట్రింగ్ అవసరం.
### టాస్క్ - Registry Manager కనెక్షన్ స్ట్రింగ్ పొందండి
1. కనెక్షన్ స్ట్రింగ్ పొందడానికి, ఈ క్రింది కమాండ్ నడిపండి:
```sh
az iot hub connection-string show --policy-name service \
--output table \
--hub-name <hub_name>
```
`<hub_name>`ను మీరు ఉపయోగించిన IoT హబ్ పేరుతో మార్చండి.
కనెక్షన్ స్ట్రింగ్ *ServiceConnect* పాలసీకి కోరబడుతుంది `--policy-name service` పరామితి తో. కనెక్షన్ స్ట్రింగ్ కోరేటప్పుడు, ఆ కనెక్షన్ స్ట్రింగ్ ఏ అనుమతులు ఇస్తుందో మీరు సూచించవచ్చు. ServiceConnect పాలసీ మీ కోడ్‌కు IoT పరికరాలకు కనెక్ట్ అయి సందేశాలు పంపేందుకు అనుమతిస్తుంది.
✅ కొద్దిగా అధ్యయనం చేయండి: [IoT హబ్ అనుమతులు డాక్యుమెంటేషన్](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn)లో వివిధ పాలసీల గురించి చదవండి
1. VS Codeలో `local.settings.json` ఫైల్ తెరవండి. `Values` సెక్షన్ లో క్రింది అదనపు విలువను చేర్చండి:
```json
"REGISTRY_MANAGER_CONNECTION_STRING": "<connection string>"
```
`<connection string>`ను మునుపటి స్టెప్ లోని విలువతో మాత్రమే మార్చండి. గడచిన లైన్ తర్వాత కామా చేర్చడం మర్చిపోకండి.
### టాస్క్ - పరికరానికి డైరెక్ట్ మెథడ్ రిక్వెస్ట్ పంపండి
1. Registry Manager కొరకు SDK ఒక Pip ప్యాకేజ్ ద్వారా అందుబాటులో ఉంది. ఈ ప్యాకేజ్ కోసం డిపెండెన్సీగా `requirements.txt` ఫైల్‌లో క్రింది లైన్ జోడించండి:
```sh
azure-iot-hub
```
1. VS Code టెర్మినల్ లో వర్చువల్ ఎన్విరాన్మెంట్ అక్టివేట్ అయి ఉందో నిర్ధారించండి, మరియు ఈ క్రింది కమాండ్ నడపండి:
```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}')
```
ఈ కోడ్ ఈవెంట్ శరీరాన్ని ఎక్స్‌ట్రాక్ట్ చేస్తుంది, ఇందులో IoT పరికరం పంపిన JSON సందేశం ఉంటుంది.
తరువాత ఈవెంట్ అనోటేషన్లలోని పరికరం ఐడిని పొందుతుంది. ఈవెంట్ శరీరంలో టెలిమేట్రీగా పంపబడిన సందేశం ఉంటుంది, `iothub_metadata` డిక్షనరీ లో IoT హబ్ సెట్ చేసిన లక్షణాలు ఉంటాయి, ఉదాహరణకి పంపిన పరికరం ID మరియు సందేశ పంపిణీ సమయం.
ఈ సమాచారం తరువాత లాగ్ చేయబడుతుంది. మీరు ఫంక్షన్ యాప్ లోకల్ గా నడిపితే ఈ లాగింగ్ టెర్మినల్ లో కనిపిస్తుంది.
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` అనే డైరెక్ట్ మెథడ్ కోసం సహాయక తరగతిని సృష్టిస్తుంది. మెథడ్ రిక్వెస్ట్ కు payload అవసరం లేదు కాబట్టి ఖాళీ 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 కి ఆTelemetryను పంపిన పరికరానికి డైరెక్ట్ మెథడ్ రిక్వెస్ట్ పంపమని చెబుతుంది.
> 💁 మీరు మునుపటి పాఠాలలో MQTT ఉపయోగించి సృష్టించిన యాప్ యొక్క వెర్షన్లలో, రిళే నియంత్రణ కమాండ్లు అన్ని పరికరాలకు పంపబడ్డాయి. కోడ్ మీరు ఒక్క పరికరం మాత్రమే ఉంటారు అని భావించింది. ఈ కోడ్ వెర్షన్ ఒకే పరికరానికి మేతడ్ అభ్యర్థనను పంపుతుంది, కాబట్టి మీరు బహుళ సర్దుబాటులు ఉన్న మాయిశ్చర్ సెన్సార్లు మరియు రిళేలతో ఉంటే కూడా, సరైన డైరెక్ట్ మేతడ్ అభ్యర్థనని సరైన పరికరానికి పంపుతుంది.
1. ఫంక్షన్స్ యాప్ ను రన్ చేసి, మీ IoT పరికరం డేటా పంపుతోందని నిర్ధారించుకోండి. సందేశాలు ప్రాసెస్ అవుతున్నాయని మరియు డైరెక్ట్ మేతడ్ అభ్యర్థనలు పంపబడుతున్నాయని మీరు చూడగలుగుతారు. సోయిల్ మాయిశ్చర్ సెన్సార్ ని నేల నుండి తీసి నిలిపి, విలువలు మారుతున్నట్లు మరియు రిళే ఆన్, ఆఫ్ అవుతున్నట్లు చూడండి
> 💁 మీరు ఈ కోడ్ ను [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions) ఫోల్డర్ లో కనుగొనవచ్చు.
## మీ సర్వర్‌లెస్ కోడ్‌ను క్లౌడ్‌కి పంపించడం
మీ కోడ్ ప్రస్తుతం లోకల్ గా పని చేస్తోంది, కాబట్టి తరువాతి దశగా ఫంక్షన్స్ యాప్‌ను క్లౌడ్‌కి పంపించాలి.
### టాస్క్ - క్లౌడ్ వనరులను సృష్టించడం
మీ ఫంక్షన్స్ యాప్‌ను Azure లోని ఒక Functions App వనరుగా పంపించాలి, ఇది మీరు మీ IoT హబ్ కోసం సృష్టించిన రిసోర్స్ గ్రూప్ లో ఉంటుంది. మీరు లోకల్‌లో అమలు చేస్తున్న ఎములేటెడ్ నిల్వని భర్తీ చేయడానికి Azureలో ఒక స్టోరేజ్ అకౌంట్ కూడా అవసరం.
1. స్టోరేజ్ అకౌంట్ సృష్టించేందుకు క్రింది కమాండ్ రన్ చేయండి:
```sh
az storage account create --resource-group soil-moisture-sensor \
--sku Standard_LRS \
--name <storage_name>
```
`<storage_name>` ను మీ స్టోరేజ్ అకౌంట్ కోసం ఒక పేరుతో మార్చండి. ఇది గ్లోబల్ గా ప్రత్యేకంగా ఉండాలి ఎందుకంటే ఇది స్టోరేజ్ అకౌంట్ యాక్సెస్ చేయడానికి URL లో భాగమవుతుంది. ఈ పేరులో చిన్నఅక్షరాలు మరియు సంఖ్యలు మాత్రమే ఉండాలి, మిగతా అక్షరాలు ఉపయోగించరాదు,పేరులో గరిష్టంగా 24 అక్షరాలు ఉండాలి. ఉదాహరణకు `sms` లాంటి పేరు తీసుకుని చివరికి ఏదైనా ప్రత్యేక గుర్తు లేదా మీ పేరు జత చేయండి.
`--sku Standard_LRS` పరిగణించబడే ధర స్థాయిని ఎంచుకుంటుంది, ఇది తక్కువ ధర కల గూఢ ప్రదర్శ‌న అకౌంట్. ఫ్రీ స్థాయి నిల్వ లేదు, మీరు ఉపయోగించిన మేరకు చెల్లించాలి. ధరలు తక్కువే, నెలలో గిగాబైట్ స్టోర్ చేసిన అత్యధిక ధర US$0.05 కంటే తక్కువ.
✅ [Azure Storage Account pricing page](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn) పై ధరల గురించి చదవండి.
1. ఫంక్షన్స్ యాప్ సృష్టించేందుకు క్రింది కమాండ్ నడపండి:
```sh
az functionapp create --resource-group soil-moisture-sensor \
--runtime python \
--functions-version 3 \
--os-type Linux \
--consumption-plan-location <location> \
--storage-account <storage_name> \
--name <functions_app_name>
```
మీరు రిసోర్స్ గ్రూప్ సృష్టించినప్పుడు ఉపయోగించిన `<location>` తో తరగించండి.
ముందు అడుగులో క్రియేట్ చేసిన స్టోరేజ్ అకౌంట్ పేరుతో `<storage_name>` మార్చండి.
మీ ఫంక్షన్స్ యాప్ కోసం ఒక ప్రత్యేకమైన పేరు గా `<functions_app_name>` మార్చండి. ఇది గ్లోబల్ గా ప్రత్యేకంగా ఉండాలి ఎందుకంటే ఇది యాక్సెస్ URL లో భాగమే. ఉదాహరణకు `soil-moisture-sensor-` అని ప్రారంభించి చివరికి ఏదైనా ప్రత్యేక గుర్తు లేదా మీ పేరు జత చేయండి.
`--functions-version 3` ఆప్షన్ అజూర్ ఫంక్షన్స్ వర్షన్ 3 ని సెట్ చేస్తుంది, ఇది తాజా వర్షన్.
`--os-type Linux` ఆప్షన్ అజర్ ఫంక్షన్స్ రన్‌టైమ్ కు లినక్స్ OS ను ఫంక్షన్స్ హోస్ట్ చేయడానికి సూచిస్తుంది. ఫంక్షన్స్ లినక్స్ లేదా విండోస్ డ్రైవ్ చేయబడవచ్చు, ఇది ఎంపిక ప్రోగ్రామింగ్ భాషపై ఆధారపడి ఉంటుంది. పైథాన్ యాప్స్ కేవలం లినక్స్ మద్దతు ఉంటాయి.
### టాస్క్ - మీ అప్లికేషన్ సెట్టింగ్స్‌ను అప్‌లోడ్ చేయండి
మీ ఫంక్షన్స్ యాప్ అభివృద్ధి సమయంలో, మీరు `local.settings.json` ఫైలులో మీరు IoT హబ్ కనెక్షన్ స్ట్రింగ్‌లను నిల్వ చేసారు. ఈ సెట్టింగ్స్ Azure లోని మీ ఫంక్షన్స్ యాప్ లో అప్లికేషన్ సెట్టింగ్స్ గా రాయాలి, తద్వారా అవి మీ కోడ్ ద్వారా ఉపయోగించబడేలా ఉంటాయి.
> 🎓 `local.settings.json` ఫైల్ లోకల్ అభివృద్ధి సెట్టింగ్స్ కోసం మాత్రమే ఉంటుంది, మరియు వీటిని గిట్‌హబ్ వంటి సోర్స్ కోడ్ కంట్రోల్‌లో ఉంచకూడదు. క్లౌడ్‌కు పంపించినప్పుడు, అప్లికేషన్ సెట్టింగ్స్ ఉపయోగిస్తారు. అప్లికేషన్ సెట్టింగ్స్ అనేవి క్లౌడ్‌లో ఉన్న కీల/విలువ జతలు, ఇవి మీ కోడ్ లొకోలి లేదా రన్‌టైమ్ ద్వారా వాతావరణ వేరియబుల్స్ లో చదవబడతాయి, అవి మీ కోడ్‌ను IoT హబ్‌తో కనెక్ట్ చేస్తాయి.
1. ఫంక్షన్స్ యాప్ అప్లికేషన్ సెట్టింగ్స్ లో `IOT_HUB_CONNECTION_STRING` సెట్టింగ్ ను క్రింది కమాండ్ రన్ చేసి సెట్ చేయండి:
```sh
az functionapp config appsettings set --resource-group soil-moisture-sensor \
--name <functions_app_name> \
--settings "IOT_HUB_CONNECTION_STRING=<connection string>"
```
మీ ఫంక్షన్స్ యాప్ పేరుతో `<functions_app_name>` మార్చండి.
`local.settings.json` లోని `IOT_HUB_CONNECTION_STRING` విలువతో `<connection string>` మార్చండి.
1. పై స్టెప్ను పునరావృతం చేసి, `REGISTRY_MANAGER_CONNECTION_STRING` విలువను `local.settings.json` నుండి తీసుకొని సెట్ చేయండి.
ఈ కమాండ్లు నడిపినప్పుడు, ఫంక్షన్ యాప్ యొక్క అన్ని అప్లికేషన్ సెట్టింగ్స్ జాబితాను అవుట్‌పుట్ చేస్తాయి. ఈ జాబితాను ఉపయోగించి మీ విలువలు సరిగా సెట్ అయ్యాయా అని నిర్ధారించుకోండి.
> 💁 `AzureWebJobsStorage` అనే విలువ ఇప్పటికే సెట్ అయింది. మీ `local.settings.json` ఫైల్ లో ఇది లోకల్ నిల్వ ఎమ్యులేటర్‌ను ఉపయోగించడానికి సెట్ చేయబడింది. మీరు ఫంక్షన్స్ యాప్ సృష్టించినప్పుడు స్టోరేజ్ అకౌంట్ పేరామితిని అందిస్తారు, ఇది ఈ సెట్టింగ్‌లో ఆటోమేటిక్‌గా సెట్ అవుతుంది.
### టాస్క్ - మీ ఫంక్షన్స్ యాప్ ను క్లౌడ్ కి పంపించండి
ఫంక్షన్స్ యాప్ సిద్ధంగా ఉన్నందున, మీరు కోడ్‌ను పంపించవచ్చు.
1. VS కోడ్ టెర్మినల్ నుండి క్రింది కమాండ్ రన్ చేసి ఫంక్షన్స్ యాప్‌ను ప్రచురించండి:
```sh
func azure functionapp publish <functions_app_name>
```
మీ ఫంక్షన్స్ యాప్ పేరుతో `<functions_app_name>` మార్చండి.
కోడ్ ప్యాకేజ్ చేసి, ఫంక్షన్స్ యాప్ కు పంపబడుతుంది; అక్కడ ఇది డిప్లాయ్ అవుతుంది మరియు ప్రారంభమవుతుంది. కన్సోల్ ఆఉట్‌పుట్లో చాలా పాఠ్యాలు ఉంటాయి, చివరగా డిప్లాయ్‌మెంట్ ధృవీకరణ మరియు డిప్లాయ్ అయిన ఫంక్షన్ల జాబితా ఉంటుంది. ఈ సందర్భంలో, జాబితా ఒకటే ట్రిగ్గర్‌ను మాత్రమే కలిగి ఉంటుంది.
```output
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in soil-moisture-sensor:
iot-hub-trigger - [eventHubTrigger]
```
మీ IoT పరికరం పని చేస్తున్నదని నిర్ధారించుకోండి. నేల మాయిశ్చర్ స్థాయిలను మార్చండి, లేదా సెన్సార్‌ను నేల నుండి తీసి పెట్టండి. నేల మాయిశ్చర్ మారినప్పుడు రిళే ఆన్, ఆఫ్ అవుతున్నది చూస్తారు.
---
## 🚀 సవాలు
మునుపటి పాఠంలో, మీరు రిళే కోసం సమయ నియంత్రణను MQTT సందేశాల నుండి అన్‌సబ్స్క్రైబ్ చేయడం ద్వారా నిర్వహించారు, రిళే ఆన్ ఉన్నప్పుడు మరియు ఆఫ్ అయిన కొన్ని సెకన్లపాటు. ఇక్కడ ఈ పద్ధతి ఉపయోగించలేరు - మీరు మీ IoT హబ్ ట్రిగ్గర్ నుండి అన్‌సబ్స్క్రైబ్ చేయలేరు.
మీ Functions App లో ఇక్కడ వివిధ విధానాలు ఉపయోగించి దీన్ని ఎలా నిర్వహించవచ్చో ఆలోచించండి.
## పాఠం తర్వాత పరీక్ష
[Post-lecture quiz](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18)
## సమీక్ష & స్వీయ అధ్యయనం
* సర్వర్‌లెస్ కంప్యూటింగ్ పై చదవండి [Serverless Computing page on Wikipedia](https://wikipedia.org/wiki/Serverless_computing)
* అజూర్ లో సర్వర్‌లెస్ ఎలా ఉపయోగించాలో చదవండి, తదితర ఉదాహరణలతో [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 YouTube channel](https://www.youtube.com/c/AzureFunctions)
## అసైన్‌మెంట్
[Add manual relay control](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**అస్పష్టం**:
ఈ డాక్యుమెంట్ AI అనువాద సేవ అయిన [Co-op Translator](https://github.com/Azure/co-op-translator) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రాధాన్యత ఇస్తున్నప్పటికీ, ఆటోమేటిక్ అనువాదాల్లో తప్పిదాలు లేదా అసత్యతలు ఉండవచ్చని దయచేసి గమనించండి. స్వదేశీ భాషలో ఉన్న అసలు డాక్యుమెంట్ ని అధికారిక మూలంగా పరిగణించాలి. కీలక సమాచారం కోసం, ప్రొఫెషనల్ మానవ అనువాదం చేయించుకోవడం మంచిది. ఈ అనువాదం వలన పొరపాటు అర్థాలు లేదా తప్పుగా అర్థం చేసుకోవడంపై మేము బాధ్యులు కాదు.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->