AWS CLI: Conheça alguns comandos e dicas que vão te ajudar no dia a dia

Hoje venho para mostrar como podemos gerenciar alguns recursos da AWS via terminal usando o AWS CLI (Command Line Interface). Existem duas formas de trabalhar com os serviços da AWS, que são; uma pela console e a outra pelo terminal. Eu particularmente prefiro o uso da AWS CLI, pois é possível fazer tudo de forma mais rápida do que pela console web e existem até mais recursos pela AWS CLI do que pela console web. Você verá que ao longo desse artigo mostrarei alguns cases bem específicos.

Para quem é desenvolvedor de software, é possível utilizar algumas SKD’s para integração de sistemas com os recursos fornecidos pela AWS, veja abaixo algumas delas que são suportadas:

SDK’s

A AWS CLI abrange todos os serviços do AWS para uso via linha de comando. Irei mostrar usando mais o recurso de EC2 da AWS, mas se você verificar a documentação do AWS CLI verá que pode trabalhar com muitos outros serviços suportados. Veja a documentação aqui.

Vou mostrar rapidamente algumas funcionalidades da AWS CLI e logo vamos para nosso case, que será DEMAIS. 😉

  • Estrutura de comando na AWS CLI:
$ aws <command> <subcommand> [options and parameters]

Alguns pontos a serem mencionados:
- A chamada básica para o programa aws.
- O comando de nível superior que normalmente corresponde a um serviço do AWS compatível com a AWS CLI.
- O subcomando que especifica a operação a ser realizada.
- As opções gerais da CLI ou os parâmetros necessários para a operação. Você pode especificá-los em qualquer ordem, desde que siga as três primeiras partes. Se um parâmetro exclusivo for especificado várias vezes, apenas o último valor se aplicará.

Para mais informações, consulte a documentação aqui.

  • Formas de melhorar a sua consulta na AWS CLI:

As vezes você pode querer buscar todas as instâncias de algum determinado serviço, mas você não quer todos os campos da saída padrão. Nesse caso podemos usar a opção query, esse parâmetro filtra os campos que você precisa e a saída fica mais curta e precisa.

Outra opção é o uso do filter, que mostra por exemplo todas as instâncias do servidor x, ou todas as instâncias da região x, ou ainda todas as instâncias que possuem o tipo t2.micro. Use e abuse desses dois recursos na AWS CLI, ajuda muito. 🚀

  • Existem algumas formas de saída dos comandos da AWS CLI, que são:

--output json
--output table
--output text

Veja esse exemplo abaixo usando a saída com json:

root@amaury:~# aws ec2 start-instances --instance-ids i-082f3d641e2c07a80 i-0e17198ccef021229 i-0e709937096f6f554
{
"StartingInstances": [
{
"InstanceId": "i-0e709937096f6f554",
"CurrentState": {
"Code": 0,
"Name": "pending"
},
"PreviousState": {
"Code": 80,
"Name": "stopped"
}
},
{
"InstanceId": "i-0e17198ccef021229",
"CurrentState": {
"Code": 0,
"Name": "pending"
},
"PreviousState": {
"Code": 80,
"Name": "stopped"
}
},
{
"InstanceId": "i-082f3d641e2c07a80",
"CurrentState": {
"Code": 0,
"Name": "pending"
},
"PreviousState": {
"Code": 80,
"Name": "stopped"
}
}
]
}

Um outro exemplo mas agora usando a saída table:

root@amaury:~# aws ec2 stop-instances --instance-ids i-082f3d641e2c07a80 i-0e17198ccef021229 i-0e709937096f6f554 --output table
---------------------------
| StopInstances |
+-------------------------+
|| StoppingInstances ||
|+-----------------------+|
|| InstanceId ||
|+-----------------------+|
|| i-0e709937096f6f554 ||
|+-----------------------+|
||| CurrentState |||
||+-------+-------------+||
||| Code | Name |||
||+-------+-------------+||
||| 64 | stopping |||
||+-------+-------------+||
||| PreviousState |||
||+--------+------------+||
||| Code | Name |||
||+--------+------------+||
||| 16 | running |||
||+--------+------------+||
|| StoppingInstances ||
|+-----------------------+|
|| InstanceId ||
|+-----------------------+|
|| i-0e17198ccef021229 ||
|+-----------------------+|
||| CurrentState |||
||+-------+-------------+||
||| Code | Name |||
||+-------+-------------+||
||| 64 | stopping |||
||+-------+-------------+||
||| PreviousState |||
||+--------+------------+||
||| Code | Name |||
||+--------+------------+||
||| 16 | running |||
||+--------+------------+||
|| StoppingInstances ||
|+-----------------------+|
|| InstanceId ||
|+-----------------------+|
|| i-082f3d641e2c07a80 ||
|+-----------------------+|
||| CurrentState |||
||+-------+-------------+||
||| Code | Name |||
||+-------+-------------+||
||| 64 | stopping |||
||+-------+-------------+||
||| PreviousState |||
||+--------+------------+||
||| Code | Name |||
||+--------+------------+||
||| 16 | running |||
||+--------+------------+||

