Conectar funções ao Armazenamento do Azure usando o Visual Studio

O Azure Functions lhe permite conectar os serviços do Azure e outros recursos às funções sem precisar escrever seu próprio código de integração. Essas associações, que representam a entrada e a saída, são declaradas na definição de função. Dados de associações são fornecidos à função como parâmetros. Um gatilho é um tipo especial de associação de entrada. Embora uma função tenha apenas um gatilho, ela pode ter várias associações de entrada e de saída. Para saber mais, confira Conceitos de gatilhos e de associações do Azure Functions.

Este artigo mostra como usar Visual Studio para conectar a função criada no artigo de Início Rápido anterior do Armazenamento do Azure. A associação de saída que você adiciona a essa função escreve dados da solicitação HTTP em uma mensagem na fila.

A maioria das associações requer uma cadeia de conexão armazenada que o Functions usa para acessar o serviço vinculado. Para facilitar, use a Conta de armazenamento que você criou com o seu aplicativo de funções. A conexão com essa conta já está armazenada em uma configuração de aplicativo chamada AzureWebJobsStorage.

Pré-requisitos

Antes de iniciar este artigo, você deve:

  • Conclua parte 1 do início rápido do Visual Studio.
  • Instale o Gerenciador de Armazenamento do Azure. O Gerenciador de Armazenamento é uma ferramenta que você usará para analisar as mensagens da fila geradas pela associação de saída. O Gerenciador de Armazenamento tem suporte em sistemas operacionais baseados em macOS, Windows e Linux.
  • Entrar em sua assinatura do Azure por meio do Visual Studio.

Baixar as configurações do aplicativo de funções

No artigo de início rápido anterior, você criou um aplicativo de funções no Azure, juntamente com a Conta de armazenamento necessária. A cadeia de conexão dessa conta é armazenada com segurança nas configurações do aplicativo no Azure. Neste artigo, você escreverá mensagens em uma Fila de armazenamento na mesma conta. Para se conectar à Conta de armazenamento ao executar a função localmente, é necessário baixar as configurações do aplicativo para o arquivo local.settings.json.

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

  2. Na guia Publicar em Hospedagem, expanda as reticências ( ... ) e selecione Gerenciar as configurações do Serviço de Aplicativo do Azure.

    Editar as configurações do aplicativo

  3. Em AzureWebJobsStorage, copie o valor da cadeia de caracteres Remote para Local e, em seguida, selecione OK.

A associação de armazenamento, que usa a configuração AzureWebJobsStorage para a conexão, agora pode se conectar ao armazenamento de filas ao executar localmente.

Registrar as extensões de associação

Como está usando uma associação de saída Armazenamento de Filas, você precisa ter a extensão de associações de armazenamento instalada antes de executar o projeto. Com exceção dos gatilhos de timer e HTTP, as associações são implementadas como pacotes de extensão.

  1. No menu Ferramentas selecione Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

  2. No console, execute o comando Install-Package a seguir para instalar as extensões de armazenamento:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
    

Agora, você pode adicionar a associação de saída do armazenamento ao seu projeto.

Adicionar uma associação de saída

Em um projeto C#, as associações são definidas como atributos de associação no método de função. Definições específicas dependem de o aplicativo ser executado em processo (biblioteca de classes C#) ou em um processo de trabalho isolado.

Abra o arquivo de projeto HttpExample.cs e adicione a seguinte classe MultiResponse:

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

A classe MultiResponse permite que você faça gravações em uma fila de armazenamento chamada outqueue e grave uma mensagem de êxito HTTP. Várias mensagens podem ser enviadas para a fila, porque o atributo QueueOutput é aplicado a uma matriz de cadeia de caracteres.

A propriedade Connection define a cadeia de conexão da conta de armazenamento. Nesse caso, você poderia omitir Connection porque já está usando a conta de armazenamento padrão.

Adicionar o código que usa a associação de saída

Depois que a associação é definida, você pode usar o name da associação para acessá-la como um atributo na assinatura de função. Ao usar uma associação de saída, não é necessário usar o código do SDK do Armazenamento do Azure para se autenticar, para obter uma referência de fila ou para escrever dados. O runtime do Functions e a associação de saída da fila fazem essas tarefas para você.

Substitua a classe HttpExample existente pelo seguinte código:

    [Function("HttpExample")]
    public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "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 storage output binding.
        return new MultiResponse()
        {
            // Write a single message.
            Messages = new string[] { message },
            HttpResponse = response
        };
    }
}

