Equipe The La Li Lu Le Lo - Apresentação

Estamos empolgados com o Hackathon da Magalu Cloud! Vamos equipe :partying_face:

1 curtida

Ideia - Criação dinâmica de ambientes em cloud para ensino de Minicursos através de um Terraform

Nossa equipe quer atingir um simples objetivo: Facilitar a criação de um ambiente cloud, que provê VMs pré-configurados (com OS, programas, bibliotecas e dependências) para o ensino de Minicursos, Workshops, etc.

2 curtidas

Motivação

      Imagine que você é um professor e gostaria de oferecer uma aula ou workshop de código que irá demandar determinado sistema operacional ou que precise conter pacotes de determinadas linguagens ou bibliotecas instalados. Não seria muito mais fácil se as pessoas pudessem simplesmente utilizar uma máquina em que esse sistema já estivesse montado? Quanto tempo seria economizado e quantas pessoas seriam beneficiadas com esse esquema?
      A nossa ideia surgiu a partir de um minicurso ocorrido na SECOMP em que a produtividade foi muito prejudicada por não termos acesso prévio às ferramentas e precisarmos baixar todas as linguagens e pacotes naquele momento, o que acarretou sobrecarga da internet e lentidão nos downloads. A nossa solução - chamada MagaluWorkspace - surgiu justamente para resolver essa necessidade!

Link do repositório

Desenvolvimento

      Nossa ideia foi facilitar e otimizar a experiência do nosso usuário ao criar uma interface em que ele pudesse inserir qual sistema operacional ele gostaria de utilizar, quais linguagens seriam usadas durante a aula, juntamente com as bibliotecas ou pacotes. Por trás dos panos, nós coletamos esses dados, substituímos as variáveis de ambiente criadas no Terraform pelas informações fornecidas e utilizamos um script criado para subir uma máquina virtual na Magalu Cloud a partir das especificações dadas e na conta do próprio professor - por meio de sua API Key.

      O código do nosso arquivo main.tf foi elaborado da seguinte maneira:

  required_providers {
    mgc = {
      source = "magalucloud/mgc"
    }
  }
}

provider "mgc" {
  alias  = "nordeste"
  region = "br-ne1"
}

resource "mgc_virtual_machine_instances" "vm-nordeste" {
  provider = mgc.nordeste
  name     = var.vmname
  machine_type = {
    name = var.machinetype
  }
  image = {
    name = "cloud-ubuntu-22.04 LTS"
  }
  network = {
    associate_public_ip = true
  }

  ssh_key_name = "Danilo"
}

output "ip" {
  value = mgc_virtual_machine_instances.vm-nordeste.network.public_address
}

      Para criar as variáveis de ambiente que seriam substituídas pelas informações concedidas pelo usuário, criamos o arquivo variables.tf:

  description = "Chave SSH do usuário"
  type        = string
}

variable "image" {
  description = "Imagem da VM"
  type        = string
}

variable "machinetype" {
  description = "Tipo da VM"
  type        = string
}

variable "vmname" {
  description = "Nome da VM"
  type        = string
}

Desenvolvimento

      Quanto aos testes, conseguimos criar um processo automatizado para instanciar uma máquina virtual, passando como parâmetro apenas a chave SSH do aluno, o sistema operacional informado pelo usuário, o tipo de máquina e o nome desejado (tendo em vista que as máquinas deveriam ter nomes diferentes).

Considerações finais

      Conseguimos estruturar a interface front-end que estabelece comunicação direta com o usuário, porém a integração entre o front e o Terraform não foi bem-sucedida devido a limitações de tempo. Apesar disso, conseguimos realizar com sucesso a automação da criação de máquinas virtuais por meio de um script que utiliza variáveis de ambiente (supostamente fornecidas pelo usuário), o que mostra que alcançamos em grande parte o nosso objetivo inicial.
      Além disso, pudemos aprender bastante sobre a Magalu Cloud, Terraform e outras ferramentas de nuvem, o que nos agregou muito como profissionais.

Protótipo:

Resultado final

Obtemos a seguinte interface front-end e a armazenamos em um Bucket, que pode ser acessado no link https://br-se1.magaluobjects.com/site-lalilelo/index.html, juntamente com os códigos de automação Terraform disponibilizados em nosso repositório: GitHub - sgmaykon/hackaton-magalu.

Nossas dificuldades

  • Devido à limitação da quantidade de chaves SSH públicas, perdemos um tempo considerável por não termos conseguido criar a chave. Por fim, para dar andamento ao projeto, utilizamos a chave de um grupo amigo.
  • A integração da interface front-end com o Terraform foi desafiadora, pois precisávamos dos dados obtidos no front para instanciar as máquinas com as devidas especificações.
  • Pensamos em armazenar a interface dentro do Object Storage e servir para todos que tivessem o link, porém devido a implicações de tempo não foi possível realizar essa implementação.
  • A Virtual Machine precisava de várias permissões e, por falta de tempo, não pudemos implementar um jeito para que os alunos acessassem a máquina facilmente.

Nossa equipe

Carolina da Silva Santos
Gustavo de Oliveira Gimenes
João Pedro Reis Andrade
Maykon dos Santos Gonçalves

Agradecemos pela oportunidade =)

2 curtidas

Fala pessoal, foi muito legal acompanhar vocês nessa jornada ontem!!

E para complementar a info sobre o nosso sitezinho em object-storage, fui atrás e nós conseguimos sim referenciar nossos arquivos css e js dentro do index.html utilizando a path relativa, como se estivéssemos rodando na nossa máquina.

Eu criei um exemplo bem simples para exemplificar para vocês, podem conferir em:
https://br-se1.magaluobjects.com/hackaton-thg/index.html

Na path do bucket vocês conseguem ver os arquivos que utilizei (style.css e script.js) → https://br-se1.magaluobjects.com/hackaton-thg/

E na prática vocês podem subir os arquivos para o bucket exatamente como rodam local, referenciando os arquivos dentro do index.html dessa forma:

<link rel="stylesheet" href="style.css">
<script src="script.js"></script>

Ah, e um ponto importante!
Para essa abordagem funcionar é importante que todos os arquivos estejam públicos.

Vocês podem setar o acl dos arquivos individualmente como mostrei ontem com
mgc object-storage objects acl set --public-read my-bucket/index.html

Mas também, um próximo passo seria criarem uma bucket policy que torna todos os objetos dentro do seu bucket públicos, sem a necessidade de passar um por um!

Se tiverem interesse vou deixar o link para a documentação sobre bucket policy aqui no fim.

E claro quando quiserem podem me chamar para tirar dúvidas, trocar ideias, e no que eu puder ajudar estou disponível.

Foi muito legal ter a presença de vocês com a gente, e nos vemos por aí :wink:

2 curtidas