Os dois exemplos acima foi apenas para exemplificar os tipos de saídas, mais abaixo irei explicar o comando utilizado.

Vamos partir para a instalação, afinal, você deve estar super empolgado para começar a usar seus recursos da AWS com a linha de comando. 😜

  • Instalação do AWS CLI

O AWS CLI pode ser instalado em sistemas Windows e Linux, nesse artigo irei mostrar a instalação para Linux. Siga comigo:

Só lembrando que para a instalação é exigido o Python 2.6.5 ou posterior.

Primeiramente, verifique a versão do pip no seu sistema:

$ pip3 --version

Se ainda não tiver o pip instalado, verifique qual versão do Python está instalada:

$ python --version

Agora, iniciando a instalação da AWS CLI:

$ pip3 install awscli --upgrade --user

Verifique se o AWS CLI está instalado corretamente:

aws --version
aws-cli/1.17.9 Python/2.7.17 Linux/5.3.0-29-generic botocore/1.14.9
  • Configurando a AWS CLI:

O comando aws configure é a forma mais fácil de configurar sua instalação da AWS CLI, veja um exemplo:

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

Para mais detalhes de como configurar o AWS CLI, acesse esse link aqui.

  • Hora de executar alguns comandos:

Feito a configuração da AWS CLI, vamos rodar alguns comandos para que você possa ver como é poderoso esse recurso da AWS.
No exemplo abaixo, estou mostrando a saída padrão em formato json, que defini na configuração da AWS CLI, estou descrevendo os ID’s das minhas instâncias:

$ aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId"
[
[
"i-02f5aa06af8838f8a",
"i-01cb845d279218c20",
"i-00835abcb71700b5e"
],
[
"i-082f3d641e2c07a50",
"i-0e709937096f6f525",
"i-0e17198ccef02124f"
]
]
  • Agora listando o VPC ID das minhas instâncias:
$ aws ec2 describe-instances --query "Reservations[*].Instances[*].VpcId"
[
[
"vpc-2f0bb010",
"vpc-2f0bb010",
"vpc-2f0bb010"
],
[
"vpc-2f0bb010",
"vpc-2f0bb010",
"vpc-2f0bb010"
]
]

Outro exemplo agora verificando o status das instâncias usando o comando grep:

$ aws ec2 describe-instances | grep running
"Name": "running"
"Name": "running"
"Name": "running"
  • Case com AWS CLI

Vamos fazer a criação de um volume e dar um attach na instância do EC2.

Eu fiz uma criação de instância para esse teste.

Primeiramente, devemos saber a availability zone da minha instância, para isso precisamos executar o comando:

$ aws ec2 describe-instances | grep -i "us-east"
"AvailabilityZone": "us-east-1d"

Agora que sei, preciso criar o volume nessa availability zone:

$ aws ec2 create-volume --availability-zone us-east-1d --size 1 --volume-type gp2
{
"AvailabilityZone": "us-east-1d",
"Tags": [],
"Encrypted": false,
"VolumeType": "gp2",
"VolumeId": "vol-021ef80f1a46be24r",
"State": "creating",
"Iops": 100,
"SnapshotId": "",
"CreateTime": "2020-01-30T10:50:35.000Z",
"Size": 1
}

O comando mostra na saída padrão em formato json, algumas informações sobre esse volume, e abaixo você pode ver que ele foi criado e está com status de disponível:

Agora vou dar um attach na instância:

$ aws ec2 attach-volume --device "/dev/xvdb" --volume-id vol-021ef80f1a46be24r --instance-id i-03761bc1d46c42560
{
"AttachTime": "2020-01-30T10:56:59.384Z",
"InstanceId": "i-03761bc1d46c42560",
"VolumeId": "vol-021ef80f1a46be24r",
"State": "attaching",
"Device": "/dev/xvdb"
}

Veja abaixo que esse volume está em uso pela instância:

  • Dica útil:

Informando aqui que a AWS possui um guia de referência que mostra mais opções e exemplos nos comandos dos recursos da AWS, para uso com a AWS CLI.

Veja que top, acesse aqui:

Eu deixei essa dica pois acho muito válido essa documentação, sem contar que já me ajudou muito no dia dia, não tem como decorar tudo, então sempre deixe esse guia no seu browser, isso vai facilitar seu trabalho com a cloud da AWS.

Gostaria de mencionar o curso que fiz de Administração da AWS, ministrado pelo especialista Douglas Bussoli, na qual eu aprendi sobre muitos recursos e funcionalidades dos serviços da AWS.

Fico à disposição para dúvidas, e sugestões de melhorias. Agradecido e até o próximo artigo. 🚀

Senior Linux Administrator at IBM

Senior Linux Administrator at IBM