Megosztás a következőn keresztül:


Azure Database for MySQL kimeneti kötés az Azure Functionshez

Az Azure Database for MySQL kimeneti kötésével írhat egy adatbázisba.

A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.

Fontos

Ez a cikk lapokat használ a Node.js programozási modell több verziójának támogatásához. A v4-modell általánosan elérhető, és úgy lett kialakítva, hogy rugalmasabb és intuitívabb felhasználói élményt nyújtson JavaScript- és TypeScript-fejlesztők számára. A v4-modell működésével kapcsolatos további információkért tekintse meg az Azure Functions Node.js fejlesztői útmutatóját. A v3 és a v4 közötti különbségekről a migrálási útmutatóban olvashat bővebben.

Példák

C# függvényt az alábbi C# módok egyikével hozhat létre:

  • Izolált feldolgozómodell: Lefordított C# függvény, amely a futtatókörnyezettől elkülönített feldolgozói folyamatban fut. Izolált feldolgozói folyamat szükséges a hosszú távú támogatáson (LTS) futó C# függvények támogatásához, valamint a .NET és a .NET-keretrendszer nem LTS-verzióihoz.
  • Folyamatban lévő modell: Lefordított C# függvény, amely ugyanabban a folyamatban fut, mint az Azure Functions futtatókörnyezete.
  • C#-szkript: Elsősorban C#-függvények Azure Portalon való létrehozásakor használatos.

Az Azure Database for MySQL kimeneti kötéséhez további minták érhetők el a GitHub-adattárban.

Ez a szakasz a következő példát tartalmazza:

A példa egy Product osztályra és egy megfelelő adatbázistáblára hivatkozik:

namespace AzureMySqlSamples.Common
{
    public class Product
    {
        public int? ProductId { get; set; }

        public string Name { get; set; }

        public int Cost { get; set; }

        public override bool Equals(object obj)
    }
}
DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

HTTP-eseményindító, egy rekord írása

Az alábbi példa egy C# függvényt mutat be, amely egy rekordot ad hozzá egy adatbázishoz egy HTTP-kérelemben POST megadott adatok JSON-törzsként való használatával.

using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.MySql;
using Microsoft.Azure.Functions.Worker.Http;
using AzureMySqlSamples.Common;

namespace AzureMySqlSamples.OutputBindingSamples
{
    public static class AddProduct
    {
        [FunctionName(nameof(AddProduct))]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "addproduct")]
            [FromBody] Product prod,
            [MySql("Products", "MySqlConnectionString")] out Product product)
        {
            product = prod;
            return new CreatedResult($"/api/addproduct", product);
        }
    }
}

Az Azure Database for MySQL kimeneti kötéséhez további minták érhetők el a GitHub-adattárban.

Ez a szakasz a következő példát tartalmazza:

A példa egy Product osztályra és egy megfelelő adatbázistáblára hivatkozik:

package com.function.Common;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Product {
    @JsonProperty("ProductId")
    private int ProductId;
    @JsonProperty("Name")
    private String Name;
    @JsonProperty("Cost")
    private int Cost;

    public Product() {
    }

    public Product(int productId, String name, int cost) {
        ProductId = productId;
        Name = name;
        Cost = cost;
    }
}
DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

HTTP-eseményindító, rekord írása egy táblába

Az alábbi példa egy Azure Database for MySQL kimeneti kötést mutat be egy Java-függvényben, amely egy rekordot ad hozzá egy táblához egy HTTP-kérelemben POST megadott adatok JSON-törzsként való használatával. A függvény további függőséget vesz fel a com.google.code.gson kódtártól a JSON-törzs elemzéséhez.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
package com.function;

import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.OutputBinding;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.mysql.annotation.MySqlOutput;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.function.Common.Product;

import java.io.IOException;
import java.util.Optional;

public class AddProduct {
    @FunctionName("AddProduct")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS,
                route = "addproduct")
                HttpRequestMessage<Optional<String>> request,
            @MySqlOutput(
                name = "product",
                commandText = "Products",
                connectionStringSetting = "MySqlConnectionString")
                OutputBinding<Product> product) throws JsonParseException, JsonMappingException, IOException {

        String json = request.getBody().get();
        ObjectMapper mapper = new ObjectMapper();
        Product p = mapper.readValue(json, Product.class);
        product.setValue(p);

        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(product).build();
    }
}

