AWS

Rodrigo Vieira
OperacionalTI
Published in
6 min readOct 24, 2016

Amazon Web Service para SysAdmins

Amazon EC2

Assumo que você já esteja utilizando os serviços da AWS e possua uma certa familiaridade com seus componentes. Se este não é o caso, reserve algumas horas para iniciar pelo Amazon EC2.

Ambiente

Eu possuo uma instância CentOS 7 do tipo t2.micro. Essa instância será utilizada como controladora, onde vou instalar as ferramentas de linha de comando aws-cli e outras, para implementar scripts que possam automatizar algumas tarefas massantes e repetitivas relacionadas ao ambiente AWS.

É possível utilizar uma instância Amazon Linux que já vem com o toolbox aws-cli instalado e utiliza os recursos físicos da Amazon de uma forma um pouco mais eficiente. No entanto, apesar de ser uma distribuição Linux baseada no Red Hat Enterprise Linux, há algumas pequenas diferenças que não me deixaram à vontade para utilizá-la como base para meus estudos.

Instalando o aws-cli

A documentação oficial recomenda a instalação pelo pip, um gerenciador de pacotes python.

sudo pip install awscli --upgrade

Criando um usuário para o aws-cli

O segundo passo é criar as credenciais para serem utilizadas por essa ferramenta, para manipular seus recursos na AWS. Mais uma vez, seguindo a documentação oficial, é recomendado que se crie Security Credentials específicas para a ferramenta:

  1. Abra o IAM console.
  2. No menu a esquerda clique em Users.
  3. Escolha seu usuário IAM ou de preferência, crie um exclusivo para a ferramenta.
  4. Se seu usuário já existe, crie um novo par de Access Keys para ele.

Repare que eu tenho dois usuários rvieira e ansible, este segundo que vou utilizar exclusivamente para o aws-cli. Logo que criei o usuário ansible, a seguinte tela foi exibida:

IAM User Credentials

Essas são as credenciais que vou informar ao aws-cli para que ele possa manipular meus recursos na AWS.

Dando permissões para o usuário do aws-cli

Ainda precisamos informar à quais recursos este usuário terá acesso. Como vamos começar manipulando somente recursos EC2, vamos criar um grupo ec2admin, dar acesso total aos recursos EC2 à este grupo e inserir o usuário ansible neste grupo.

Ainda no IAM console, clique em Groups, depois Create New Group. Dê o nome do grupo de ec2admin e na tela seguinte vincule a política AmazonEC2FullAcess à esse grupo:

IAM Group Policies

A tela do passo 3 Review, deve ser semelhante a seguinte:

IAM New Group — Review

Agora precisamos vincular o usuário ansible ao grupo ec2admin. Ainda no AMI console, em Groups, marque o grupo ec2admin e depois clique no botão Group Actions, selecionando Add Users to Group. Escolha o usuário ansible, e finalize a operação:

IAM — Add user to a group

Configurando o aws-cli

Voltando à nossa instância controladora, depois de instalar o aws-cli através do pip, temos que configurá-lo, definindo as credenciais que serão utilizadas.

[ansible@ip-172-16-20-123 ~]$ aws configure
AWS Access Key ID [None]: AKIAJPN3GOQFZ3F5226Q
AWS Secret Access Key [None]: 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
Default region name [None]: us-east-1
Default output format [None]: json

Depois de configurar, podemos fazer um simples deste listando todas as regiões disponíveis:

aws ec2 describe-regions
{
"Regions": [
{
"Endpoint": "ec2.ap-south-1.amazonaws.com",
"RegionName": "ap-south-1"
},
{
"Endpoint": "ec2.eu-west-1.amazonaws.com",
"RegionName": "eu-west-1"
},
{
"Endpoint": "ec2.ap-northeast-2.amazonaws.com",
"RegionName": "ap-northeast-2"
},
{
"Endpoint": "ec2.ap-northeast-1.amazonaws.com",
"RegionName": "ap-northeast-1"
},
{
"Endpoint": "ec2.sa-east-1.amazonaws.com",
"RegionName": "sa-east-1"
},
{
"Endpoint": "ec2.ap-southeast-1.amazonaws.com",
"RegionName": "ap-southeast-1"
},
{
"Endpoint": "ec2.ap-southeast-2.amazonaws.com",
"RegionName": "ap-southeast-2"
},
{
"Endpoint": "ec2.eu-central-1.amazonaws.com",
"RegionName": "eu-central-1"
},
{
"Endpoint": "ec2.us-east-1.amazonaws.com",
"RegionName": "us-east-1"
},
{
"Endpoint": "ec2.us-east-2.amazonaws.com",
"RegionName": "us-east-2"
},
{
"Endpoint": "ec2.us-west-1.amazonaws.com",
"RegionName": "us-west-1"
},
{
"Endpoint": "ec2.us-west-2.amazonaws.com",
"RegionName": "us-west-2"
}
]
}

