O Azure Functions é a resposta da Microsoft aos Lambdas da Amazon ou ao Cloud Functions do Google (também conhecido como arquitetura "sem servidor"). Elas oferecem uma maneira de implantar pequenos trechos de código e deixar que o Azure cuide do servidor subjacente. Como nunca as usei antes, pensei em experimentá-las além do "Hello, World", fazendo-as funcionar com o Couchbase Server.

Existem mais opções no Azure Functions além dos eventos HTTP simples (por exemplo, acionadores de Blob, webhooks do GitHub, acionadores de fila do Armazenamento do Azure etc.). Mas, para esta postagem do blog, vou me concentrar apenas em eventos HTTP. Criarei pontos de extremidade "Get" e "Set" simples que interagem com o Couchbase Server.

Antes de começar, você pode acompanhar o processo obtendo o código-fonte para esta postagem do blog no GitHub.

Além disso, leia o Publicação sobre Azure Functions e Lazy Initialization com o Couchbase Server. Ele contém uma atualização importante sobre o uso do Couchbase Server e do Azure Functions.

Como se preparar para desenvolver o Azure Functions

Para esta postagem do blog, decidi tentar Visualização do Visual Studio.

Visual Studio Preview

Fiz isso porque há um ferramenta útil para criar Projetos do Azure Function no Visual Studio.

Azure Functions tool for Visual Studio

Mas, no momento, isso só funciona para a versão de visualização. Você não precisa usar essas ferramentas para desenvolver o Azure Functions, mas elas tornaram o processo mais simples para mim.

Depois de instalar essas ferramentas, tudo o que precisei fazer foi acessar File→New→Project. Em seguida, em "Cloud" (Nuvem), selecione "Azure Functions" (Funções do Azure).

New Azure Functions in Visual Studio

Depois de fazer isso, você terá um projeto vazio com alguns arquivos JSON. Clique com o botão direito do mouse no projeto, adicione um item e selecione "Azure Function".

Add Azure Function