Az Azure Database for MySQL kimeneti kötéséhez további minták érhetők el a GitHub-adattárban.

Ez a szakasz a következő példát tartalmazza:

A példa egy adatbázistáblára hivatkozik:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

HTTP-eseményindító, rekordok írása egy táblába

Az alábbi példa egy Azure Database for MySQL kimeneti kötést mutat be, amely rekordokat ad hozzá egy táblához egy HTTP-kérelemben POST megadott adatok JSON-törzsként való használatával.

const { app, output } = require('@azure/functions');

const mysqlOutput = output.generic({
    type: 'mysql',
    commandText: 'Products',
    connectionStringSetting: 'MySqlConnectionString'
})

// Upsert the product, which will insert it into the Products table if the primary key (ProductId) for that item doesn't exist.
// If it does, update it to have the new name and cost.
app.http('AddProduct', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [mysqlOutput],
    handler: async (request, context) => {
        // Note that this expects the body to be a JSON object or array of objects that have a property
        // matching each of the columns in the table to upsert to.
        const product = await request.json();
        context.extraOutputs.set(mysqlOutput, product);

        return {
            status: 201,
            body: JSON.stringify(product)
        };
    }
});
const { app, output } = require('@azure/functions');

const mysqlOutput = output.generic({
    type: 'mysql',
    commandText: 'Products',
    connectionStringSetting: 'MySqlConnectionString'
})

// Upsert the product, which will insert it into the Products table if the primary key (ProductId) for that item doesn't exist.
// If it does, update it to have the new name and cost.
app.http('AddProduct', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [mysqlOutput],
    handler: async (request, context) => {
        // Note that this expects the body to be a JSON object or array of objects that have a property
        // matching each of the columns in the table to upsert to.
        const product = await request.json();
        context.extraOutputs.set(mysqlOutput, product);

        return {
            status: 201,
            body: JSON.stringify(product)
        };
    }
});

Az Azure Database for MySQL kimeneti kötéséhez további minták érhetők el a GitHub-adattárban.

Ez a szakasz a következő példát tartalmazza:

A példa egy adatbázistáblára hivatkozik:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

HTTP-eseményindító, rekordok írása egy táblába

Az alábbi példa egy Azure Database for MySQL kimeneti kötést mutat be egy function.json fájlban, valamint egy PowerShell-függvényt, amely rekordokat ad hozzá egy táblához egy HTTP-kérelemben POST megadott adatok JSON-törzsként való használatával.

A következő példa a kötési adatok a function.json fájlban:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "Request",
      "direction": "in",
      "type": "httpTrigger",
      "methods": [
        "post"
      ],
      "route": "addproduct"
    },
    {
      "name": "response",
      "type": "http",
      "direction": "out"
    },
    {
      "name": "product",
      "type": "mysql",
      "direction": "out",
      "commandText": "Products",
      "connectionStringSetting": "MySqlConnectionString"
    }
  ],
  "disabled": false
}

A Konfiguráció szakasz ezeket a tulajdonságokat ismerteti.

Az alábbi példa a run.ps1 fájlban található függvény PowerShell-kódjának mintája:

using namespace System.Net

# Trigger binding data passed in via parameter block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell function with MySql Output Binding processed a request."

# Note that this expects the body to be a JSON object or array of objects 
# that have a property matching each of the columns in the table to upsert to.
$req_body = $Request.Body

# Assign the value that you want to pass to the MySQL output binding. 
# The -Name value corresponds to the name property in the function.json file for the binding.
Push-OutputBinding -Name product -Value $req_body

# Assign the value to return as the HTTP response. 
# The -Name value matches the name property in the function.json file for the binding.
Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

Az Azure Database for MySQL kimeneti kötéséhez további minták érhetők el a GitHub-adattárban.

Ez a szakasz a következő példát tartalmazza:

A példa egy adatbázistáblára hivatkozik:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Feljegyzés

A Pythonhoz az Azure Functions 1.22.0b4-es verzióját kell használnia.

HTTP-eseményindító, rekordok írása egy táblába

Az alábbi példa egy Azure Database for MySQL kimeneti kötést mutat be egy function.json fájlban, valamint egy Python-függvényt, amely rekordokat ad hozzá egy táblához egy HTTP-kérelemben POST megadott adatok JSON-törzsként való használatával.

