Skip to content

[Tech Challenge 02] - Projeto de Azure Durable Function - FIAP 2023 - Pós Tech

Notifications You must be signed in to change notification settings

talles2512/TC2_FNC_OrdemServico_FIAP

Repository files navigation

Tech Challenge 02 - Azure Function + CI/CD Pipeline - FIAP 2023

O [Tech Challenge - Fase 02] do curso de Arquitetura de Sistemas .Net com Azure da FIAP se trata da construção de uma Azure Function para simulação de uma ordem de pedido e a documentação/passo a passo da criação de uma pipeline com CI/CD utilizando Azure DevOps.

Integrantes

- 🎮 Hebert Talles de Jesus Silva (RM352000)
- 🕹️ Leonardo Cavichiolli de Oliveira (RM351999)

Projeto

- 👾 TC2_FNC_OrdemServico_FIAP (FNC_OrdemServico)

Projeto - FNC_OrdemServico

Azure Function desenvolvida em .NET 6 Core utilizando a IDE Visual Studio 2022, utilizando EF Core para gestão de dados (SQL Server Local ou Nuvem-PaaS). A function simula a ordem de pedido de manutenção de produtos voltados para hardwares antigos e novos de video games. A function foi desenvolvida utilizando o template durable, contendo assim um orquestador e alguns functions que tem funcionalidade bem definidas como.:

- 👾 HttpTriggerFunction.: Function responsável por receber o "acionamento" http, validando o corpo da requisição e inicializando o Orquestrador caso a validação tenha sucesso.
- 👾 OrdemOrchestrator.: Orquestrador da function, responsável por chamar as functions especificas do projeto e retornar o valor da ordem de serviço e status da ordem.
- 👾 OrdemBancoFunction.: Serve como a camada de intermediação com o banco de dados para a Ordem, responsável por obter ou inserir uma nova ordem conforme a regra de negócio.
- 👾 ProcessamentoOrdemBancoFunction.: Serve como a camada de intermediação com o banco de dados para o Processamento da Ordem, inserindo e atualizando o andamento da Ordem de acordo com o processamento interno.
- 👾 VerificaTipoProdutoFunction.: Função responsável por verificar se a Marca do Produto, Tipo e Modelo são fazem parte da cobertura do serviço, calculando o tempo de garantia do mesmo.
- 👾 GeraPrazoManutencaoFunction.: Função responsável por verificar o tipo de defeito informado da Ordem, identificando se há cobertura e devolvendo o prazo de manutenção/conclusão do serviço em dias úteis.
- 👾 VerificaGarantiaProdutoFunction.: Função responsável por verificar, de acordo com a data de aquisição do produto informado e da cobertura de serviço processada, se o serviço a ser realizado estara coberto pela garantia ou não.

Instruções do projeto - Preparação

A configuração para execução da Azure Function se trata apenas de qual local você pretende executa-la. Seja localmente ou subindo o serviço no Azure Function na Nuvem (vídeo demonstrativo CI/CD em andamento).:
  • 👾 Conexão com o banco de dados.: Acesse o arquivo local.settings.json no projeto FNC_OrdemServico e altere o valor do parametro "OrdemServicoDbSecret", esse valor aceita tanto uma string de conexão de um banco como um Secret (Azure Key Vault) de uma string de conexão de banco também.
  • 👾 Scripts de banco de dados.: Segue os scripts de banco para criação do database e as tabelas necessárias para execução do projeto - Script SQL Tabelas - FNC_OrdemServico.

Iniciando o projeto

Ao executar a Azure Function seja local ou seja em nuvem, podemos utilizar como aplicação cliente o Postman para realizar alguns requisições HTTP para function. Segue alguns prints de exemplo (requisições .jsons).:

Dados necessários para teste

Segue a lista de marcas do produto, tipos, modelos e tipos de defeitos aceitos na requisições de novas ordens.: Documentos de Dados para Requisições no FNC_OrdemServico.

Criação de Pipeline CI/CD da Azure Fuction

Montando a Pipeline no Azure DevOps e executando o Deploy em uma Function App

Comandos utilizados na construção do Pipeline

  • Criar a Storage Account:
    • az storage account create --name [nome-do-storage-account] --resource-group [nome-do-grupo-de-recursos] --location brazilsouth --sku Standard_LRS
  • Criar a Function App:
    • az functionapp create --resource-group [nome-do-grupo-de-recursos] --name [nome-da-function] --consumption-plan-location brazilsouth --os-type Linux --runtime dotnet --functions-version 4 --storage-account [nome-do-storage-account]
  • Habilitar o Identity na Function App:
    • az functionapp identity assign --n [nome-da-function] --resource-group [nome-do-grupo-de-recursos]
  • Obter PrincipalId da Function App e atribuir a uma variável:
    • $functionPrincipalId = (az functionapp show -n [nome-da-function] -g [nome-do-grupo-de-recursos] --query identity.principalId --out tsv)
  • Dar permissão para a Function App ler secrets no Key Vault:
    • az keyvault set-policy --name [nome-do-key-vault] --object-id $functionPrincipalId --secret-permissions get
  • Obter Id do Secret (Url) no Key Vault e atribuir a uma variável:
    • $secretId = (az keyvault secret show -n [nome-do-secret] --vault-name [nome-do-key-vault] --query id --out tsv)
  • Adicionar Parâmetro de referência ao Secret no AppSettings da Function App:
    • az functionapp config appsettings set --name [nome-da-function] --resource-group [nome-do-grupo-de-recursos] --settings OrdemServicoDbSecret=`""@Microsoft.KeyVault(SecretUri=$secretId)"`"

About

[Tech Challenge 02] - Projeto de Azure Durable Function - FIAP 2023 - Pós Tech

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published