Equipe - TBPQ 🍞

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.

1 curtida

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.