Repare que escolhemos a saída padrão como json, isso é importante para os scripts que iremos implementar para a automações de tarefas. Mas se no dia a dia você quiser utilizar o aws-cli para fazer algumas operações, talvez seja interessante visualizar sua saída em forma de tabela. Para isso, basta utilizar o parâmetro — output table:

aws ec2 describe-regions --output table
----------------------------------------------------------
| DescribeRegions |
+--------------------------------------------------------+
|| Regions ||
|+-----------------------------------+------------------+|
|| Endpoint | RegionName ||
|+-----------------------------------+------------------+|
|| ec2.ap-south-1.amazonaws.com | ap-south-1 ||
|| ec2.eu-west-1.amazonaws.com | eu-west-1 ||
|| ec2.ap-northeast-2.amazonaws.com | ap-northeast-2 ||
|| ec2.ap-northeast-1.amazonaws.com | ap-northeast-1 ||
|| ec2.sa-east-1.amazonaws.com | sa-east-1 ||
|| ec2.ap-southeast-1.amazonaws.com | ap-southeast-1 ||
|| ec2.ap-southeast-2.amazonaws.com | ap-southeast-2 ||
|| ec2.eu-central-1.amazonaws.com | eu-central-1 ||
|| ec2.us-east-1.amazonaws.com | us-east-1 ||
|| ec2.us-east-2.amazonaws.com | us-east-2 ||
|| ec2.us-west-1.amazonaws.com | us-west-1 ||
|| ec2.us-west-2.amazonaws.com | us-west-2 ||
|+-----------------------------------+------------------+|

Bacana, heim!?

As configurações do aws-cli ficam em ~/.aws

Por último, podemos configurar o auto-complete para o aws-cli, uma mão na roda, diga-se de passagem.

Auto-complete para o aws-cli

Se você não utiliza o bash como seu terminal, consulte a documentação sobre o AWS completer. Caso contrário, basta verificar o local do binário aws_complete:

which aws_completer
/bin/aws_completer

E acrescentar a seguinte linha ao seu ~/.bash_profile:

complete -C '/bin/aws_completer' aws

Perfeito! Se tudo deu certo, você deve digitar aws [TAB][TAB] e ver uma lista dos comandos disponibilizados pelo auto_completer:

[ansible@ip-172-16-20-123 ~]$ aws 
acm datapipeline es rds
apigateway deploy events redshift
application-autoscaling devicefarm firehose route53
autoscaling directconnect gamelift route53domains
budgets discovery glacier s3
cloudformation dms iam s3api
cloudfront ds importexport sdb
cloudhsm dynamodb inspector servicecatalog
cloudsearch dynamodbstreams iot ses
cloudsearchdomain ec2 iot-data snowball
cloudtrail ecr kinesis sns
cloudwatch ecs kinesisanalytics sqs
codecommit efs kms ssm
codepipeline elasticache lambda storagegateway
cognito-identity elasticbeanstalk logs sts
cognito-idp elastictranscoder machinelearning support
cognito-sync elb marketplacecommerceanalytics swf
configservice elbv2 meteringmarketplace waf
configure emr opsworks workspaces

Maravilha! Qualquer dúvida, aws help vai te ajudar. Por hoje é só pessoal!

Para os que estão curiosos a respeito do usuário ansible, sim, pretendo utilizar o Ansible para automatizar o ambiente. Assim que possível vou escrever artigos de como automatizar a criação de uma aplicação web em uma VPC, com loadbalancer, webserver, dbserver, etc, todos com redundância e monitoramento. Tudo isso executando apenas um comando para em poucos minutos subir ou apagar todo o ambiente. Gostou, fique de olho!

Encontrou algum equívoco? Comente. Só não se esqueça que eu também estou aprendendo.
Gostou? Então recomende!

Obrigado!

--

--