Nossa ideia é resolver o problema de comunicação entre serviços de Clouds.
Primeiros passos que vamos executar:
- Ideação e definição do escopo
- Mapeamento e documentação
- Pesquisa de tecnologias e bibliotecas
- Setup inicial do projeto
Escolhemos a tecnologia que vamos utilizar e as bibliotecas.
Definimos a estrutura do projeto e o fluxo principal do script.
Planejamos e dividimos as tarefas entre os participantes das equipes.
Começaremos a escrever as primeiras funções modulares para testar as primeiras transcrições enquanto continuamos com a pesquisa.
Apresentação do paraMagalu
Contextualização
O cenário atual da computação em cloud consiste em diversas empresas fornecendo serviços bem sucedidos, como Amazon AWS ou Microsoft Azzure por exemplo, o que nos leva a pensar: qual seria o diferencial da Magalu Cloud para se destacar nesse meio?
De acordo com o site oficial da Magalu Cloud, o serviço oferecido pela Magalu é mais econômico quando comparado a outros já consolidados, com economia de até 30% do valor total, previsível e seguro, por não oscilar seus valores de acordo com o dólar, além de possuir tecnologias de última geração com um custo-benefício competitivo. Nesse cenário, destaca-se ainda o fato de que a Magalu é uma empresa brasileira, portanto, é mais amigável para empresas brasileiras, considerando que todas as partes envolvidas são geridas de acordo com a Legislação Nacional.
O problema
Diante disso, o que dificulta a escolha da Magalu Cloud pelas empresas, principalmente brasileiras? Primeiro, poderia ser considerado que esse serviço simplesmente não é amplamente conhecido ainda, considerando que seu lançamento é recente. Porém, o motivo principal a ser considerado é que as empresas já estão utilizando serviços de cloud concorrentes, logo, não pensam em mudar de fornecedor por comodidade, pois como o serviço de cloud da Magalu é recente, sua documentação ainda não é de amplo conhecimento entre os desenvolvedores e não é considerado.
A solução: paraMagalu
Nesse sentido, nós pensamos em desenvolver o paraMagalu, que consiste em uma aplicação que é capaz de traduzir arquivos Terraform que foram utilizados para gerar a infraestrutura de cloud em serviços concorrentes para arquivos Terraform que geram uma infraestrutura equivalente na Magalu Cloud. Dessa forma, a migração para os serviços de cloud da Magalu se torna assustadoramente fácil.
Nosso produto consiste basicamente em scripts python que conseguem capturar as definições de arquiteturas do arquivo Terraform fonte e "traduzir" essas definições para um arquivo Terraform que configura o serviço de cloud da Magalu por meio de dicionários que armazenam essas correspondências.
O paraMagalu é escalável e pode se adaptar a novas adições de recursos tanto nos serviços da Magalu, quanto nos serviços das plataformas concorrentes.
Conclusão
Nossa solução é útil para atrair mais clientes para a Magalu Cloud, facilitando a equivalência de arquiteturas.
Desenvolvemos um MVP que está disponível em nosso Repositório GIT para demonstração de como seria a implementação da nossa solução na prática. A descrição mais gráfica do nosso projeto está nesse link do Canva.
Código origem
provider "aws" {
region = "us-east-1"
}
variable "aws_access_key" {
description = "Chave de acesso da AWS."
}
variable "aws_secret_key" {
description = "Chave secreta da AWS."
}
variable "region" {
description = "Região da AWS."
default = "us-east-1"
}
variable "instance_type" {
description = "Tipo de instância EC2."
default = "t2.micro"
}
variable "ami" {
description = "ID da AMI para a instância EC2."
}
variable "s3_bucket_name" {
description = "Nome do bucket S3."
default = "meu-bucket-app"
}
resource "aws_s3_bucket" "static_site_bucket" {
bucket = "static-site-${var.s3_bucket_name}"
website {
index_document = "index.html"
error_document = "404.html"
}
tags = {
Name = "Static Site Bucket"
Environment = "Production"
}
}
resource "aws_instance" "database_server" {
ami = "ami-0def12345abc67890"
instance_type = "t2.medium"
key_name = "db-key"
associate_public_ip_address = false
subnet_id = "subnet-87654321"
vpc_security_group_ids = ["sg-87654321"]
tags = {
Name = "DatabaseServer"
}
}
data "aws_ami" "ubuntu" {
most_recent = true
owners = ["099720109477"] # Canonical
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
}
data "aws_instance" "existing_instance" {
instance_id = aws_instance.database_server.id
}
data "aws_s3_bucket" "existing_bucket" {
bucket = aws_s3_bucket.static_site_bucket.bucket
}
output "vm_images" {
value = data.aws_ami.ubuntu.images
}
output "vm_instances" {
value = data.aws_instance.existing_instance
}
output "vm_bucket" {
value = data.aws_s3_bucket.existing_bucket
}
Código gerado
{
"provider": {
"mgc": {
"api_key": "${var.api_key}",
"region": "br-se1"
}
},
"resource": {
"mgc_object_storage_buckets": {
"static_site_bucket": {
"bucket": "static-site-${var.s3_bucket_name}",
"enable_versioning": false,
"private": true
}
},
"mgc_virtual_machine_instances": {
"database_server": {
"name": "DatabaseServer",
"machine_type": {
"name": "cloud-bs1.medium"
},
"image": {
"name": "cloud-ubuntu-22.04 LTS"
},
"ssh_key_name": "db-key",
"network": {
"associate_public_ip": false,
"interface": {
"security_groups": [
{
"id": "sg-87654321"
}
]
}
}
}
}
},
"output": {
"output": {
"vm_images": {
"value": "${data.data.mgc_virtual_machine_images.ubuntu.images}"
}
}
},
"variable": {
"mgc_api_key": {
"description": "API key para autentica\u00e7\u00e3o."
},
"mgc_obj_key_id": {
"description": "Key ID para acessar o produto de Object Storage."
},
"mgc_obj_key_secret": {
"description": "Secret da key para acessar o produto de Object Storage."
},
"mgc_region": {
"description": "Especifica a regi\u00e3o onde os recursos ser\u00e3o criados e gerenciados.",
"default": "br-se1"
},
"mgc_env": {
"description": "Define o ambiente operacional.",
"default": "prod"
}
},
"data": {
"mgc_virtual_machine_images": {
"ubuntu": {}
},
"mgc_virtual_machine_instances": {
"existing_instance": {
"id": ""
}
}
}
}
O script está funcionando mas não conseguimos desenvolver a CLI, como estava no planejamento.