Az alábbi példa a function_app.py fájlhoz tartozó Python-mintakód:

import json 

import azure.functions as func

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.generic_trigger(arg_name="req", type="httpTrigger", route="addproduct")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_output_binding(arg_name="r", type="mysql",
                            command_text="Products",
                            connection_string_setting="MySqlConnectionString")
def mysql_output(req: func.HttpRequest, r: func.Out[func.MySqlRow]) \
        -> func.HttpResponse:
    body = json.loads(req.get_body())
    row = func.MySqlRow.from_dict(body)
    r.set(row)

    return func.HttpResponse(
        body=req.get_body(),
        status_code=201,
        mimetype="application/json"
    )

Attribútumok

A C#-kódtár az MySqlAttribute attribútummal deklarálja a MySQL-kötéseket a függvényen, amely a következő tulajdonságokkal rendelkezik:

Attribútumtulajdonság Leírás
CommandText Szükséges. Annak a táblának a neve, amelybe a kötés ír.
ConnectionStringSetting Szükséges. Egy alkalmazásbeállítás neve, amely tartalmazza annak az adatbázisnak a kapcsolati sztringét, amelyhez az adatok megírása történik. Ez az érték nem a tényleges kapcsolati sztring, hanem egy környezeti változóra kell feloldani.

Jegyzetek

A Java-függvények futtatókörnyezeti kódtárában használja a széljegyzetet azon @MySQLOutput paramétereken, amelyek értéke az Azure Database for MySQL-ből származna. Ez a széljegyzet a következő elemeket támogatja:

Elem Leírás
commandText Szükséges. Annak a táblának a neve, amelybe a kötés ír.
connectionStringSetting Szükséges. Egy alkalmazásbeállítás neve, amely tartalmazza annak az adatbázisnak a kapcsolati sztringét, amelyhez az adatok megírása történik. Ez az érték nem a tényleges kapcsolati sztring, hanem egy környezeti változóra kell feloldani.
name Szükséges. A függvénykötés egyedi neve.

Konfiguráció

Az alábbi táblázat a metódusnak options átadott objektumon output.generic() beállítható tulajdonságokat ismerteti:

Tulajdonság Leírás
commandText Szükséges. Annak a táblának a neve, amelybe a kötés ír.
connectionStringSetting Szükséges. Egy alkalmazásbeállítás neve, amely tartalmazza annak az adatbázisnak a kapcsolati sztringét, amelyhez az adatok megírása történik. Ez az érték nem a tényleges kapcsolati sztring, hanem egy környezeti változóra kell feloldani.

Konfiguráció

Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti:

Tulajdonság Leírás
type Szükséges. A beállításnak a Mysqlkövetkezőnek kell lennie: .
direction Szükséges. A beállításnak a outkövetkezőnek kell lennie: .
name Szükséges. Annak a változónak a neve, amely az entitást jelöli a függvénykódban.
commandText Szükséges. Annak a táblának a neve, amelybe a kötés ír.
connectionStringSetting Szükséges. Egy alkalmazásbeállítás neve, amely tartalmazza annak az adatbázisnak a kapcsolati sztringét, amelyhez az adatok megírása történik. Ez az érték nem a tényleges kapcsolati sztring, hanem egy környezeti változóra kell feloldani.

Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues.

Feljegyzés

A kimeneti kötés támogatja az összes speciális karaktert, beleértve a dollárjelet ($), a backtick ('), a kötőjelet (-) és az aláhúzásjelet (_). További információkért tekintse meg a MySQL-közösség dokumentációját.

A programozási nyelv olyan tagattribútumokat definiálhat, amelyek speciális karaktereket tartalmaznak, amelyeket támogat. A C# például néhány korlátozással rendelkezik a változók definiálására.

Ellenkező esetben használhatja JObject az összes speciális karaktert lefedő kimeneti kötést. A GitHubon részletes példát követhet.

Használat

A CommandText tulajdonság annak a táblának a neve, amelyben az adatokat tárolják. A kapcsolati sztring-beállítás neve megegyezik az Azure Database for MySQL-hez tartozó kapcsolati sztringet tartalmazó alkalmazásbeállítással.

Ha kivétel történik egy MySQL bemeneti kötés végrehajtásakor, a függvénykód nem fog futni. Az eredmény lehet egy hibakód, például egy HTTP-eseményindító, amely egy 500-as hibakódot ad vissza.