AWS na prática | EC2

AWS na prática | EC2

Elastic Compute Cloud (EC2)

Este artigo aborda o que é uma EC2, explica suas características e apresenta seus principais serviços complementares.

O que é EC2 – Elastic Compute Cloud?

Elastic Compute Cloud nada mais é do que uma máquina virtual. Comparando com um data center tradicional, é o equivalente a um servidor físico, onde você tem recursos computacionais de CPU, memória, disco, conectividade e sistema operacional para que você possa rodar seus serviços. O que difere é que você não precisa se preocupar com o hardware físico ou onde ele está hospedado.

O conceito de virtualização e de máquinas virtuais já é bastante difundido e não é nenhuma novidade, porque hypervisors já existem há muitos anos. Os mais conhecidos são Vmware, Hyper-V e Xen Server. O serviço EC2 da AWS roda em uma versão customizada do Xen. Então uma EC2 é uma máquina virtual hospedada na infraestrutura física da AWS.

Imagem1

No desenho acima conseguimos ver de forma mais clara como funciona esse compartilhamento de recursos entre diversas instâncias. Cada instância possui sua interface de rede virtual, que é protegida por um firewall que roda dentro do hypervisor, entre a interface de rede física e a interface virtual da instância. Todo pacote de comunicação passa por estas camadas para impedir que instâncias vizinhas sejam impedidas de ter qualquer tipo de acesso à sua instância. Esse mecanismo de segmentação de recursos é o mesmo para memória.No caso dos discos, as instâncias não acessam fisicamente os discos da máquina física. Todo disco apresentado para a instância é virtualizado.

O serviço EC2 é elástico, pois você pode criar quantas instâncias precisar, do tamanho que precisar, podendo usar o auto-scaling e load balancing para pagar apenas pelos recursos necessários, pelo tempo necessário. Em Outubro de 2017 a AWS começou a bilhetar instâncias Linux (que não possuem licenciamento) pelo período de cada 60 segundos. Isso traz ainda mais economia, porque até então cada instância era bilhetada por hora, se seu ambiente de auto-scaling subisse uma instância e ela ficasse online por 10 minutos, você seria cobrado por 1 hora cheia. Agora, nesse cenário, você será cobrado apenas pelos 10 minutos.

Quanto ao Sistema Operacional, você tem a opção de usar uma distribuição Linux sem custo, como a Amazon Linux, Debian, Ubuntu ou CentOS, bem como também pode optar por usar um sistema operacional em que existe um custo de licenciamento, como RedHat Enterprise Linux e Windows Server.

No cenário de uso do sistema operacional licenciado, existe a opção de pagar pelo licenciamento juntamente com os recursos computacionais ou, caso você já tenha adquirido a licença, usá-la na nuvem da AWS. Este último cenário é chamado de bring your own license e tem uma série de requisitos que devem ser cumpridos.

Tipos de Instâncias

Existem diversos tipos de instâncias, que variam pela combinação de CPU, memória, armazenamento e capacidade de rede. Isso permite que você possa escolher a combinação de recursos mais adequada para sua necessidade.

EC2types

Uso geral

Instância de uso geral fornecem um equilíbrio de recursos entre computação (CPU), memória e rede. Esse tipo de instância é uma boa opção para uso em diversos workloads.Instâncias de uso geral estão sub-divididas em dois grupos:

  • Instâncias de performance intermitente, e
  • Instâncias de performance constante

Instâncias de performance intermitente trabalham com o conceito de créditos de CPU. Um crédito de CPU é igual a uma vCPU em execução com 100% de uso por 1 minuto. Cada instância T2 recebe uma determinada taxa de créditos de CPU por hora, de acordo com o tamanho da instância. Quando uma instância T2 usa menos recursos de CPU do que sua linha de base de uso, isto é, quando a CPU está ociosa, os créditos de CPU não utilizados são armazenados, armazenando créditos de CPU para uso quando a necessidade de consumo for maior que a linha de base. Quanto mais crédito acumular, mais tempo de intermitência a instância poderá executar acima da linha de base.

Captura-de-Tela-2018-01-28-a-s-14.40.42

Para exemplificar, vamos pegar o caso da instância do tipo T2.micro, que acumula 6 créditos de CPU por hora. A linha de base de uma T2.micro é de 10% da capacidade de processamento de uma CPU. Isso significa que, se 100% de uma CPU é 2.5GHz, a linha de base de desempenho de processamento é de 0.25GHz. A cada hora que a instância consome menos que 0.25GHz, ela ganha 6 créditos de CPU. Como cada crédito de CPU permite que a instância consuma 100% da CPU por 1 minuto, então a cada 1 hora abaixo da linha de base, a instância ganha o direito de trabalhar 6 minutos usando 100% da CPU, ou seja, usando 2.5GHz da CPU. Estamos arredondando a conta por minuto, porém esse cálculo é feito por milissegundo.

Cada instância tem um máximo de créditos que pode acumular. No caso da T2.micro, ela pode acumular o máximo de 144 créditos, que seria o cenário de ela trabalhar durante 24 horas abaixo da linha de base.

Para vários cenários, como uma aplicação web com pouco acesso, instância de desempenho intermitente pode ser uma boa opção, porém se a instância começar a consumir mais créditos do que acumula, o desempenho pode ser bastante impactado, visto que o uso de CPU será limitado.

