Share via


Usar o Azure Functions para conectar a um banco de dados SQL do Azure

Este artigo mostra como usar o Azure Functions para criar um trabalho agendado que se conecta a uma instância do Banco de Dados SQL do Azure ou da Instância Gerenciada de SQL do Azure. O código de função limpa as linhas em uma tabela no banco de dados. A nova função C# é criada com base em um modelo de gatilho de temporizador predefinido no Visual Studio 2019. Para dar suporte a esse cenário, você também precisa definir uma cadeia de conexão de banco de dados como uma configuração de aplicativo no aplicativo de funções. Na Instância Gerenciada de SQL do Azure, você precisa habilitar o ponto de extremidade público para poder se conectar a partir do Azure Functions. Esse cenário usa uma operação em massa no banco de dados.

Se esta for sua primeira experiência trabalhando com funções C#, você deverá ler a Referência do desenvolvedor de C# do Azure Functions.

Pré-requisitos

  • Conclua as etapas no artigo Criar sua primeira função usando o Visual Studio para criar um aplicativo de funções local destinado ao runtime versão 2.x ou superior. Você também precisa ter publicado seu projeto em um aplicativo de funções no Azure.

  • Este artigo demonstra um comando Transact-SQL que executa uma operação de limpeza em massa na tabela SalesOrderHeader no banco de dados de amostra AdventureWorksLT. Para criar o banco de dados de amostra AdventureWorksLT, conclua as etapas no artigo Criar um banco de dados no Banco de Dados SQL do Azure usando o portal do Azure.

  • Você precisa adicionar uma regra de firewall no nível do servidor para o endereço IP público do computador que usou para este início rápido. Essa regra é necessária para que seja possível acessar a instância do Banco de Dados SQL do seu computador local.

Obter informações de conexão

Você precisa obter a cadeia de conexão para o banco de dados que você criou quando concluiu Criar um banco de dados no Banco de Dados SQL do Azure usando o Portal do Azure.

  1. Entre no portal do Azure.

  2. Selecione Bancos de Dados SQL no menu à esquerda e selecione seu banco de dados na página Bancos de Dados SQL.

  3. Selecione Cadeias de conexão em Configurações e copie a cadeia de conexão completa do ADO.NET. Na Instância Gerenciada de SQL do Azure, copie a cadeia de conexão do ponto de extremidade público.

    Copie a cadeia de conexão ADO.NET.

Definir a cadeia de conexão

Um aplicativo de funções hospeda a execução de suas funções no Azure. Como uma prática de segurança recomendada, armazene cadeias de conexão e outros segredos nas configurações do seu aplicativo de funções. Usar as configurações do aplicativo impede a divulgação acidental da cadeia de conexão com seu código. Você pode acessar as configurações do aplicativo para seu aplicativo de funções diretamente do Visual Studio.

Você precisa ter publicado o aplicativo anteriormente no Azure. Se você ainda não fez isso, publique o aplicativo de funções no Azure.

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto de aplicativo de funções e escolha Publicar.

  2. Na página Publicar, selecione as elipses (...) na área Hospedagem e, em seguida, selecione Gerenciar configurações do Serviço de Aplicativo do Azure.

    Gerencie as configurações do Serviço de Aplicativo do aplicativo de funções.

  3. Em Configurações de aplicativo, selecione Adicionar configuração, em Novo nome de configuração do aplicativo, digite sqldb_connection e selecione OK.

    Adicione uma configuração de aplicativo para o aplicativo de funções.

  4. Na configuração sqldb_connection, cole a cadeia de conexão que você copiou na seção anterior no campo Local e substitua os espaços reservados {your_username} e {your_password} por valores reais. Selecione Inserir o valor do local para copiar o valor atualizado para o campo remoto e, em seguida, selecione OK.

    Adicione uma configuração de cadeia de conexão SQL.

    As cadeias de conexão são armazenadas criptografadas no Azure (Remoto). Para evitar o vazamento de segredos, o arquivo de projeto local.settings.json (Local) deve ser excluídos do controle do código-fonte, por exemplo, por meio de um arquivo .gitignore.