Executar a função localmente

  1. Para executar sua função, pressione F5 no Visual Studio. Talvez seja necessário habilitar uma exceção de firewall para que as ferramentas possam manipular solicitações HTTP. Os níveis de autorização nunca são impostos quando você executa uma função localmente.

  2. Copie a URL da sua função da saída do Azure Functions runtime.

    runtime local do Azure

  3. Cole a URL da solicitação HTTP na barra de endereços do navegador e execute a solicitação. A imagem a seguir mostra a resposta no navegador para a solicitação GET local retornada pela função:

    Resposta da função localhost no navegador

  4. Pare a depuração pressionando Shift+F5 no Visual Studio.

Uma nova fila denominada outqueue é criada na conta de armazenamento pelo runtime do Functions quando a associação de saída é usada pela primeira vez. Você usará o Gerenciador de Armazenamento para verificar se a fila foi criada junto com a nova mensagem.

Conectar o Gerenciador de Armazenamento à sua conta

Ignore esta seção se você já instalou o Gerenciador de Armazenamento do Azure e o conectou à sua conta do Azure.

  1. Execute a ferramenta Gerenciador de Armazenamento do Azure, clique no ícone de conexão à esquerda e selecione Adicionar uma conta.

    Captura de tela de como adicionar uma conta do Azure ao Gerenciador de Armazenamento do Microsoft Azure.

  2. Na caixa de diálogo Conectar, escolha Adicionar uma conta do Azure, escolha seu Ambiente do Azure e selecione Entrar….

    Captura de tela da entrada na janela da conta do Azure.

Depois de entrar na sua conta, você verá todas as assinaturas do Azure associadas à ela. Escolha sua assinatura e selecione Abrir Gerenciador.

Examinar a fila de saída

  1. No Gerenciador de Armazenamento, expanda o nó Filas e selecione a fila denominada outqueue.

    A fila contém a mensagem que a associação de saída de fila criou quando você executou a função disparada por HTTP. Se você tiver invocado a função com o valor name padrão do Azure, a mensagem da fila será Nome transmitido à função: Azure.

    Captura de tela da mensagem da fila mostrada no Gerenciador de Armazenamento do Azure.

  2. Execute a função novamente, envie outra solicitação e você verá uma nova mensagem na fila.

Agora, chegou a hora de republicar o aplicativo de funções atualizado no Azure.

Reimplementar e verificar o aplicativo atualizado

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto, selecione Publicar e, em seguida, escolha Publicar para republicar o projeto no Azure.

  2. Após a conclusão da implantação, você poderá usar o navegador novamente para testar a função reimplementada. Assim como antes, acrescente a cadeia de caracteres de consulta &name=<yourname> à URL.

  3. Novamente, Examinar a Mensagem da fila de armazenamento para verificar se a associação de saída gera novamente uma nova mensagem na fila.

Limpar os recursos

Outros inícios rápidos nessa coleção aproveitam esse início rápido. Se você planeja trabalhar com guias de início rápido subsequentes, tutoriais ou com qualquer serviço criado por você nesse início rápido, não limpe os recursos.

Os Recursos no Azure se referem a aplicativos de funções, funções, contas de armazenamento e assim por diante. Eles são agrupados em grupos de recursos e você pode excluir tudo junto ao excluir o grupo.

Você criou recursos para concluir esses guias de início rápido. Esses recursos podem ser cobrados, dependendo do status da sua conta e do preço do serviço. Caso não precise mais dos recursos, é possível excluí-los desta maneira:

  1. No portal do Azure, vá até a página Grupo de recursos.

    Para acessar essa página por meio da página de aplicativo de funções, selecione a guia Visão geral e o link em Grupo de recursos.

    Captura de tela que mostra selecionar o grupo de recursos a ser excluído da página do aplicativo de funções.

    Para acessar essa página no painel, selecione Grupos de recursos, depois o grupo de recursos usado para este artigo.

  2. Na página Grupo de recursos, examine a lista de recursos incluídos e verifique se eles são aqueles que deseja excluir.

  3. Selecione Excluir grupo de recursos e siga as instruções.

    A exclusão pode levar alguns minutos. Ao ser concluída, uma notificação será exibida por alguns segundos. Também é possível selecionar o ícone de sino na parte superior da página para exibir a notificação.

Próximas etapas

Você atualizou sua função disparada por HTTP para gravar dados em uma Fila de armazenamento. Para saber mais sobre o desenvolvimento do Functions, confira Desenvolver o Azure Functions usando o Visual Studio.

Em seguida, você deve habilitar o monitoramento do Application Insights para seu aplicativo de funções: