Alisson Machado
28 December 2020

Capítulo 7: Criando sua infraestrutura usando serviços em nuvem

Este capítulo visa apresentá-lo aos maiores players do mercado de Cloud e como podemos usá-los para acelerar o provisionamento, escalabilidade e confiabilidade de nossa infraestrutura 

 

Estrutura:

Neste capítulo discutiremos os seguintes tópicos: 

  • Principais Players de Cloud  
  • Provisionamento usando AWS 
  • Provisionamento usando GCP 
  • Provisionamento usando o Azure 

 

Objetivos 

Depois de estudar esta unidade, você deve ser capaz de: 

  • O que é nuvem e como podemos usá-la 
  • Configuração de ambiente em cada jogador 
  • Criando uma infraestrutura simples usando a linha de comando 
  • Verificando a infraestrutura criada no console em nuvem 



Principais Players em Cloud Computing

Até este momento só usamos nosso próprio computador para criar tudo. No entanto, para executar as aplicacoes em produção, é necessário varias coisas, como alta disponibilidade, backup, monitoramento, redundância e etc.

No passado, muitas empresas tinham seus próprios data centers ou servidores locais que eram ligados 24 horas por dia, 7 horas por semana. Portanto, é preciso muito custoso gerenciar tudo, pois não é apenas cuidar das máquinas virtuais ou do software, é necessário gerenciar a Rede, Armazenamento, Energia, No Breaks, Conexão à Internet e muitas outras coisas que envolvem uma infraestrutura de T.I.

Além disso, e necessário também uma equipe com diferentes habilidades para gerenciar tudo, sendo assim, é necessária para ter a redundância das pessoas também, pois se algum funcionário da empresa adoecer ou sair de ferias, você deve ter outro disponível no caso de algo parar de funcionar. 

 

Quando comecei a trabalhar com T.I, algumas empresas para as quais trabalhei estavam usando um serviço chamado collocation, que é basicamente você pode alugar um Rack dentro de um Data Center onde você pode instalar seus servidores, assim, você fica livre de gerenciar a parte de rede, energia e internet foram delegadas para a empresa que estava oferecendo o serviço. Algum tempo depois, começamos a usar os serviços de uma empresa chamada SoftLayer, essa empresa tinha seu próprio Data Center e poderíamos pagar para usar um Servidor Físico por algum tempo, basicamente estávamos alugando o servidor. 

 

Após esse período começa a trabalhar com a AWS, que é uma empresa de Cloud, nessa empresa podemos alugar Máquinas Virtuais, exatamente como os VMs que criamos nos capítulos anteriores. Usando este serviço há uma série de benefícios, como alta disponibilidade, então, se algum servidor físico falhar em seu data center, você pode simplesmente desligar o VM e iniciar o VM em outro servidor, ou até mesmo pagar por eles fazendo o backup para você, assim, apenas uma pessoa pode gerenciar toda uma infraestrutura com uma centena de servidores. 

 

AWS 

Amazon Web Services é atualmente o principal player de nuvem no momento, eles têm dezenas de serviços que você pode usar para fazer o deploy das suas aplicacoes, monitoramento, backup, criar VMs, Bancos de Dados e etc. Ele também permite que você crie tudo de forma automatizada usando uma linha de comando, que é chamada de awscli. Mas é claro que não é tão fácil usar todos os seus serviços, por isso eles criaram muitos cursos e certificações, para que as pessoas possam se qualificar e levar o melhor que seus serviços podem oferecer. 

 

GCP 

O Google Cloud Platform é o mais novo, eles estão oferecendo muitos serviços como o AWS, mas eles ainda não têm todos os serviços como eles. No entanto, possuem serviços exclusivos como o Big Query, que é um dos mais usados para consultar grandes conjuntos de dados e armazenar em nuvem. Além disso, se você está trabalhando com Machine Learning, eles têm clusters disponíveis para obter o máximo desempenho com TensorFlow Projects. GCP é muitas vezes mais barato do que os outros grandes concorrentes, para os meus projetos pessoais eu estou usando-o. 

 

Azure 

Esta é a Plataforma De Nuvem da Microsoft, portanto, se você está planejando exportar seu Active Directory para a nuvem, essa é a opção, eles têm serviços exclusivos como SQL Server, Azure Active Directory ou mesmo o Azure DevOps que está se tornando muito popular, algumas das grandes empresas que eu trabalhei no passado eles estavam usando o Azure como plataforma principal, porque a Microsoft é uma empresa confiável, mas eles são os mais caros também, portanto, se o dinheiro não é o seu problema e você está usando produtos da Microsoft em seus aplicativos, esta pode ser a opção certa. 

 

