Partilhar via


Vinculação de saída do Banco de Dados do Azure para MySQL para o Azure Functions

Você pode usar o Banco de Dados do Azure para associação de saída MySQL para gravar em um banco de dados.

Para obter informações sobre instalação e configuração, consulte a visão geral.

Importante

Este artigo usa guias para oferecer suporte a várias versões do modelo de programação Node.js. O modelo v4 está geralmente disponível e foi projetado para ter uma experiência mais flexível e intuitiva para desenvolvedores JavaScript e TypeScript. Para obter mais detalhes sobre como o modelo v4 funciona, consulte o Guia do desenvolvedor do Azure Functions Node.js. Para saber mais sobre as diferenças entre v3 e v4, consulte o guia de migração.

Exemplos

Você pode criar uma função C# usando um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada que é executada em um processo de trabalho isolado do tempo de execução. Um processo de trabalho isolado é necessário para dar suporte a funções C# executadas em versões LTS (long-term support) e não-LTS para .NET e .NET Framework.
  • Modelo em processo: função C# compilada que é executada no mesmo processo que o tempo de execução do Azure Functions.
  • Script C#: usado principalmente quando você cria funções C# no portal do Azure.

Importante

O suporte para o modelo em processo terminará em 10 de novembro de 2026. É altamente recomendável que você migre seus aplicativos para o modelo de trabalho isolado para obter suporte total.

Mais exemplos para a vinculação de saída do Banco de Dados do Azure para MySQL estão disponíveis no repositório GitHub.

Esta seção contém o seguinte exemplo:

O exemplo refere-se a uma Product classe e uma tabela de banco de dados correspondente:

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
);

Gatilho HTTP, gravar um registro

O exemplo a seguir mostra uma função C# que adiciona um registro a um banco de dados, usando dados fornecidos em uma solicitação HTTP POST como um corpo JSON.

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);
        }
    }
}

Mais exemplos para a vinculação de saída do Banco de Dados do Azure para MySQL estão disponíveis no repositório GitHub.

Esta seção contém o seguinte exemplo:

O exemplo refere-se a uma Product classe e uma tabela de banco de dados correspondente:

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
);

Gatilho HTTP, gravar um registro em uma tabela

O exemplo a seguir mostra uma ligação de saída do Banco de Dados do Azure para MySQL em uma função Java que adiciona um registro a uma tabela, usando dados fornecidos em uma solicitação HTTP POST como um corpo JSON. A função usa uma dependência adicional da biblioteca com.google.code.gson para analisar o corpo JSON.

<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();
    }
}

Mais exemplos para a vinculação de saída do Banco de Dados do Azure para MySQL estão disponíveis no repositório GitHub.

Esta seção contém o seguinte exemplo:

O exemplo refere-se a uma tabela de banco de dados:

DROP TABLE IF EXISTS Products;

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

Gatilho HTTP, gravar registros em uma tabela

O exemplo a seguir mostra uma associação de saída do Banco de Dados do Azure para MySQL que adiciona registros a uma tabela, usando dados fornecidos em uma solicitação HTTP POST como um corpo JSON.

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)
        };
    }
});

Mais exemplos para a vinculação de saída do Banco de Dados do Azure para MySQL estão disponíveis no repositório GitHub.

Esta seção contém o seguinte exemplo:

O exemplo refere-se a uma tabela de banco de dados:

DROP TABLE IF EXISTS Products;

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

Gatilho HTTP, gravar registros em uma tabela

O exemplo a seguir mostra uma ligação de saída do Banco de Dados do Azure para MySQL em um arquivo function.json e uma função do PowerShell que adiciona registros a uma tabela, usando dados fornecidos em uma solicitação HTTP POST como um corpo JSON.

O exemplo a seguir é a vinculação de dados no arquivo function.json:

{
  "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 seção Configuração explica essas propriedades.

O exemplo a seguir é um exemplo de código do PowerShell para a função no arquivo run.ps1:

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
})

Mais exemplos para a vinculação de saída do Banco de Dados do Azure para MySQL estão disponíveis no repositório GitHub.

Esta seção contém o seguinte exemplo:

O exemplo refere-se a uma tabela de banco de dados:

DROP TABLE IF EXISTS Products;

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

Nota

Você deve usar o Azure Functions versão 1.22.0b4 para Python.

Gatilho HTTP, gravar registros em uma tabela

O exemplo a seguir mostra uma ligação de saída do Banco de Dados do Azure para MySQL em um arquivo function.json e uma função Python que adiciona registros a uma tabela, usando dados fornecidos em uma solicitação HTTP POST como um corpo JSON.

O exemplo a seguir é um exemplo de código Python para o arquivo function_app.py:

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"
    )

Atributos

A biblioteca C# usa o MySqlAttribute atributo para declarar as ligações do MySQL na função, que tem as seguintes propriedades:

Propriedade Attribute Descrição
CommandText Obrigatório. O nome da tabela na qual a associação grava.
ConnectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual os dados são gravados. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para uma variável de ambiente.

Anotações

Na biblioteca de tempo de execução de funções Java, use a @MySQLOutput anotação em parâmetros cujo valor viria do Banco de Dados do Azure para MySQL. Esta anotação suporta os seguintes elementos:

Elemento Descrição
commandText Obrigatório. O nome da tabela na qual a associação grava.
connectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual os dados são gravados. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para uma variável de ambiente.
name Obrigatório. O nome exclusivo da ligação de função.

Configuração

A tabela a seguir explica as propriedades que você pode definir no options objeto passado para o output.generic() método:

Propriedade Descrição
commandText Obrigatório. O nome da tabela na qual a associação grava.
connectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual os dados são gravados. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para uma variável de ambiente.

Configuração

A tabela a seguir explica as propriedades de configuração de associação definidas no arquivo function.json:

Propriedade Descrição
type Obrigatório. Deve ser definido como Mysql.
direction Obrigatório. Deve ser definido como out.
name Obrigatório. O nome da variável que representa a entidade no código da função.
commandText Obrigatório. O nome da tabela na qual a associação grava.
connectionStringSetting Obrigatório. O nome de uma configuração de aplicativo que contém a cadeia de conexão para o banco de dados no qual os dados são gravados. Esse valor não é a cadeia de conexão real e, em vez disso, deve ser resolvido para uma variável de ambiente.

Quando estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na Values coleção.

Nota

A ligação de saída suporta todos os caracteres especiais, incluindo cifrão ($), backtick ('), hífen (-) e sublinhado (_). Para obter mais informações, consulte a documentação da comunidade MySQL.

Uma linguagem de programação pode definir atributos de membro que contenham caracteres especiais suportados. Por exemplo, C# tem algumas limitações para definir variáveis.

Caso contrário, você pode usar JObject para a associação de saída que abrange todos os caracteres especiais. Você pode seguir um exemplo detalhado no GitHub.

Utilização

A CommandText propriedade é o nome da tabela onde os dados são armazenados. O nome da configuração da cadeia de conexão corresponde à configuração do aplicativo que contém a cadeia de conexão com o Banco de Dados do Azure para MySQL.

Se ocorrer uma exceção quando uma ligação de entrada do MySQL for executada, o código da função não será executado. O resultado pode ser um código de erro, como um gatilho HTTP que retorna um código de erro 500.