No re:Invent de 2017 a AWS lançou a opção T2 unlimited, que permite que instâncias do tipo T2 possam continuar operando acima da linha de base de créditos mediante um custo adicional por hora de uso da vCPU excedente. Esta é uma boa opção para continuar tendo um custo reduzido porém sem comprometer o desempenho da instância em momentos prolongados de consumo de CPU.

Otimizada para computação

Instâncias otimizadas para computação em geral possuem uma relação maior de poder de processamento de CPU e menor de memória.

Otimizada para memória

Ao contrário de instâncias otimizadas para computação, instâncias otimizadas para memória possuem uma relação de recursos que priorizam memória RAM.

Computação acelerada

Instâncias para computação acelerada possuem GPUs de alta performance, voltadas principalmente para alto consumo de gráficos.

Otimizada para armazenamento

Já instâncias otimizadas para armazenamento oferecem até 48TB de armazenamento local, com alto troughtput de disco.

Tipos de Discos

Existem dois tipos de discos de bloco:

  • Instance Storage
  • EBS Volumes

Captura-de-Tela-2018-01-28-a-s-14.44.08

Instance Storages

Instance storages são discos que que residem no host físico e que são apresentados para a instância. Esses discos são temporários, ou seja, não são persistentes. Sempre que sua instância for reiniciada os dados contidos nela serão perdidos. Por isso qualquer dado persistente não deve ser armazenado neste tipo de disco. Este tipo de disco existe para ser usado como uma área temporária para processamento de arquivos que exija um alto troughtput.

No geral, por serem discos SSD conectados localmente, instance storage são ideais para armazenamento temporário de informações que estão em constante mudança, como buffers, caches e outros conteúdos temporários.

EBS Volumes

Volumes EBS ao contrário, são persistentes, eles não são perdidos quando uma instância é desligada. Eles podem, inclusive, ser desconectados de uma instância e conectados em outra. Nas atuais famílias de instâncias, por padrão toda instância possui seu sistema operacional armazenado em um disco do tipo EBS.

Em um post futuro nós vamos mergulhar mais fundo no entendimento do EBS. Neste momento o importante é saber a diferença entre instance storages e EBS volumes e saber quando usar cada um deles.

Captura-de-Tela-2018-01-28-a-s-14.54.04

Metadatas

Medatada são os metadados da instância, que estão disponíveis para consulta através de uma URL local. Eles fornecem dados da instância que são úteis para automação de processos.

Para acessar os metadados, basta acessar via navegador ou dando um curl na url: http://169.254.169.254/latest/meda-data/.

Captura-de-Tela-2018-01-28-a-s-14.55.10

Acima listamos algumas informações disponíveis através dos metadados. Abaixo apresentamos alguns exemplos para exibir estes dados.

Captura-de-Tela-2018-01-28-a-s-14.56.18

A forma mais comum de uso é através de scripts com o comando curl.

User data

User data são instruções que podem ser passadas para a instância executar no momento da inicialização. Pode ser um script informado no momento da criação da instância.

Para que seja possível usar o user data, é necessário que a instância tenha o Cloud-init ou o EC2 config instalado. Cloud-init é usado em instâncias Linux e EC2Config em instâncias Windows. Qualquer AMI oficial da Amazon já contém este recurso instalado nativamente.

Captura-de-Tela-2018-01-28-a-s-14.57.29

Juntos, medadata e user data são muito úteis na automação da sua infraestrutura. Abaixo temos um exemplo de user-data.

Captura-de-Tela-2018-01-28-a-s-14.57.36

Elastic Network Interface (ENI)

Elastic Network Interface é a interface de rede virtual da instância. Toda instância possui pelo menos 1 ENI, podendo ter várias. Cada ENI possui suas propriedades e elas se mantém mesmo quando a ENI não está em uso. Isso significa que você pode usar uma determinada interface de rede com certo MAC Address em uma instância, desconectar e conectar essa interface em outra instância, mantendo o mesmo MAC Address e endereço IP. Você pode criar uma ENI independente de uma instância.

Um exemplo de uso de uma segunda ENI em uma instância é para criar uma rede de gerência, apartada à interface de rede de produção.

Quando uma instância possui mais de uma ENI, ela é chamada de dual-homed ou multi-homed.

Elastic IP (EIP)

Elastic IP é um endereço IP público reservado para sua conta AWS. Ele é atrelado a uma ENI (interface de rede virtual) e pode ser realocado entre instâncias. Você não pode conectar um mesmo Elastic IP em mais de uma instância ao mesmo tempo.

Visto que endereços IP são escassos, se você alocar um EIP mas não usar, é cobrada uma taxa por hora. Porém, se o EIP estiver em uso, não existe cobrança.

O escopo de serviço do Elastic IP é de Região, ou seja, você não pode usar um EIP que reservou em uma região em outra região.

Public IP

Public IP é um endereço de IP público designado quando uma instância é lançada. Diferentemente do EIP, um Public IP não pode ser realocado entre instâncias.

AMI

AMI é uma imagem de máquina, que contém as informações necessárias para executar uma instância. Com base em uma AMI pré-existente você pode executar quantas instâncias precisar e elas serão exatamente iguais.

Captura-de-Tela-2018-01-28-a-s-15.02.10

Uma AMI é composta pelo seguinte:

  • Um modelo para o volume raiz, como um sistema operacional Windows ou Linux;
  • Permissões de execução que controma quais contas da AWS podem usar a AMI;
  • Um mapeamento de volumes EBS anexados à instância.

Você pode usar AMIs fornecidas pela AWS, por parceiros de tecnologia que disponibilizam suas AMIs no marketplace da AWS ou pode também criar suas próprias AMIs.