Provisionamento usando AWS 

A AWS tem seus próprios cursos explicando como usar todos os serviços, então meu objetivo aqui é mostrar como podemos fornecer a mesma infraestrutura como fizemos usando VirtualBox e Vagrant, assim, vou focar em Máquinas Virtuais e como podemos instalar coisas nelas. 

 

Portanto, sua primeira tarefa é criar sua própria conta AWS: 

 

http://console.aws.amazon.com/ 

 

Depois de criar sua conta e fazer login no console, você deve estar vendo uma página como a abaixo. 

 

 

 

Este console permite que você crie qualquer serviço que você deseja, no nosso caso, clique em Services > EC2 > Running Instances. Você verá esta página. 

 

 

 

Minha conta está vazia, usei mais AWS no passado, atualmente estou usando o Azure no meu trabalho atual e GCP para projetos pessoais. No entanto, este é o console para você gerenciar suas VMs.

É importante que você saiba onde você pode ver suas máquinas virtuais no console, pois é mais fácil do que via linha de comando, mas a partir de agora vamos criar tudo usando a linha de comando, assim, agora vamos instalar o Python e depois a Linha de Comando AWS. 

 

https://www.python.org/downloads/ 

 

Após a instalação da Python, você pode instalar o AWS CLI executando a seguinte linha: 

 

PS C:\Users\1511 MXTI> python -m pip install awscli --user
Collecting awscli

 

Para verificar se o aws cli foi instalado com sucesso, você pode executar este comando: 

 

PS C:\Users\1511 MXTI> aws --version
aws-cli/1.18.42 Python/3.8.2 Windows/10 botocore/1.15.42

 

Tudo está funcionando, agora para configurar o acesso que você precisa para criar uma conta IAM com o acesso programático, a maneira mais fácil é clicar em Services e digitar IAM, como a imagem abaixo. 

 

 

 

IAM significa Identity Access Management (Gerenciamento de Acesso à Identidade), este serviço é responsável por criar e gerenciar usuários e grupos, nesse clique de painel em Users > Add User

 

 


Estou criando um novo usuário chamado devops com o acesso programático. 

 

 

 

Selecione a opção Attach existing policies directly e a política AdministratorAccess, esta política permitirá que nosso usuário faça tudo em nossa conta AWS, essa permissão não é recomendada para ambientes de produção, o usuário deve ter apenas a permissão necessária para um propósito específico. 

 

 

 


Depois de salvar seu usuário você será redirecionado para a página com a Access Key e a Secret Key, salve esses valores, porque você nunca mais será capaz de obter a SecretKey novamente, a única maneira é criar um novo usuário.


 

 

Depois de seguir essas etapas, podemos configurar a linha de comando e testar se somos capazes de nos conectar ao console, a primeira tarefa é adicionar nossas chaves no ambiente local. 

 

PS C:\Users\1511 MXTI> aws configure
AWS Access Key ID [None]: YOU_ACCESS_KEY
AWS Secret Access Key [None]: YOUR_SECRET_KEY
Default region name [None]: eu-central-1
Default output format [None]:

 

No nome da região, eu estou usando a eu-central-1, que é respectivamente para Frankfurt, porque eu moro na Alemanha, mas voce pode escolher uma regiao proximo a voce para diminuir a latencia, muitas pessoas definem essa opção como us-east-1, que é respectivamente para Virgínia nos EUA, mas cabe a voce decidir. 

 

Agora você pode verificar se você tem alguma instância criada usando o comando: 

 

PS C:\Users\1511 MXTI> aws ec2 describe-instances
{
"Reservations": []
}

 

Eu não tenho nenhuma instância, para criar uma instância quando você esta usando o console é uma tarefa simples, com apenas alguns cliques você pode criar uma, no entanto, para automatizar você precisa usar a linha de comando e para que essa automação seja possível, voce precisa conhecer cada objeto que é necessário para fazer uma VM funcionar. 

 

O primeiro é a criação de uma chave SSH, é necessário acessar o VM após a criação. 


PS C:\Users\1511 MXTI> aws ec2 create-key-pair --key-name DevopsBook --query 'KeyMaterial' --output text  
YOUR_PRIVATE_KEY 

 

O parâmetro --query foi usado para obter apenas a chave privada em um formato de um texto simples, caso contrário você pode ter em apenas uma sequência que pode fazer você ter problemas com o formato de arquivo quando você usá-lo. 

 

Copie a chave privada e salve em um arquivo, no meu caso salvo como devopbook.pem, que é o padrão usado pela AWS. 

 