Em seguida, você precisará selecionar o tipo de Função do Azure que deseja criar. Eu escolhi "HttpTrigger". Também escolhi "Anônimo" para manter esta postagem simples, mas, dependendo do seu caso de uso, talvez você queira exigir um token de autenticação. Depois de fazer isso, será gerado um shell muito simples de uma função (como uma classe C#). Você pode executar essa função localmente (na verdade, é para isso que serve o arquivo local.settings.json) para que possa testá-la sem implantar no Azure ainda.

Escrevendo uma função "Get"

Primeiro, decidi que queria duas Azure Functions: uma para "obter" um dado por ID e outra para "definir" um novo dado. Comecei definindo a forma dos meus dados com um simples POCO C#:

Aqui está a função do Azure que escrevi para "obter" esse documento do Couchbase Server:

Alguns aspectos a serem observados:

  • Removo o "post" que foi gerado pela ferramenta, pois quero que isso seja apenas um "obter" função.
  • Analisar o parâmetro de consulta parece ser muito código extra para esse caso simples. Como alternativa, você pode criar uma "função com parâmetros"
  • GetCluster e GetBucket será discutido mais adiante neste post. Mas a história resumida é que eu quero que esse código funcione tanto localmente quanto implantado no Azure

Em seguida, execute essa função localmente e você obterá uma tela de console semelhante a esta:

Azure Functions running locally

Na parte inferior, você notará que ele informa o(s) URL(s) da Função Azure. Supondo que eu tivesse um documento no Couchbase (ainda não tenho), eu poderia criar uma solicitação HTTP com uma ferramenta como o Postman para: http://localhost:7071/api/HttpTriggerCsharpGet?id=123456

Atualmente, se eu fizer isso, receberei "null" como resposta (já que não tenho nenhum código de validação ou verificação de erros). Portanto, vamos seguir em frente e criar uma função "Set".

Escrever uma função "Set"

A função "Set" será um pouco diferente. Quero que as informações do documento sejam POSTADAS para ela e que ela retorne uma mensagem como "Novo documento inserido com ID 123456".

Essa função tem um formato semelhante ao da função Get, mas há alguns aspectos importantes a serem observados:

  • Há apenas "post" no atributo HttpTrigger.
  • Em vez de HttpRequestMessage como primeiro parâmetro, decidi usar MeuDocumentoe deixar que o Azure Functions faça a vinculação para mim.
  • Como não tenho HttpRequestMessageNão posso chamar seu CreateResponse então, em vez disso, eu instancio um novo método HttpResponseMessage diretamente para retornar a mensagem de sucesso no final.

Para criar uma solicitação no Postman, usarei um URL de http://localhost:7071/api/HttpTriggerCsharpSet. Nos cabeçalhos, definirei Tipo de conteúdo para "application/json". Por fim, o corpo será JSON:

Agora, quando eu fizer um POST para o endpoint, receberei uma mensagem de resposta do tipo "Novo documento inserido com ID f05ea97e-7c2f-4f88-b72d-19756f6a6f35".

Conexão com o servidor Couchbase

Eu não mencionei como essas funções se conectam ao Couchbase Server.

Anteriormente, mencionei dois métodos, GetCluster e GetBucket que se conectarão ao cluster e ao bucket, respectivamente.

Neste ponto, a maior parte desse código deve ser familiar se você já tiver usado o Couchbase Server e o Couchbase .NET SDK antes. Estou me conectando a um cluster de nó único e, em seguida, conectando um bucket que tem uma senha definida (estou usando o Couchbase Server 4.6).

Porém, o importante a ser destacado aqui é o uso de Configuration.AppSettings. No local.settings.json adicionei essas configurações do Couchbase à seção Value:

Ao executar o Azure Functions localmente, esse arquivo é usado para configuração. Tenho o Couchbase Server em execução localmente com um bucket chamado "azurefunctions". Qualquer coisa em "Values" pode ser acessada por meio de Configuration.AppSettings.

Implantação no Azure

Antes de implantar o Azure Functions, precisarei criar um cluster do Couchbase no Azure. Isso é muito fácil de fazer, graças ao excelente trabalho de Ben Lackey no Azure Marketplace. Depois de implantado, a implantação do Azure Functions também é fácil, graças ao Visual Studio.

Implantação do Couchbase Server no Azure

Aqui está um vídeo curto que o orienta no processo de criação de um cluster do Couchbase Server no Azure.

[youtube https://www.youtube.com/watch?v=q9mBBu0YqJI&w=560&h=315]

Para o meu exemplo, segui esse vídeo à risca. Aqui está a etapa 1, em que configuro o nome de usuário, a senha e o grupo de recursos.

Create Couchbase Cluster step 1

Para a segunda etapa, criei apenas um cluster de nó único na VM menor e mais barata (DS1 v2). Criei 0 nós do Sync Gateway, pois não estou usando o Sync Gateway neste exemplo.

Create Couchbase Cluster step 1

A etapa 3 é apenas um resumo, e a etapa 4 é uma confirmação. Levará de 3 a 5 minutos para que o cluster do Couchbase seja iniciado no Azure.

Depois que o cluster for criado, encontre o URL do primeiro nó do cluster (como demonstrado no vídeo acima). Meu URL era mais ou menos assim: http://vm0.server-hsmkrefstzg2t.northcentralus.cloudapp.azure.com:8091. Acesse este URL, faça login e crie um bucket (chamei o meu de "azurefunctions", assim como fiz localmente).

Implantação do Azure Functions no Azure

Agora, o Couchbase Server está em execução. Então, vamos implantar o Azure Functions que irá interagir com ele.

Para começar, clique com o botão direito do mouse no projeto no Visual Studio e selecione "publicar". Você precisará criar um novo perfil de publicação na primeira vez que fizer isso, mas isso é fácil.

Publish Azure functions

Dê às suas funções um nome de aplicativo, selecione uma assinatura, selecione um grupo de recursos (você pode criar um novo ou usar o mesmo grupo que criou acima para o Couchbase), selecione um plano de serviço e, por fim, uma conta de armazenamento. Você pode criar novas contas quando necessário.

Create Publish Profile

Clique em "create" (criar) e esses itens começarão a ser criados no Azure (pode levar um ou dois minutos).

Experimentando o Azure Functions

Por fim, lembre-se de que o Azure Functions precisa saber o URI, o nome do bucket e a senha para se conectar ao Couchbase Server. Essas informações estão em local.settings.json, mas esse arquivo não é usado para implantações reais do Azure.

No portal do Azure, navegue até a função do Azure (chamei a minha de cbazurefunctions) e selecione "Configurações do aplicativo". Em "Configurações do aplicativo", insira essas três configurações: couchbaseUri, couchbaseBucketName e couchbaseBucketPassword.

Azure Functions App settings

Agora, repita o processo do Postman mencionado acima para testar as funções do Azure e verificar se elas funcionam. Seu URL pode variar, mas o meu foi http://cbazurefunctions.azurewebsites.net/.

Resumo

Esta é minha primeira vez experimentando o Azure Functions. Esta postagem do blog mostra uma demonstração simples, mas há outros fatores a serem considerados antes de você começar a usar isso na produção:

  • Autenticação - Usei o Azure Functions anônimo para manter a simplicidade. O Azure Functions também pode fornecer tokens de autenticação para uso que impedem o acesso, exceto para usuários autorizados.
  • Configurações do aplicativo - defini-las manualmente no portal pode não ser a melhor solução. Provavelmente há uma maneira de automatizar essa parte.
  • HTTPS/TLS - Você provavelmente desejará ter algum nível de criptografia ao obter e publicar dados no Azure Functions. O exemplo acima transmite tudo em texto claro.

Alguma coisa que eu tenha perdido? Tem mais dicas ou sugestões para compartilhar e tornar esse processo mais fácil ou melhor? Deixe um comentário abaixo ou entre em contato comigo pelo Twitter @mgroves.

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta