Back-End

26 jul, 2018

Utilizando Azure Functions com Azure Cosmos DB

Publicidade

Introdução

Neste artigo pretendo mostrar como fazer uma inserção de dados no Cosmos DB utilizando o Azure Functions, que é uma das tecnologias base do Azure no quesito Serverless.

Antes de começar efetivamente esse artigo, caso ainda não tenha uma subscription no Azure, será necessário criar uma (caso queira um passo a passo, clique aqui).

Cosmos DB

Dando uma introdução bem simplista, o Azure Cosmos DB é o banco NoSQL da Microsoft multimodelo de baixa latência e escalável. Ele oferece distribuição global para o uso em qualquer região do Azure.

Agora sem mais delongas, vamos colocar a mão na massa.

Primeiro vamos criar nosso Azure Cosmos DB, e para fazer isso, clique na opção “Azure Cosmos DB” que se encontra na guia lateral, ou então clique em “New Resources > Databases > Azure Cosmos DB”, conforme nos mostra a figura abaixo:

Figura 1

Feito isso, vamos preencher as informações solicitadas, lembrando que, conforme mencionado acima, pelo fato de Azure Cosmos DB ser multimodelo, você poderá escolher o tipo do modelo do banco, e para esse artigo vamos escolher o SQL, e em seguida vamos clicar em “Create”, conforme a figura 2 abaixo:

Figura 2

Finalizada a criação do nosso banco, vamos criar nosso próximo recurso, que será as Functions. Para isso, vamos clicar em “Create Resource”, e em seguida em “Serverless Function App”, conforme a figura abaixo:

Figura 3

Agora vamos preencher os dados necessários conforme nos mostra a figura 4, a seguir, e depois vamos clicar em “Create”.

Figura 4

Assim que finalizar a criação, vamos novamente acessar o Azure Cosmos DB. Observe que, por padrão, já foi criado um banco de teste chamado ToDoList e um Collection chamada Items, conforme nos mostra a figura abaixo:

Figura 5

Agora vamos clicar em “Add Azure Function” que se encontra na guia lateral para vincular o Functions App com o Azure Cosmos DB, e em seguida clicar em “Save”, conforme a figura 6. Note que automaticamente ele já trouxe todas opções disponíveis para serem selecionadas automaticamente.

Figura 6

Após o vínculo, você poderá notar que uma Function já foi criada acessando nosso serviço de Funções. Essa Function, por padrão, irá logar todas as alterações efetuadas nos documentos já salvos no banco.

Porém, como nosso objetivo é inserir um novo registro, vamos criar uma nova Function do tipo “HttpTrigger” seguindo os passos mostrados na figura abaixo:

Figura 7

Após terminar a criação da Function, vamos clicar na opção “Integrate” e vincular nossa Function com o Azure Cosmos DB, conforme a figura 8:

Figura 8

Feito isso, vamos configurar nossa Function com os passos descritos na imagem a seguir, para salvar um novo registro no nosso banco:

Figura 9

Agora substituiremos o código criado automaticamente pelo código abaixo (comentários no próprio código para melhor entendimento):

using System.Net;

//Cabeçalho da nossa função
public static HttpResponseMessage Run(HttpRequestMessage req, out object outputDocument, TraceWriter log)
{
    //Recuperamos os valores passados via GET
    string name = req.GetQueryNameValuePairs().FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0).Value;
    string email = req.GetQueryNameValuePairs().FirstOrDefault(q => string.Compare(q.Key, "email", true) == 0).Value;
    
    //Colocamos os nossos valores no outputDocument para que possa ser salvo
    outputDocument = new { name = name, email = email };

    if (name != "" && email != "") { return req.CreateResponse(HttpStatusCode.OK); }
    
    return req.CreateResponse(HttpStatusCode.BadRequest); 
}

Feito isso, salve as alterações para testarmos nossa Function clicando primeiramente em “Test”, depois inserindo nossos parâmetros, e por ultimo, clicando em “Run”, conforme nos mostra a figura 10:

Figura 10

Após a execução da Function, vamos voltar ao nosso Azure Cosmos DB e poderemos verificar que o registro foi inserido conforme a figura 11:

Figura 11

E com isso finalizamos mais um artigo sobre Azure aqui no portal iMasters. Espero que tenham gostado, e até o próximo!27

Obrigado.