Cada instância precisa de um Address IP , caso contrário você não será capaz de acessar remotamente, mas para ter um endereço IP é necessário um endereço de uma sub-rede e em sequência de uma rede, então agora vamos criar uma Rede. 

 
PS C:\Users\1511 MXTI> aws ec2 create-vpc --cidr-block "192.168.0.0/24"

{
"Vpc": {
"CidrBlock": "192.168.0.0/24",
"DhcpOptionsId": "dopt-891c21e2",
"State": "pending",
"VpcId": "vpc-0825b5c6f6a2a2429",
"OwnerId": "360560397478",
"InstanceTenancy": "default",
"Ipv6CidrBlockAssociationSet": [],
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-07b70a566b3a97801",
"CidrBlock": "192.168.0.0/24",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": false,
"Tags": []
}
}

 

Rede Virtual no AWS se chama VPC ( Virtual Private Cloud ), tive que especificar o Bloco CIDR, que representa o Tamanho da Rede, que nos permite ter 254 endereços disponíveis. Salve o VpcId, precisaremos dele mais tarde. 

 

O próximo passo é criar uma sub-rede: 

 

PS C:\Users\1511 MXTI> aws ec2 create-subnet --cidr-block "192.168.0.0/24" --vpc-id vpc-0825b5c6f6a2a2429

{
"Subnet": {
"AvailabilityZone": "eu-central-1a",
"AvailabilityZoneId": "euc1-az2",
"AvailableIpAddressCount": 251,
"CidrBlock": "192.168.0.0/24",
"DefaultForAz": false,
"MapPublicIpOnLaunch": false,
"State": "pending",
"SubnetId": "subnet-0c7889e706674e64f",
"VpcId": "vpc-0825b5c6f6a2a2429",
"OwnerId": "360560397478",
"AssignIpv6AddressOnCreation": false,
"Ipv6CidrBlockAssociationSet": [],
"SubnetArn": "arn:aws:ec2:eu-central-1:360560397478:subnet/subnet-0c7889e706674e64f"
}

}


Na sub-rede eu também usei o mesmo CIDR Block, quero ter apenas uma sub-rede na minha VPC, mas você pode criar, por exemplo, uma VPC com um bloco maior como /16 ou /8 e dividi-lo em muitas sub-redes, tanto quanto você quiser. 

 

Por razões de segurança, somos obrigados a criar Security Groups. É como regras de firewall, que podemos permitir que o tráfego determinando endereço IP, redes e bloqueie ou permita portas dependendo dos protocolos. Portanto, vamos criá-lo, porque é um requisito para uma instância. 

 

PS C:\Users\1511 MXTI> aws ec2 create-security-group --group-name devops-book --description "Example used in the book" --vpc-id vpc-0825b5c6f6a2a2429
{
"GroupId": "sg-0da7b308d99365dc3"
}


Salve o GroupId, agora precisamos permitir toda a conexão TCP neste grupo. 

 

PS C:\Users\1511 MXTI> aws ec2 authorize-security-group-ingress --group-id sg-0da7b308d99365dc3 --protocol tcp --port 22 --cidr 0.0.0/0 

 

A porta 22, o acesso é permitido de qualquer origem e podemos atribuir este SecurityGroup a qualquer instância que tenhamos. 

 

E, finalmente, podemos criar e instância. 

 

PS C:\Users\1511 MXTI> aws ec2 run-instances --count 1 --instance-type t3.micro --key-name DevopsBook --security-group-ids sg-0da7b308d99365dc3 --subnet-id subnet-0c7889e706674e64f --image-id ami-0b418580298265d5c
{
"Groups": [],
"Instances": [


O novo parâmetro aqui é o ImageID, isso representa um ID de uma Amazon Machine Image ( AMI ), que é basicamente o ISO que usamos no primeiro capítulo, ou a Box que usamos no capítulo Vagrant, para ver quais são as suas opções de imagem você pode dar uma olhada no Amazon Marketplace https://aws.amazon.com/marketplace, no meu caso eu sou um fã do Ubuntu, assim, este ImageID representa uma versão Ubuntu 18.04. 

 

Verifique se sua instância está sendo executado com o seguinte comando: 

 

PS C:\Users\1511 MXTI> aws ec2 describe-instances --query "Reservations[*].Instances[*].{Instance:InstanceId,State:State}"
[
[
{
"Instance": "i-0d26f9c327b92b630",
"State": {
"Code": 16,
"Name": "running"
}
}
]
]

 

Ok, nós temos uma instância e ela está sendo executado, então somos capazes de nos conectar, geralmente quando criamos uma instância usando o console, um dns público é atribuído à instância, verifique se você tem um: 

 

PS C:\Users\1511 MXTI> aws ec2 describe-instances --query "Reservations[*].Instances[*].{Instance:InstanceId,State:State,DNS:PublicDnsName}"
[
[
{
"Instance": "i-0d26f9c327b92b630",
"State": {
"Code": 16,
"Name": "running"
},
"DNS": ""
}
]
]

 

A instância não tem acesso à internet também, então precisamos criar um Internet Gateway para isso. 

 

PS C:\Users\1511 MXTI> aws ec2 create-internet-gateway
{
"InternetGateway": {
"Attachments": [],
"InternetGatewayId": "igw-05d94c382dd27185b",
"Tags": []
}
}

 

Agora precisamos associar o InternetGateway com a VPC e agora todas as Instâncias dentro do mesmo vpc terão acesso à internet. 

 

PS C:\Users\1511 MXTI> aws ec2 attach-internet-gateway --internet-gateway-igw-05d94c382dd27185b --vpc-id vpc-0825b5c6f6a2a2429 

 

Mesmo criando o Gateway da Internet e o VPC, é necessário para criar uma rota padrão, então toda a conexão por padrão tentará passar pela internet primeiro. 

Você pode verificar as tabelas de rotas usando este comando. 

 

PS C:\Users\1511 MXTI> aws ec2 describe-route-tables
{
"RouteTables": [
{
"Associations": [
{
"Main": true,
"RouteTableAssociationId": "rtbassoc-0388bce2f3bf06f9b",
"RouteTableId": "rtb-0ba4bf0ea11f024ee",
"AssociationState": {
"State": "associated"
}
}
],
"PropagatingVgws": [],
"RouteTableId": "rtb-0ba4bf0ea11f024ee",
"Routes": [
{
"DestinationCidrBlock": "192.168.0.0/24",
"GatewayId": "local",
"Origin": "CreateRouteTable",
"State": "active"
}
],
"Tags": [],
"VpcId": "vpc-0825b5c6f6a2a2429",
"OwnerId": "360560397478"
},

 

A rota com ID rtb-0ba4bf0ea11f024ee  está associada ao VPC vpc-0825b5c6f6f6a2a2429 que é o vpc que criamos, portanto, precisamos atribuir uma nova rota que toda conexão com o destino para 0.0.0.0/0 passará pelo nosso Internet Gateway, representado pelo ID igw-05d94c382dd27185b. 

 PS C:\Users\1511 MXTI> aws ec2 create-route --route-table-id rtb-0ba4bf0ea11f024ee --destination-cidr-block 0.0.0.0/0 --gateway-id igw-05d94c382dd27185b
{
"Return": true
}


Agora voce pode tambem associar um IP Publico a VM.


PS C:\Users\1511 MXTI> aws ec2 allocate-address

{

"PublicIp": "18.156.153.94",

"AllocationId": "eipalloc-04066542351eff3a4",

"PublicIpv4Pool": "amazon",

"NetworkBorderGroup": "eu-central-1",

"Domain": "vpc"

}

 

Ok, nós temos o ip público e agora precisamos atribuí-lo com a instância. 

 

PS C:\Users\1511 MXTI> aws ec2 associate-address --allocation-id eipalloc-04066542351eff3a4 --instance-id i-0d26f9c327b92b630 
{ 
   "AssociationId": "eipassoc-07026da6c9093c86a" 
} 
 


Vamos verificar a Instancia mais uma vez. 

PS C:\Users\1511 MXTI> aws ec2 describe-instances --query "Reservations[*].Instances[*].{Instance:InstanceId,State:State,DNS:PublicDnsName, IP:PublicIpAddress}"
[
[
{
"Instance": "i-0d26f9c327b92b630",
"State": {
"Code": 16,
"Name": "running"
},
"DNS": "",
"IP": "18.156.153.94"
}
]
]

 

Agora temos o endereço IP: 18.156.153.93 atribuido a instância, ainda não temos o DNS Público, mas podemos tentar conectar usando o IP. Lembre-se da Chave Privada que você salvou quando criamos a chave ssh, você vai precisar dela agora. 

 

PS C:\Users\1511 MXTI> ssh -i devopskey.pem ubuntu@18.156.153.94 

The authenticity of host '18.156.153.94 (18.156.153.94)' can't be established. 
ECDSA key fingerprint is SHA256:N5kMSWQKVwBLycjjUpzJ/AsRnRbBvDVqagBJunxCXyA. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added '18.156.153.94' (ECDSA) to the list of known hosts. 
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-1057-aws x86_64) 
 
 * Documentation:  https://help.ubuntu.com 
 * Management:     https://landscape.canonical.com 
 * Support:        https://ubuntu.com/advantage 
 
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-1057-aws x86_64) 
 
 * Documentation:  https://help.ubuntu.com 
 * Management:     https://landscape.canonical.com 
 * Support:        https://ubuntu.com/advantage 
 
  System information as of Tue Apr 21 19:07:47 UTC 2020 
 
  System load:  0.24              Processes:           104 
  Usage of /:   13.6% of 7.69GB   Users logged in:     0 
  Memory usage: 16%               IP address for ens5: 192.168.0.44 
  Swap usage:   0% 
 
ubuntu@ip-192-168-0-44:~$      
                           

 

Tudo está funcionando com sucesso. Muito esforço para criar algo que poderíamos fazer em alguns cliques simples usando o painel, mas que é a live de um cara DevOps, precisamos automatizar muitos usando a linha de comando, REST APIs, às vezes SOAP Interfaces e não importa o que você tem que automatizar, basta fazê-lo. 

 

Se você quiser excluir tudo, você pode acessar a interface web diretamente e excluir o VM, todos os recursos serão excluídos também. 

 

 

Provisionamento usando GCP 

 

Agora é hora de criar a mesma infraestrutura usando a Plataforma Google Cloud, os elementos são exatamente os mesmos em todas as plataformas, precisaremos de Redes, Subnets, Chaves SSH, Endereço Ip Público e etc. No entanto, os comandos e a forma como vamos implementá-lo, mudam por plataforma. Portanto, vamos instalar o Google Cloud Shell e iniciar um passo a passo sobre ele.  

 

https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe 

 

Para instalar é basta clicar duas vezes e Seguinte, Next, Finish. 

 

Após o término da instalação, você precisa criar sua configuração executando o seguinte comando: 

 

PS C:\Users\1511 MXTI> gcloud config configurations create book 
Created [book]. 
Activated [book]. 

 

Agora você deve configurar sua conta do Google para acessar a plataforma. 

 

PS C:\Users\1511 MXTI> gcloud init 
Welcome! This command will take you through the configuration of gcloud. 
 
Settings from your current configuration [book] are: 
core: 
  disable_usage_reporting: 'True' 
 
Pick configuration to use: 
 [1] Re-initialize this configuration [book] with new settings 
 [2] Create a new configuration 
 [3] Switch to and re-initialize existing configuration: [default] 
Please enter your numeric choice:  1 
 
Your current configuration has been set to: [book] 
 
You can skip diagnostics next time by using the following flag: 
  gcloud init --skip-diagnostics 
 
Network diagnostic detects and fixes local network connection issues. 
Checking network connection...done. 
Reachability Check passed. 
Network diagnostic passed (1/1 checks passed). 
 
Choose the account you would like to use to perform operations for 
this configuration: 
 [1] alisson.machado@stone.com.br 
 [2] Log in with a new account 
Please enter your numeric choice:  2 
 
Your browser has been opened to visit: 
 

 

Eu já tinha uma configuração existente, então eu escolho a opçãoRe-inicializar e depois adicionar uma nova conta, pois o primeiro e-mail mostrado não é a minha conta atual do Google. Esse processo abrirá um navegador para você e você só precisa fazer login em sua conta. Se tudo correu bem com você, o terminal você mostra uma mensagem como essa: 

 

You are logged in as: [alisson.copyleft@gmail.com]. 
 
Pick cloud project to use: 
 [1] alisson-187813 
 [2] saas-205517 
 [3] Create a new project 
Please enter numeric choice or text value (must exactly match list 
item): 
 
In my cause I will create a new project called chapter7-20200423 
 
Please enter numeric choice or text value (must exactly match list 
item):  3 
 
Enter a Project ID. Note that a Project ID CANNOT be changed later. 
Project IDs must be 6-30 characters (lowercase ASCII, digits, or 
hyphens) in length and start with a lowercase letter. chapter7-20200423 
Waiting for [operations/cp.8418911479956985045] to finish...done. 
Your current project has been set to: [chapter7-20200423]. 

 

Agora meu projeto está pronto para ser usado.


Acesse https://console.cloud.google.com clique em Projects > All, você verá o seu projeto criado. 

 

 

No Google o nome do serviço para criar as VMs é o Google Compute Engine, usando este serviço poderemos criar exatamente como fizemos na Amazon. 

 

Em primeiro lugar, você precisa ativo o faturamento em sua conta, em seu Dashboard dentro do projeto, você pode clicar em Go To Compute Engine e em seguida, você tem um botão chamado Enable Billing. 

 

 


Clique nele e aguarde alguns minutos para que o serviço seja ativado. 

 

Uma vez feita a configuração, você pode encontrar a imagem que deseja criar sua instância usando o seguinte comando: 

 

PS C:\Users\1511 MXTI> gcloud compute images list 
NAME                                                  PROJECT            FAMILY                            DEPRECATED  STATUS 
sles-15-sp1-sap-v20200415                             suse-sap-cloud     sles-15-sp1-sap                               READY 
ubuntu-1604-xenial-v20200407                          ubuntu-os-cloud    ubuntu-1604-lts                               READY 
ubuntu-1804-bionic-v20200414                          ubuntu-os-cloud    ubuntu-1804-lts                               READY 
ubuntu-1910-eoan-v20200413a                           ubuntu-os-cloud    ubuntu-1910                                   READY 
ubuntu-minimal-1604-xenial-v20200407                  ubuntu-os-cloud    ubuntu-minimal-1604-lts                       READY 

 

Você encontrará muitas opções; no meu caso vou usar ubuntu-1804-xenial-20200407 , você também precisa escolher a zona onde você quer criar o seu vm. 

 

PS C:\Users\1511 MXTI> gcloud compute zones list 
NAME                       REGION                   STATUS  NEXT_MAINTENANCE  TURNDOWN_DATE 
us-east1-b                 us-east1                 UP 
us-east1-c                 us-east1                 UP 
us-east1-d                 us-east1                 UP 

 

Desta vez criarei meu VM nos EUA usando a zona us-east1-b . 

 

Na parte AWS criamos uma instância com o tamanho t3.micro, no Google temos um respectivo, mas com um nome diferente. 

PS C:\Users\1511 MXTI> gcloud compute machine-types list --zones=us-east1-b                                                                                                NAME             ZONE        CPUS  MEMORY_GB  DEPRECATED 
e2-highmem-4     us-east1-b  4     32.00 
e2-highmem-8     us-east1-b  8     64.00 
e2-medium        us-east1-b  2     4.00 
e2-micro         us-east1-b  2     1.00 
e2-small         us-east1-b  2     2.00 
e2-standard-16   us-east1-b  16    64.00 
e2-standard-2    us-east1-b  2     8.00 
e2-standard-4    us-east1-b  4     16.00 
e2-standard-8    us-east1-b  8     32.00 
f1-micro         us-east1-b  1     0.60 

 

Existem muitos tipos de família de máquinas que você pode usar, a diferença entre as famílias é o propósito para o que você quer usar o seu VM, a família E2, foi feita para VMs de Propósito Geral, assim, vou usar isso e o menor tamanho é micro que correspondem a 2cpus e 1 gb de memória. 

 

Às vezes, apenas definir o nome da imagem quando você está criando seu VM pode aumentar e erro, para evitar que você possa colocar o link de imagem diretamente: 

PS C:\Users\1511 MXTI> gcloud compute images list --uri                                                                                                                    https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-6-v20200402 
https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20200420 
https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1804-bionic-v20200414 https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-alpha-2430-0-0-v20200229 

 

Portanto, o link de imagem é: 

 https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1804-bionic-v20200414 

 

Para criar sua VM, execute o seguinte comando:  

PS C:\Users\1511 MXTI> gcloud compute instances create vm1 --zone=us-east1-b --machine-type=e2-micro --image=https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1804-bionic-v20200414 

Created [https://www.googleapis.com/compute/v1/projects/chapter7-20200423/zones/us-east1-b/instances/vm1]. 
NAME  ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS 
vm1   us-east1-b  e2-micro                   10.142.0.2   35.229.97.23  RUNNING 

 

O VM está sendo executado agora, com o IP externo 25.229.97.23, você pode usá-lo para se conectar em sua máquina, no entanto, o Google Cloud Shell tem um comando específico para criar a chave SSH para você e fazer login automaticamente na instância: 

 
PS C:\Users\1511 MXTI> gcloud compute ssh vm1 
WARNING: The PuTTY PPK SSH key file for gcloud does not exist. 
WARNING: The public SSH key file for gcloud does not exist. 
WARNING: The private SSH key file for gcloud does not exist. 
WARNING: You do not have an SSH key for gcloud. 
WARNING: SSH keygen will be executed to generate a key. 
WARNING: Invalid characters in local username [1511 MXTI]. Using username corresponding to active account: [alisson_copyleft] 
No zone specified. Using zone [us-east1-b] for instance: [vm1]. 
Updating project ssh metadata...\Updated [https://www.googleapis.com/compute/v1/projects/chapter7-20200423]. 
Updating project ssh metadata...done. 
Waiting for SSH key to propagate. 
The server's host key is not cached in the registry. You 
have no guarantee that the server is the computer you 
think it is. 
The server's ssh-ed25519 key fingerprint is: 
ssh-ed25519 255 9c:f6:6d:58:38:8e:d7:c4:df:63:28:8b:b4:c8:53:24 
If you trust this host, enter "y" to add the key to 
PuTTY's cache and carry on connecting. 
If you want to carry on connecting just once, without 
adding the key to the cache, enter "n". 
If you do not trust this host, press Return to abandon the 
connection. 
Store key in cache? (y/n) 

 

Acima você tem toda a saída, apenas para mostrar como funciona, após o término do comando um terminal estará aberto para você já estar conectado dentro do VM. 

 

 

E se você quiser excluir sua instância depois de aprender todo o processo, execute o seguinte comando: 

 

PS C:\Users\1511 MXTI> gcloud compute instances delete vm1 
No zone specified. Using zone [us-east1-b] for instance: [vm1]. 
The following instances will be deleted. Any attached disks configured 
 to be auto-deleted will be deleted unless they are attached to any 
other instances or the `--keep-disks` flag is given and specifies them 
 for keeping. Deleting a disk is irreversible and any data on the disk 
 will be lost. 
 - [vm1] in [us-east1-b] 
 
Do you want to continue (Y/n)? 

 

Por enquanto, isso é suficiente para você começar com sua infraestrutura no GCP. 

 

Provisionamento usando o Azure 

 

Como fizemos com os outros jogadores de nuvem, vamos fazer o mesmo no Azure, o objetivo de fornecer a mesma infraestrutura da mesma forma é mostrar o processo e fazer você se sentir confortável para escolher o que você prefere. 

 

Em seguida, o primeiro passo é instalar a Linha de Comando Azure seguindo este link: 

 

https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?view=azure-cli-latest 

 

O processo de instalação é exatamente o mesmo que todos os pacotes MSI, clique duas vezes, Next, Next e Finish. 

 

Após o término da instalação, você pode executar este comando para verificar se ele está funcionando. 

 

PS C:\Users\1511 MXTI> az --version 
azure-cli                          2.4.0 
 
command-modules-nspkg              2.0.3 
core                               2.4.0 
nspkg                              3.0.4 
telemetry                          1.0.4 
 
Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe' 
Extensions directory 'C:\Users\1511 MXTI\.azure\cliextensions' 
 
Python (Windows) 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 02:47:15) [MSC v.1900 32 bit (Intel)] 

  

Ok, o Azure CLI foi instalado com sucesso no meu caso, assim, para começar, você pode executar o seguinte comando: 

 

PS C:\Users\1511 MXTI> az login 
You have logged in. Now let us find all the subscriptions to which you have access... 
[ 
  { 
    "cloudName": "AzureCloud", 
    "isDefault": true, 
    "managedByTenants": [], 
    "name": "Pay-As-You-Go", 
    "state": "Enabled", 
    "user": { 
      "name": "alisson.copyleft@gmail.com", 
      "type": "user" 
    } 
  } 
] 

 

O login de comando az, autenticar sua linha de comando com sua conta do Azure. 

 

Semelhante ao Google, onde criamos um projeto para separar todos os serviços provisionados por contexto, faremos o mesmo no Azure, mas ao invés disso, criaremos projetos criaremos ResourceGroups. 

 

Mas antes de criar o ResourceGroup precisamos saber qual local usaremos, para ver os locais disponíveis você pode o seguinte comando. 

 

PS C:\Users\1511 MXTI> az account list-locations 
[ 
    { 
    "displayName": "Central US", 
    "id": "/subscriptions/55465d5a-355d-43d1-85ce-9e518c812c0c/locations/centralus", 
    "latitude": "41.5908", 
    "longitude": "-93.6208", 
    "name": "centralus", 
    "subscriptionId": null 
  }, 
  { 
    "displayName": "East US", 
    "id": "/subscriptions/55465d5a-355d-43d1-85ce-9e518c812c0c/locations/eastus", 
    "latitude": "37.3719", 
    "longitude": "-79.8164", 
    "name": "eastus", 
    "subscriptionId": null 
  }, 

 

O comando mostrará todos os locais disponíveis e, no meu caso, usarei o Leste dos EUA. Então agora podemos criar o ResourceGroup com o seguinte comando: 

 

PS C:\Users\1511 MXTI> az group create --location eastus --name book 
{ 
  "id": "/subscriptions/55465d5a-355d-43d1-85ce-9e518c812c0c/resourceGroups/book", 
  "location": "eastus", 
  "managedBy": null, 
  "name": "book", 
  "properties": { 
    "provisioningState": "Succeeded" 
  }, 
  "tags": null, 
  "type": "Microsoft.Resources/resourceGroups" 
} 

 

Agora temos um criar e chamado livro e dentro dele, criaremos todos os recursos necessários para nossa instância, um ponto interessante é que, quando você excluir seu grupo de recursos, tudo o que está por trás dele será excluído também. 

 

PS C:\Users\1511 MXTI> az vm image list 
You are viewing an offline list of images, use --all to retrieve an up-to-date list 
[ 
  { 
    "offer": "openSUSE-Leap", 
    "publisher": "SUSE", 
    "sku": "42.3", 
    "urn": "SUSE:openSUSE-Leap:42.3:latest", 
    "urnAlias": "openSUSE-Leap", 
    "version": "latest" 
  },   
  { 
    "offer": "UbuntuServer", 
    "publisher": "Canonical", 
    "sku": "18.04-LTS", 
    "urn": "Canonical:UbuntuServer:18.04-LTS:latest", 
    "urnAlias": "UbuntuLTS", 
    "version": "latest" 
  }, 

 

O comando sobre mostrar-lhe as imagens disponíveis para criar o seu VM, como sempre escolheremos o UbuntuServer,portanto, você pode criar a VM executando este comando: 

 

PS C:\Users\1511 MXTI> az vm create -n vm1 -g book --image Canonical:UbuntuServer:18.04-LTS:latest --admin-username ubuntu 
{ 
  "fqdns": "", 
  "id": "/subscriptions/55465d5a-355d-43d1-85ce-9e518c812c0c/resourceGroups/book/providers/Microsoft.Compute/virtualMachines/vm1", 
  "location": "eastus", 
  "macAddress": "00-0D-3A-9A-DF-E9", 
  "powerState": "VM running", 
  "privateIpAddress": "10.0.0.4", 
  "publicIpAddress": "52.224.120.36", 
  "resourceGroup": "book", 
  "zones": "" 
} 

 

O nome da imagem geralmente encaminhamos a URN (Uniforme Resource Name), que é a identificação para a imagem, o parâmetro --nome de usuário administrador é o usuário que terá o acesso para executar sudo e fazer as tarefas administrativas. 

 

A linha de comando do Azure é inteligente para obter sua tecla sshpadrão e adicionar ao VM, assim, para conectar você pode apenas executar um comando SSH como padrão e login. 

 

PS C:\Users\1511 MXTI> ssh ubuntu@52.224.120.36 
The authenticity of host '52.224.120.36 (52.224.120.36)' can't be established. 
ECDSA key fingerprint is SHA256:F/Tb2nXVw4B3aertXLsde0wUTzNkBzu+aOwFHEFpl/A. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added '52.224.120.36' (ECDSA) to the list of known hosts. 
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.0.0-1036-azure x86_64)Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.0.0-1036-azure x86_64) 
 
ubuntu@vm1:~$ 

 

Agora que você tem tudo funcionando, podemos apagar tudo para evitar alguns custos inesperados, uma vez que estamos apenas estudando. 

 

PS C:\Users\1511 MXTI> az group delete --name book 
Are you sure you want to perform this operation? (y/n): y 
PS C:\Users\1511 MXTI>                                       

 

Você pode aliviar agora e ter certeza de que tudo o que criamos antes custará. 

 

Conclusão 

 

Mostrei como criar uma Máquina Virtual em três dos principais players de nuvem, na Amazon mostrei com muito mais detalhes os outros concorrentes, mas não quero dizer que é mais difícil que o outro. Era só a minha explicação, atualmente estou trabalhando com o Azure, mas no passado, trabalhei com a Amazon e o Google também. Portanto, na minha perspectiva, um bom Engenheiro DevOps deve ser capaz de trabalhar com todas as plataformas, uma vez que os conceitos são iguais e você pode entregar a mesma infraestrutura essencial. Há outro conceito que se chama Multicloud, que visa usar todas as nuvens juntas e você pode recuperar o melhor de cada um, como autenticar seus usuários e serviços usando o Azure Active Directory, criar as Máquinas Virtuais usando o Amazon EC2 e consultar seus dados usando a Consulta Grande no Google.