Adicione o pacote do SqlClient ao projeto

Você precisa adicionar o pacote do NuGet que contém a biblioteca do SqlClient. Essa biblioteca de acesso a dados é necessária para se conectar ao Banco de dados SQL.

  1. Abra o projeto de aplicativo de funções local no Visual Studio 2022.

  2. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto do aplicativo de funções e escolha Gerenciar Pacotes NuGet.

  3. Na guia Procurar, pesquise Microsoft.Data.SqlClient e quando encontrar, selecione.

  4. Na página Microsoft.Data.SqlClient, selecione a versão 5.1.0 e clique em Instalar.

  5. Quando a instalação for concluída, revise as alterações e então clique em OK para fechar a janela Visualização.

  6. Se uma janela Aceitação da Licença for exibida, clique em Aceito.

Agora, você pode adicionar o código de função C# que conecta ao Banco de Dados SQL.

Adicionar uma função disparada por temporizador

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto do aplicativo de funções e escolha Adicionar>Nova função do Azure.

  2. Com o modelo do Azure Functions selecionado, nomeie o novo item algo semelhante a DatabaseCleanup.cs e selecione Adicionar.

  3. Na caixa de diálogo Nova função do Azure, escolha Gatilho de temporizador e, em seguida, Adicionar. Essa caixa de diálogo cria um arquivo de código para a função disparada por temporizador.

  4. Abra o novo arquivo de código e adicione o seguinte, usando as instruções na parte superior do arquivo:

    using Microsoft.Data.SqlClient;
    using System.Threading.Tasks;
    
  5. Substitua a função Run existente por este código:

    [FunctionName("DatabaseCleanup")]
    public static async Task Run([TimerTrigger("*/15 * * * * *")]TimerInfo myTimer, ILogger log)
    {
        // Get the connection string from app settings and use it to create a connection.
        var str = Environment.GetEnvironmentVariable("sqldb_connection");
        using (SqlConnection conn = new SqlConnection(str))
        {
            conn.Open();
            var text = "UPDATE SalesLT.SalesOrderHeader " +
                    "SET [Status] = 5  WHERE ShipDate < GetDate();";
    
            using (SqlCommand cmd = new SqlCommand(text, conn))
            {
                // Execute the command and log the # rows affected.
                var rows = await cmd.ExecuteNonQueryAsync();
                log.LogInformation($"{rows} rows were updated");
            }
        }
    }
    

    Esta função é executada a cada 15 segundos para atualizar a coluna Status com base na data de envio. Para saber mais sobre o Gatilho de temporizador, veja Gatilho de temporizador para o Azure Functions.

  6. Pressione F5 para iniciar o aplicativo de funções. A janela de execução das Azure Functions Core Tools é aberta atrás do Visual Studio.

  7. Passados 15 segundos da inicialização, a função é executada. Inspecione a saída e anote o número de linhas atualizadas na tabela SalesOrderHeader.

    Exibir os logs da função.

    Na primeira execução, você deve atualizar 32 linhas de dados. As execuções seguintes não atualizam nenhuma linha de dados, a menos que você faça alterações aos dados da tabela SalesOrderHeader para que mais linhas sejam selecionadas pela instrução UPDATE.

Se você planeja publicar essa função, lembre-se de alterar o atributo TimerTrigger para uma agenda de Cron mais razoável do que a cada 15 segundos. Você também precisa garantir que seu aplicativo de funções possa acessar o Banco de Dados SQL do Azure ou Instância Gerenciada de SQL do Azure. Para obter mais informações, confira um dos seguintes links com base no tipo de SQL do Azure:

Próximas etapas

Em seguida, aprenda como usar. Functions com Aplicativos Lógicos para integração com outros serviços.

Para obter mais informações sobre o Functions, veja os seguintes artigos: