Skip to content
This repository was archived by the owner on Apr 21, 2025. It is now read-only.

fiap-8soat-tc-one/poc-az-serverless

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 POC az-fiap-hackathon

✅ Pré-requisitos

Antes de iniciar, certifique-se de que possui as seguintes ferramentas instaladas:

🏗️ Azure Functions Tools para desenvolvimento local

Execução Local

  1. Para execução local, primeiro criar o seguinte arquivo na raiz do projeto:

    • 🔹 Nome do arquivo: local.settings.json
    • 🔹 Conteúdo:
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "java",
    "MySqlConnectionString": "Server=localhost;Port=30081;Database=test;Uid=test_user;Pwd=test_password;",
    "RabbitMqConnectionString": "amqp://admin:admin@localhost:30088/",
    "RabbitMqOutQueueName": "outputQueue",
    "SendGridApiKey": "",
    "NotifyQueue": "notifyQueue"
  }
}

🛠️ Configuração do MySQL

  1. Configure o usuário/senha do banco na connectionString:

    • 🔹 Para execução local: defina dentro do arquivo local.settings.json.
    • 🔹 Para execução no Kubernetes: defina dentro do arquivo kubernetes/infra/secrets.
  2. Utilize a interface gráfica de sua preferência e execute o script localizado em scripts/mysql.sql para criar o banco de dados e a tabela.

  3. Para configurar o MySQL dentro do cluster Kubernetes local, utilize o seguinte comando Helm:

    helm install mysql-demo bitnami/mysql --namespace fiap-hackathon \
      --set auth.rootPassword=rootpassword \
      --set auth.database=test \
      --set auth.username=test_user \
      --set auth.password=test_password

    ⚠️ Nota: A secret versionada neste repositório já contempla a connectionString correspondente a essa configuração. Qualquer alteração precisa ser revalidada.

  4. Se o cluster local for gerado pelo script KIND (kubernetes/infra/kc.yaml), exponha o MySQL na porta 30081 com o seguinte comando:

    kubectl patch svc mysql-demo -p '{"spec": {"type": "NodePort", "ports": [{"port": 3306, "nodePort": 30081}]}}'

📨 Configuração do RabbitMQ

  1. Crie duas filas dentro do RabbitMQ:

    • 📌 notifyQueue (para notificações)
    • 📌 outputQueue (para processamento)

    Caso os nomes das filas sejam diferentes, atualize os arquivos:

    • 📍 Para execução local: local.settings.json
    • 📍 Para execução no Kubernetes: manifestos dentro de kubernetes/funcs
  2. Para configurar o RabbitMQ dentro do cluster Kubernetes local, utilize o seguinte comando Helm:

    helm install rabbitmq bitnami/rabbitmq --namespace fiap-hackathon --create-namespace \
      --set auth.username=admin --set auth.password=admin --set persistence.enabled=false

    ⚠️ Nota: A secret versionada neste repositório já contempla a connectionString correspondente a essa configuração. Qualquer alteração precisa ser revalidada.

  3. Se o cluster local for gerado pelo script KIND (kubernetes/infra/kc.yaml), exponha o RabbitMQ nas portas 30088 ( broker) e 30086 (portal de gerenciamento) com o seguinte comando:

    kubectl patch svc rabbitmq -n fiap-hackathon -p '{"spec": {"type": "NodePort", "ports": [{"port": 5672, "nodePort": 30088}, {"port": 15672, "nodePort": 30086}]}}'

☸️ Configuração do Cluster Kubernetes Local

Utilize a tecnologia que melhor lhe convier, como K3s, KIND ou MicroK8s.

🔹 Recomendações

Minha recomendação é utilizar o KIND. Caso opte por ele, será necessário instalar o metric-server:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl patch deployment metrics-server -n kube-system --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-insecure-tls"}]'

⚡ Instalação do KEDA

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace

🏗️ Execução do Ambiente Kubernetes

Siga os passos abaixo para configurar e executar o ambiente Kubernetes:

1️⃣ Criar o Cluster Kubernetes

2️⃣ Configurar o metric-server (caso ainda não esteja configurado)

3️⃣ Configurar o KEDA

4️⃣ Instalar o MySQL via Helm

5️⃣ Instalar o RabbitMQ via Helm

6️⃣ Criar o namespace fiap-hackathon (caso ainda não esteja criado)

7️⃣ Executar o arquivo de secrets do diretório kubernetes/infra/secrets.yaml

8️⃣ Executar os manifestos do diretório kubernetes/funcs/*.yaml

A ordem de execução dos arquivos dentro de kubernetes/funcs/ não é relevante, pois cada arquivo é independente.

About

PoC para analisar a viabilidade de se trabalhar com conceitos serverless, cloud agnostic em kubernetes, utilizando o framework do azure-function em docker

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors