Az Azure Functions Csatlakozás az Azure Cosmos DB-be a Visual Studio Code használatával
Az Azure Functions segítségével anélkül csatlakoztathatja az Azure-szolgáltatásokat és más erőforrásokat a függvényekhez, hogy saját integrációs kódot kellene írnia. Ezek a kötések, amelyek mind a bemenetet, mind a kimenetet képviselik, a függvénydefinícióban deklarálódnak. A kötések adatai a függvények számára paraméterekként vannak megadva. Az eseményindító egy speciális típusú bemeneti kötés. Bár egy függvénynek csak egy eseményindítója van, több bemeneti és kimeneti kötéssel is rendelkezhet. További információ: Azure Functions-eseményindítók és kötések fogalmai.
Ez a cikk bemutatja, hogyan csatlakoztathatja az Azure Cosmos DB-t az előző rövid útmutatóban létrehozott függvényhez a Visual Studio Code használatával. A függvényhez hozzáadott kimeneti kötés adatokat ír a HTTP-kérelemből egy Azure Cosmos DB-tárolóban tárolt JSON-dokumentumba.
Mielőtt hozzákezdene, el kell végeznie a következő rövid útmutatót: C#-függvény létrehozása az Azure-ban a Visual Studio Code használatával. Ha a cikk végén már megtisztította az erőforrásokat, végezze el újra a lépéseket a függvényalkalmazás és a kapcsolódó erőforrások Azure-beli újbóli létrehozásához.
Mielőtt hozzákezdene, el kell végeznie a következő rövid útmutatót: JavaScript-függvény létrehozása az Azure-ban a Visual Studio Code használatával. Ha a cikk végén már megtisztította az erőforrásokat, végezze el újra a lépéseket a függvényalkalmazás és a kapcsolódó erőforrások Azure-beli újbóli létrehozásához.
Feljegyzés
Ez a cikk jelenleg csak a Functions Node.js v3-at támogatja.
Mielőtt hozzákezdene, el kell végeznie a rövid útmutatót: Python-függvény létrehozása az Azure-ban a Visual Studio Code használatával. Ha a cikk végén már megtisztította az erőforrásokat, végezze el újra a lépéseket a függvényalkalmazás és a kapcsolódó erőforrások Azure-beli újbóli létrehozásához.
A környezet konfigurálása
Mielőtt hozzákezd, telepítse a Visual Studio Code Azure Databases bővítményét .
Azure Cosmos DB-fiók létrehozása
Most létrehoz egy Azure Cosmos DB-fiókot kiszolgáló nélküli fióktípusként. Ez a használatalapú mód erős lehetőséget biztosít az Azure Cosmos DB-nek a kiszolgáló nélküli számítási feladatokhoz.
A Visual Studio Code-ban válassza a Parancskatalógus megtekintése>lehetőséget, majd a parancskatalógusban keresse meg a következőt:
Azure Databases: Create Server...
Amikor a rendszer kéri, adja meg az alábbi információkat:
Felszólítás Kiválasztás Azure Database Server kiválasztása Válassza a Core (NoSQL) lehetőséget egy olyan dokumentumadatbázis létrehozásához, amelyet egy SQL-szintaxis vagy egy lekérdezési másodpilóta (előzetes verzió) használatával kérdezhet le, és a természetes nyelvi kéréseket lekérdezésekké konvertálja. További információ az Azure Cosmos DB-ről. Fióknév Adjon meg egy egyedi nevet az Azure Cosmos DB-fiók azonosításához. A fióknév csak kisbetűket, számokat és kötőjeleket (-) használhat, és 3 és 31 karakter közötti hosszúságúnak kell lennie. Kapacitásmodell kiválasztása A Kiszolgáló nélküli lehetőséget választva kiszolgáló nélküli módban hozhat létre fiókot. Erőforráscsoport kiválasztása új erőforrásokhoz Válassza ki azt az erőforráscsoportot, amelyben létrehozta a függvényalkalmazást az előző cikkben. Új erőforrások helyének kiválasztása Válassza ki az Azure Cosmos DB-fiókot üzemeltetéséhez használni kívánt földrajzi helyet. Használja az Önhöz vagy a felhasználókhoz legközelebbi helyet az adatokhoz való leggyorsabb hozzáféréshez. Az új fiók kiépítése után egy üzenet jelenik meg az értesítési területen.
Azure Cosmos DB-adatbázis és -tároló létrehozása
Válassza ki az Azure ikont a Tevékenységsávon, bontsa ki az Erőforrások Azure>Cosmos DB-t, kattintson a jobb gombbal (Ctrl+select on macOS) a fiókjára, és válassza az Adatbázis létrehozása...lehetőséget.
Amikor a rendszer kéri, adja meg az alábbi információkat:
Felszólítás Kiválasztás Adatbázis neve Gépelje be: my-database
.Adja meg és adja meg a gyűjtemény azonosítóját Gépelje be: my-container
.Adja meg a gyűjtemény partíciókulcsát Írja be /id
a partíciókulcsot.Kattintson az OK gombra a tároló és az adatbázis létrehozásához.
A függvényalkalmazás beállításainak frissítése
Az előző rövid útmutatóban létrehozott egy függvényalkalmazást az Azure-ban. Ebben a cikkben úgy frissíti az alkalmazást, hogy JSON-dokumentumokat írjon a létrehozott Azure Cosmos DB-tárolóba. Az Azure Cosmos DB-fiókhoz való csatlakozáshoz hozzá kell adnia annak kapcsolati sztring az alkalmazásbeállításokhoz. Ezután töltse le az új beállítást a local.settings.json fájlba, hogy helyi futtatáskor csatlakozzon az Azure Cosmos DB-fiókjához.
A Visual Studio Code-ban kattintson a jobb gombbal (ctrl+select on macOS) az új Azure Cosmos DB-fiókon, és válassza a Másolás Csatlakozás ion sztringet.
Nyomja le az F1 billentyűt a parancskatalógus megnyitásához, majd keresse meg és futtassa a parancsot
Azure Functions: Add New Setting...
.Válassza ki az előző cikkben létrehozott függvényalkalmazást. Amikor a rendszer kéri, adja meg az alábbi információkat:
Felszólítás Kiválasztás Új alkalmazásbeállítás nevének megadása Gépelje be: CosmosDbConnectionSetting
.Adja meg a "CosmosDb Csatlakozás ionSetting" értékét Illessze be a másolt Azure Cosmos DB-fiók kapcsolati sztring. A Microsoft Entra-identitást alternatívaként is konfigurálhatja. Ezzel létrehoz egy kapcsolat
CosmosDbConnectionSetting
nevű alkalmazásbeállítást a függvényalkalmazásban az Azure-ban. Most letöltheti ezt a beállítást a local.settings.json fájlba.Nyomja le ismét az F1 billentyűt a parancskatalógus megnyitásához, majd keresse meg és futtassa a parancsot
Azure Functions: Download Remote Settings...
.Válassza ki az előző cikkben létrehozott függvényalkalmazást. Az Igen elemet választva felülírhatja a meglévő helyi beállításokat.
Ez letölti az összes beállítást az Azure-ból a helyi projektbe, beleértve az új kapcsolati sztring beállítást is. A letöltött beállítások többsége nem használható helyi futtatáskor.
Kötési bővítmények regisztrálása
Mivel Azure Cosmos DB kimeneti kötést használ, a projekt futtatása előtt telepítenie kell a megfelelő kötési bővítményt.
A HTTP- és időzítő-eseményindítók kivételével a kötések bővítménycsomagként vannak implementálva. Futtassa a következő dotnet add package parancsot a terminálablakban az Azure Cosmos DB bővítménycsomag projekthez való hozzáadásához.
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
A projekt bővítménykötegek használatára lett konfigurálva, amely automatikusan telepíti az előre meghatározott bővítménycsomagokat.
A bővítménycsomagok használata engedélyezve van a projekt gyökerénél található host.json fájlban, amely az alábbiak szerint jelenik meg:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
},
"extensions": {
"cosmosDB": {
"connectionMode": "Gateway"
}
}
}
A projekt bővítménykötegek használatára lett konfigurálva, amely automatikusan telepíti az előre meghatározott bővítménycsomagokat.
A bővítménycsomagok használata engedélyezve van a projekt gyökerénél található host.json fájlban, amely az alábbiak szerint jelenik meg:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
Most hozzáadhatja az Azure Cosmos DB kimeneti kötését a projekthez.
Kimeneti kötés hozzáadása
Egy C#-osztálytárprojektben a kötések a függvénymetódus kötési attribútumaiként vannak definiálva.
Nyissa meg a HttpExample.cs projektfájlt, és adja hozzá a következő osztályokat:
public class MultiResponse
{
[CosmosDBOutput("my-database", "my-container",
Connection = "CosmosDbConnectionSetting", CreateIfNotExists = true)]
public MyDocument Document { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
public class MyDocument {
public string id { get; set; }
public string message { get; set; }
}
Az MyDocument
osztály definiál egy objektumot, amely az adatbázisba lesz beírva. A Storage-fiók kapcsolati sztring a Connection
tulajdonság állítja be. Ebben az esetben kihagyhatja Connection
, mert már használja az alapértelmezett tárfiókot.
Az MultiResponse
osztály lehetővé teszi, hogy mindkettő az Azure Cosmos DB megadott gyűjteményébe írjon, és http-sikerüzenetet adjon vissza. Mivel vissza kell adnia egy MultiResponse
objektumot, frissítenie kell a metódus aláírását is.
Bizonyos attribútumok határozzák meg a tároló nevét és a szülőadatbázis nevét. Az Azure Cosmos DB-fiók kapcsolati sztring a CosmosDbConnectionSetting
.
A kötési attribútumok közvetlenül a függvénykódban vannak definiálva. Az Azure Cosmos DB kimeneti konfigurációja az Azure Cosmos DB kimeneti kötéséhez szükséges mezőket ismerteti.
Ebben a MultiResponse
forgatókönyvben kimeneti kötést extraOutputs
kell hozzáadnia a függvényhez.
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
Adja hozzá a következő tulajdonságokat a kötéskonfigurációhoz:
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
A kötési attribútumok közvetlenül a function_app.py fájlban vannak definiálva. A dekorátor használatával cosmos_db_output
hozzáadhat egy Azure Cosmos DB kimeneti kötést:
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database",
container_name="my-container", connection="CosmosDbConnectionSetting")
Ebben a kódban arg_name
azonosítja a kódban hivatkozott kötési paramétert, valamint container_name
azokat az adatbázis- és gyűjteményneveket, database_name
amelyekre a kötés ír, valamint connection
egy olyan alkalmazásbeállítás neve, amely tartalmazza az Azure Cosmos DB-fiók kapcsolati sztring, amely a CosmosDbConnectionSetting
local.settings.json fájlban található beállításban található.
Kimeneti kötést használó kód hozzáadása
Cserélje le a meglévő futtatási metódust a következő kódra:
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("HttpExample");
logger.LogInformation("C# HTTP trigger function processed a request.");
var message = "Welcome to Azure Functions!";
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString(message);
// Return a response to both HTTP trigger and Azure Cosmos DB output binding.
return new MultiResponse()
{
Document = new MyDocument
{
id = System.Guid.NewGuid().ToString(),
message = message
},
HttpResponse = response
};
}
Adjon hozzá egy kódot, amely a extraInputs
kimeneti kötési objektumot context
használja, hogy JSON-dokumentumot küldjön a nevesített kimeneti kötési függvénynek. sendToCosmosDb
Adja hozzá ezt a kódot az return
utasítás előtt.
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
Ezen a ponton a függvénynek a következőképpen kell kinéznie:
const { app, output } = require('@azure/functions');
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
app.http('HttpExampleToCosmosDB', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
if (!name) {
return { status: 404, body: 'Missing required data' };
}
// Output to Database
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
const responseMessage = name
? 'Hello, ' +
name +
'. This HTTP triggered function executed successfully.'
: 'This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.';
// Return to HTTP client
return { body: responseMessage };
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
},
});
Ez a kód most egy MultiResponse
olyan objektumot ad vissza, amely dokumentumot és HTTP-választ is tartalmaz.
Frissítse a HttpExample\function_app.py az alábbi kódnak megfelelően. Adja hozzá a paramétert outputDocument
a függvénydefinícióhoz és outputDocument.set()
az if name:
utasítás alatt:
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", container_name="my-container", connection="CosmosDbConnectionSetting")
def test_function(req: func.HttpRequest, msg: func.Out[func.QueueMessage],
outputDocument: func.Out[func.Document]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
logging.info('Python Cosmos DB trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
outputDocument.set(func.Document.from_dict({"id": name}))
msg.set(name)
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
A dokumentum {"id": "name"}
a kötésben megadott adatbázis-gyűjteményben jön létre.
Függvény helyi futtatása
A Visual Studio Code az Azure Functions Core-eszközökkel integrálva lehetővé teszi a projekt helyi fejlesztői számítógépen való futtatását, mielőtt közzétennénk az Azure-ban. Ha még nincs telepítve helyileg a Core Tools, a rendszer a projekt első futtatásakor kéri a telepítést.
A függvény meghívásához nyomja le az F5 billentyűt a függvényalkalmazás-projekt elindításához. A Terminál panelen a Core Tools kimenete látható. Az alkalmazás a Terminál panelen kezdődik. A HTTP által aktivált függvény URL-végpontja helyileg fut.
Ha még nincs telepítve a Core Tools, válassza a Telepítés lehetőséget a Core Tools telepítéséhez, amikor a rendszer erre kéri.
Ha problémákat tapasztal a Windows rendszeren való futtatással, győződjön meg arról, hogy a Visual Studio Code alapértelmezett terminálja nincs beállítva WSL Bash-ra.A Core Tools futtatásával lépjen az Azure: Functions területre. A Függvények területen bontsa ki a Helyi projektfüggvényeket>. Kattintson a jobb gombbal (Windows) vagy Ctrl billentyűkombinációra – kattintson a függvényre (macOS), és válassza a
HttpExample
Függvény végrehajtása parancsot....Az Enter kérelem törzsében nyomja le az Enter billentyűt, és küldjön egy kérésüzenetet a függvénynek.
Amikor a függvény helyileg fut, és választ ad vissza, a Rendszer értesítést küld a Visual Studio Code-ban. A függvény végrehajtásával kapcsolatos információk a Terminál panelen jelennek meg.
Nyomja le a Ctrl + C billentyűkombinációt a Core Tools leállításához és a hibakereső leválasztásához.
Függvény helyi futtatása
Az előző cikkhez hasonlóan nyomja le az F5 billentyűt a függvényalkalmazás-projekt és a Core Tools elindításához.
A Core Tools futtatásával lépjen az Azure: Functions területre. A Függvények területen bontsa ki a Helyi projektfüggvényeket>. Kattintson a jobb gombbal a függvényre (Ctrl billentyűt lenyomva tartva), és válassza a
HttpExample
Függvény végrehajtása parancsot....Az Enter kérelemtörzsben a kérelemüzenet törzsértéke jelenik
{ "name": "Azure" }
meg. Az Enter billentyűt lenyomva küldje el ezt a kérésüzenetet a függvénynek.A válasz visszaadása után nyomja le a Ctrl + C billentyűkombinációt a Core Tools leállításához.
JSON-dokumentum létrehozásának ellenőrzése
Az Azure Portalon lépjen vissza az Azure Cosmos DB-fiókjához, és válassza az Adatkezelőt.
Bontsa ki az adatbázist és a tárolót, és válassza az Elemek lehetőséget a tárolóban létrehozott dokumentumok listázásához.
Ellenőrizze, hogy a kimeneti kötés létrehozott-e új JSON-dokumentumot.
A frissített alkalmazás ismételt üzembe helyezése és ellenőrzése
A Visual Studio Code-ban nyomja le az F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a kívánt parancsot
Azure Functions: Deploy to function app...
.Válassza ki az első cikkben létrehozott függvényalkalmazást. Mivel újra üzembe helyezi a projektet ugyanabba az alkalmazásba, válassza az Üzembe helyezés lehetőséget a fájlok felülírására vonatkozó figyelmeztetés elvetéséhez.
Az üzembe helyezés befejezése után ismét használhatja az Execute Function Now... funkciót a függvény azure-beli aktiválásához.
Ellenőrizze ismét az Azure Cosmos DB-tárolóban létrehozott dokumentumokat, és ellenőrizze, hogy a kimeneti kötés ismét létrehoz-e új JSON-dokumentumot.
Az erőforrások eltávolítása
Az Azure-ban az erőforrások függvényalkalmazásokra, függvényekre, tárfiókokra és így tovább. Ezek erőforráscsoportokba vannak csoportosítva, és a csoport törlésével törölheti a csoport összes elemét.
E rövid útmutatók elvégzéséhez erőforrásokat hozott létre. Előfordulhat, hogy ezekért az erőforrásokért a fiók állapotától és a szolgáltatás díjszabásától függően kell fizetnie. Ha már nincs szüksége ezekre az erőforrásokra, a következőképpen törölheti őket:
A Visual Studio Code-ban nyomja le az F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a kívánt parancsot
Azure: Open in portal
.Válassza ki a függvényalkalmazást, és nyomja le az Enter billentyűt. Megnyílik a függvényalkalmazás lapja az Azure Portalon.
Az Áttekintés lapon válassza az Erőforráscsoport melletti elnevezett hivatkozást.
Az Erőforráscsoport lapon tekintse át a belefoglalt erőforrások listáját, és ellenőrizze, hogy ezek-e törölni kívánt erőforrások.
Válassza az Erőforráscsoport törlése elemet, majd kövesse az utasításokat.
A törlés eltarthat néhány percig. Amint a művelet befejeződött, néhány másodpercre egy értesítés jelenik meg. Az értesítést úgy is megtekintheti, ha kiválasztja a harang ikont az oldal tetején.
Következő lépések
Frissítette a HTTP által aktivált függvényt, hogy JSON-dokumentumokat írjon egy Azure Cosmos DB-tárolóba. Most már többet tudhat meg a Functions Visual Studio Code-tal történő fejlesztéséről: