Slides da apresentação feita no HUGSP#6 em 29/01/2020. Apresenta a DSL para definição de sistemas baseados em microserviços e gerador para criar artefatos Terraform para deploy em diferentes plataformas.
3. HUGSP#6
• Motivadores
• Visão
• Fluxo de Trabalho
• Elementos da µDSL
• Exemplo de Parametrização
• Demo 1 – Kubernetes
• Demo 2 - ECS
Agenda
4. HUGSP#6
• Fato: aplicações estão migrando para arquitetura baseada em microserviços
• O que muda com isto?
• Utilização de (X)aaS
• Infraestrutura dinâmica
• Novos fluxos de trabalho
• Novos desafios!!!
• Segurança
• Disponibilidade
• Complexidade
• Conhecimento
Motivadores
5. HUGSP#6
• Acelerar o desenvolvimento e implantação de sistemas baseados em
microserviços
• Como?
• Linguagem para descrever um sistema e seu componentes em alto nível
• Ferramenta para gerar artefatos de implantação para um ambiente
específico a partir da descrição em alto nível e informações de
parametrização
• Artefatos de implantação Projeto Terraform
Visão para a uDSL
7. • Por quê o Terraform ?
• Simplifica a criação de novos geradores
• Funciona como uma linguagem intermediária para geração
• Facilita a integração do gerador em pipelines de CI/CD existentes
• Ampla oferta de módulos disponíveis para uso com diferentes plataformas de
execução
Fluxo de Trabalho (cont.)
8. Terraform Opus uDSL
Nível de abstração Baixo/Médio Alto
Elementos básicos Recursos Environment/Deployment/etc
Curva de aprendizado Média/Alta Baixa
Unidade de reuso Módulo Gerador e Projeto
Portabilidade de código entre
clouds/plataformas-alvo
Baixa/Nenhuma Alta
Conhecimento necessário da
plataforma-alvo
Alto Definição Baixo
Parametrização Médio
Construção de Gerador Alto
Terraform “puro” X uDSL
9. Elementos da Opus uDSL
Nome Descrição
Environment Ambiente de execução do sistema
Endpoint Ponto de entrada ou saída para o sistema
Route Rota interna para acesso a determinado serviço
Deployment Conjunto de artefatos que definem um serviço
Image Imagem que contém artefatos executáveis do serviço
MessageChannel Canal de comunicação assíncrono utilizado para
comunicação entre serviços
11. // A variável principal é o nome do gerador, que é OBRIGRATÓRIA
generator="k8s"
// Porta default utilizada pelos serviços
deployment.defaultPort=80
deployment.SvcCliente.port=80
//
security.enabled = true
security.provider="keycloak"
// Define o provedor de memnsageria
messaging.provider="rabbitmq"
// Indica se o serviço do RabbitMQ será criado ou não
messaging.external = false
// É possível criar overrides para diferentes ambiente
environments {
qa { }
prod {
//messaging.provider="rabbitmq-ha“
}
local {}
}
Exemplo: Parametrização para K8S
17. • Fase 0 – MVP (Finalizada !)
• Versão inicial da DSL
• Estrutura básica do gerador
• Interface para criação de geradores
• Exemplos iniciais de geradores: K8S e EC2
• Fase 1 – Começa HOJE ;^)
• Expansão dos geradores para novas arquiteturas
• Documentação, SDK de geradores (gerador de geradores ?)
• Criar um registry de geradores (oportunidade de monetização !)
• Fase 2
• Profit !
Roadmap
18. • META-INF/templates/<id>/Generator.groovy Descreve os artefatos a gerar
• META-INF/templates/<id>/ Templates dos artefatos
• META-INF/services/f.q.n.Generator FQN da classe que implementa o Gerador
• f.q.n.<ID>Generator Implementação do Generator
• Normalmente, apenas usa a classe AbstractGenerator
• f.q.n.XxxHelper Helpers específicos da plataforma-alvo
Anatomia de um Gerador
24. São Paulo
Rua Butantã, 500
2º andar
São Paulo - SP
05424-000
Toronto
1 King Street West
Suite 4800 – 136
Toronto, ON
M5H 1A1
(11) 3816-2200
opus-software.com.br