AWS CLI: 15 comandos de configuração para gerenciar múltiplas contas
Tags: ptbr, aws, webdev, devops
Published: 2019-09-03 22:10:14

Para usar a CLI da AWS, primeiro verifique se as credenciais e chave de acesso da AWS estão configuradas corretamente.

Depois de ter seu AWS `access_key_id` e `secret_access_key`, você pode adicioná-los manualmente ao arquivo de credenciais ou usar o comando `aws configure` para configurá-lo em sua máquina local.

Este tutorial explica todas as opções disponíveis no comando `aws configure`, além de como gerenciar vários perfis:

### Tabela de Conteúdo

1. Primeira configuração de credenciais da AWS - perfil padrão
2. Diretório `~/.aws` - Arquivo de configuração e credenciais para o perfil padrão
3. Editar credenciais do perfil padrão - Conecte-se a diferentes contas da AWS
4. Crie vários perfis da AWS - Dev and Prod
5. Diretório `~/.aws` - Arquivo de configuração e credenciais para vários perfis (Dev e Prod)
6. Alternando entre diferentes perfis da AWS usando a opção `--profile`
7. Alternando entre diferentes perfis da AWS usando a variável env `AWS_PROFILE`
8. Exibir informações do perfil usando a opção `list`
9. Alterar a configuração padrão do arquivo de credenciais `FileName` e `Location`
10. Exibir um valor de parâmetro de perfil específico usando a opção `get`
11. Defina um valor de parâmetro de perfil específico usando a opção `set`
12. Adicionando novos modelos usando a opção `add-model`

# 1. Primeira configuração de credenciais da AWS - perfil padrão

Ao executar o comando `aws configure` sem nenhum argumento, você configurará as credenciais do aws como seu perfil padrão.

```bash
$ aws configure
AWS Access Key ID [None]: AAABBBCCCDDDEEEFFFGG
AWS Secret Access Key [None]: aaabbbcccdddeeefffggghhhiiijjjkkklllmmmn
Default region name [None]: us-east-1
Default output format [None]: text
```

No exemplo acima:

- **[None]:** Indica que você não possui nenhuma configuração de identificação de chave de acesso / chave de acesso secreta existente no sistema para o perfil padrão e solicitará novos valores.
- **‌Region Name:** Isso é opcional. Se você deixar isso em branco, você deverá especificar a região em todos os seus comandos da AWS CLI usando o parâmetro `--region`, caso contrário, receberá uma mensagem de erro.
- **‌Output:** Isso é opcional. Se você deixar em branco, a saída de toda a AWS CLI estará no formato **json**. As opções de saída disponíveis são: **json, text, table**

# 2. Diretório `~/.aws` - Arquivo de configuração e credenciais para o perfil padrão

Quando você executa o aws configure pela primeira vez, ele criará o diretório ~/.aws, se ele não existir, no diretório inicial com os dois arquivos a seguir:

```bash
$ ls -1 ~/.aws
config
credentials

$ cat ~/.aws/config
[default]
region = us-east-1
output = text

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AAABBBCCCDDDEEEFFFGG
aws_secret_access_key = aaabbbcccdddeeefffggghhhiiijjjkkklllmmmn
```

No exemplo acima:

- **~/.aws/credentials** - Isso conterá seu **access_key_id** e **secret_access_key**
- **~/.aws/config** - Isso conterá informações de configuração não relacionadas à credenciais, tais como **region** e **output**
- **[default]** - Esta seção indica que esses valores pertencem ao perfil padrão. Lembre-se de que você pode ter mais de um perfil configurado, o que permitirá a execução de comandos AWS CLI em diferentes contas da AWS, conforme mostrado nos exemplos abaixo.

# 3. Editar credenciais do perfil padrão - Conecte-se a diferentes contas da AWS

Se você deseja se conectar a uma conta AWS diferente na sua CLI, você pode alterar as credenciais de perfil padrão existentes executando o comando "aws configure" novamente.

```bash
$ aws configure
AWS Access Key ID [****************FFGG]: ZZZZZZCCCDDDEEEFFFZZ
AWS Secret Access Key [****************mmmn]: zzzzzzcccdddeeefffggghhhiiijjjkkklllmmzz
Default region name [us-east-1]: us-west-2
Default output format [text]: json

$ cat ~/.aws/config
[default]
region = us-west-2
output = json
```

Nota:

- Ao solicitar **access_key_id** e **secret_access_key**, será mostrado os 4 últimos caracteres dos valores existentes dentro do []
- Se você pressionar enter sem fornecer nenhum novo valor, ele apenas manterá os valores existentes e não mudará nada.

# 4. Crie vários perfis da AWS - Dev and Prod

Ao conectar-se a várias contas da AWS usando apenas o perfil padrão, você vai continuar alterando os valores de **access_key_id** e **secret_access_key**, o que não é prático.

Nesse caso, você pode criar vários perfis.

Digamos que você precise usar os comandos na AWS CLI para acessar sua conta **AWS-dev** e conta **AWS-prod**. Nesse caso, crie um perfil de desenvolvimento e um perfil de produção, conforme explicado abaixo.

Primeiro, crie um perfil de desenvolvedor, use os valores **access_key_id** e **secret_access_key** da sua conta **AWS-dev**:

```bash
$ aws configure --profile dev
AWS Access Key ID [None]: DEVBBBCCCDDDEEEFFDEV
AWS Secret Access Key [None]: devbbbcccdddeeefffggghhhiiijjjkkklllmdev
Default region name [None]: us-east-1
Default output format [None]:
```

Em seguida, crie um perfil de produção, use os valores **access_key_id** e **secret_access_key** da sua conta **AWS-prod**:

```bash
$ aws configure --profile prod
AWS Access Key ID [None]: PRODBBCCCDDDEEEFPROD
AWS Secret Access Key [None]: prodbbcccdddeeefffggghhhiiijjjkkklllprod
Default region name [None]: us-west-2
Default output format [None]:
```

# 5. Diretório `~/.aws` - Arquivo de configuração e credenciais para vários perfis (Dev e Prod)

Após adicionar novos perfis adicionais (dev e prod), agora temos um total de 3 perfis, incluindo o perfil padrão, conforme mostrado abaixo nos arquivos de configuração.

```bash
$ cat ~/.aws/config
[default]
region = us-east-1
output = text
[profile dev]
region = us-east-1
[profile prod]
region = us-west-2

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AAABBBCCCDDDEEEFFFGG
aws_secret_access_key = aaabbbcccdddeeefffggghhhiiijjjkkklllmmmn
[dev]
aws_access_key_id = DEVBBBCCCDDDEEEFFDEV
aws_secret_access_key = devbbbcccdddeeefffggghhhiiijjjkkklllmdev
[prod]
aws_access_key_id = PRODBBCCCDDDEEEFPROD
aws_secret_access_key = prodbbcccdddeeefffggghhhiiijjjkkklllprod
```

No exemplo acima:

- **[default]** - contém as informações das credenciais quando usamos o comando 'aws configure' pela primeira vez/sem nenhum parâmetro. Este é o nosso perfil padrão. Não temos um nome para este perfil.
- **[dev]** - Esta seção contém credenciais do perfil do desenvolvedor.
- **[prod]** - Esta seção contém credenciais do perfil do prod.

# 6. Alternando entre diferentes perfis da AWS usando a opção `--profile`

Por padrão, a AWS CLI usará credenciais do perfil padrão. Por exemplo, o comando a seguir listará todos os volumes EBS usando suas credenciais do perfil padrão.

```bash
$ aws ec2 describe-volumes
```

Se você deseja se conectar a uma conta diferente da AWS. Por exemplo, sua conta AWS-dev, use o perfil de desenvolvedor, como mostrado abaixo:

```bash
$ aws ec2 describe-volumes --profile dev
```

O seguinte será conectado ao perfil do prod:

```bash
$ aws ec2 describe-volumes --profile prod
```

Observe que os seguintes comandos são exatamente os mesmos. Ambos usarão o perfil padrão:

```bash
$ aws ec2 describe-volumes

$ aws ec2 describe-volumes --profile default
```

Nota: 

- A opção **--profile** pode ser usada com todos os comandos da AWS CLI.

Em uma observação relacionada, para iniciar uma instância do EC2 a partir da CLI, consulte: [Como iniciar uma instância](https://www.thegeekstuff.com/2017/07/aws-ec2-cli-userdata/) do [Amazon AWS EC2 com UserData a partir da CLI](https://www.thegeekstuff.com/2017/07/aws-ec2-cli-userdata/)

# 7. Alternando entre diferentes perfis da AWS usando a variável env `AWS_PROFILE`

Especificar a opção de perfil em todo comando na sua CLI pode ser um pouco complicado. Para evitar isso, você pode definir seu perfil usando a variável de ambiente **AWS_PROFILE**.

Primeiro, defina seu **AWS_PROFILE** para conectar-se à conta **AWS-dev**.

```
export AWS_PROFILE=dev
```

A partir de agora, todos os comandos da AWS CLI que você executar se conectarão à conta AWS-dev. Você não precisa mais especificar a opção **--profile**

Os comandos a seguir usarão credenciais de perfil de desenvolvedor (não as credenciais padrão), pois definimos **AWS_PROFILE** como dev.

```bash
$ aws ec2 describe-volumes
$ aws ec2 describe-instances
$ aws s3 ls
$ ...
```

Se você deseja se conectar à conta **AWS-prod**, basta definir o **AWS_PROFILE** como **prod**, como mostrado abaixo.

```bash
$ export AWS_PROFILE=prod
```

Após definer o perfil, os comandos a seguir usarão as credenciais do perfil do prod para se conectar à sua conta do AWS-prod.

```bash
$ aws ec2 describe-volumes
$ aws ec2 describe-instances
$ aws s3 ls
$ ...
```

Depois de definir como dev ou prod e se você deseja se conectar à conta da AWS que aponta para o perfil padrão, você tem duas opções.

Você pode definir **AWS_PROFILE** como padrão, como mostrado abaixo.

```bash
export AWS_PROFILE=default
```

Ou, você pode simplesmente desabilitar a variável de ambiente **AWS_PROFILE**, que começará automaticamente a usar o perfil padrão.

```bash
unset AWS_PROFILE
```

Após remover a variável, os comandos a seguir usarão credenciais do perfil padrão para conectar-se à sua conta da AWS.

```bash
$ aws ec2 describe-volumes
$ aws ec2 describe-instances
$ aws s3 ls
$ ...
```

# 8. Exibir informações do perfil usando a opção `list`

A maneira mais fácil de visualizar todos os perfis que você configurou em seu sistema é exibir o conteúdo dos arquivos de configuração e credenciais.

```bash
$ cat ~/.aws/config

$ cat ~/.aws/credentials
```

A opção `list` no comando `aws configure` exibirá as informações sobre o perfil atual, como mostrado abaixo.

```bash
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                             None    None
access_key     ****************FFGG shared-credentials-file
secret_key     ****************mmmn shared-credentials-file
    region                us-east-1      config-file    ~/.aws/config
```

No perfil acima, a primeira linha exibe qual perfil você está usando. Na coluna **"Value"** da 1ª linha (ou seja, para o perfil), diz **""**, isso indica que atualmente você está conectado ao perfil **"default"**.

Se você alterar o perfil para **"prod"**, verá a coluna **"Value"** da 1ª linha dizendo **"prod"**, como mostrado abaixo.

```bash
$ export AWS_PROFILE=prod

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     prod           manual    --profile
```

Você também pode passar o nome do perfil para visualizar as informações do perfil sem alterar seu perfil atual, como mostrado abaixo

```bash
$ aws configure list --profile dev
```

# 9. Alterar a configuração padrão do arquivo de credenciais `FileName` e `Location`

Ao invés do padrão **~/.aws/config** e **~/.aws/credenciais**, você também pode usar um local e um nome de arquivo diferente usando as seguintes variáveis ​​de ambiente:

- **AWS_SHARED_CREDENTIALS_FILE** - Defina esse valor como o nome do arquivo que contém suas credenciais da AWS.
- **AWS_CONFIG_FILE** - Defina esse valor como o nome do arquivo que contém as informações de configuração do seu perfil da AWS.

Por exemplo:

```bash
$ export AWS_SHARED_CREDENTIALS_FILE=/var/tmp/mycredentials

$ export AWS_CONFIG_FILE=/var/tmp/myconfig
```

Depois de definir os valores acima, todos os comandos da AWS CLI começarão a usar perfis e credenciais correspondentes dos arquivos no local acima:

```bash
$ aws ec2 describe-volumes
$ aws ec2 describe-instances
$ aws s3 ls
$ ...
```

Na saída a seguir, a coluna **"Location"** da última linha (**region**) indica qual arquivo de configuração está sendo usado.

```
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                             None    None
access_key     ****************FFGG shared-credentials-file
secret_key     ****************mmmn shared-credentials-file
    region                us-east-1      config-file    /var/tmp/myconfig
```

# 10. Exibir um valor de parâmetro de perfil específico usando a opção `get`

Se você deseja exibir apenas um valor do seu arquivo de configuração ou credenciais, use a opção **get** nos comandos **aws configure** usando a seguinte sintaxe.

O comando **get** é útil se você estiver escrevendo algo e quiser obter informações de perfil dentro do seu shell script.

```bash
$ aws configure get varname [--profile profile-name]
```

Na saída a seguir, apenas será exibido o **access_key_id** do perfil atual.

```bash
$ aws configure get aws_access_key_id
AAABBBCCCDDDEEEFFFGG
```

Você também pode usar qualquer um dos seguintes:

```bash
$ aws configure get aws_access_key_id
$ aws configure get aws_secret_access_key
$ aws configure get region
$ aws configure get output
```

Você também pode especificar o nome do perfil, como mostrado abaixo:

```bash
$ aws configure get dev.aws_secret_access_key
$ aws configure get prod.aws_secret_access_key
```

# 11. Defina um valor de parâmetro de perfil específico usando a opção `set`

Os comandos **get** e **set** do **aws configure** podem ser úteis, se você estiver escrevendo um script shell para manipular os valores dos seus arquivos de configuração / credenciais.

Sintaxe:

```bash
$ aws configure set varname value [--profile profile-name]
```

Você pode apenas definir o valor de um parâmetro específico, como mostrado abaixo.

```bash
$ aws configure set region us-east-2
```

Você pode definir os valores de qualquer um dos seguintes parâmetros:

```bash
$ aws configure set aws_access_key_id NEWABBCCCDDDEEEFPNEW
$ aws configure set aws_secret_access_key newdbbcccdddeeefffggghhhiiijjjkkklllpnew
$ aws configure set region us-east-2
$ aws configure set output json
```

Você também pode especificar o nome do perfil, como mostrado abaixo:

```bash
$ aws configure set dev.region us-east-2
$ aws configure set prod.output json
```

# 12. Adicionar novo modelo usando a opção `add-model`

Você pode adicionar modelos com base nas informações de um arquivo json.

Por exemplo, se você tiver uma versão da AWS CLI que não possui o Amazon Polly, poderá reinstalar a AWS CLI para obter o Polly.

Ou você pode fazer o download do arquivo de modelo do Polly e usar a opção **add-model** em **aws configure**, como mostrado abaixo.

```bash
$ aws configure add-model --service-model file:///var/tmp/polly.json
```

O comando acima criará o diretório **~/.aws/models** e criará o seguinte subdiretório com base nas informações do arquivo json fornecido.

```bash
$ ls -l ~/.aws/models/polly/2016-06-10/service-2.json
```

A seguir, são apresentadas as primeiras linhas do arquivo json que foram usadas no exemplo acima.

```
$ head -10 ~/.aws/models/polly/2016-06-10/service-2.json
{
  "version":"2.0",
  "metadata":{
    "apiVersion":"2016-06-10",
    "endpointPrefix":"polly",
    "protocol":"rest-json",
    "serviceFullName":"Amazon Polly",
    "serviceId":"Polly",
    "signatureVersion":"v4",
    "uid":"polly-2016-06-10"
```

O arquivo acima é o mesmo que usamos durante nosso comando **add-model**.

```bash
$ diff -w ~/.aws/models/polly/2016-06-10/service-2.json /var/tmp/polly.json
```

Você também pode especificar um nome de serviço diferente passando o parâmetro **--service-name**, como mostrado abaixo.

```bash
$ aws configure add-model --service-model file:///var/tmp/custom.json --service-name mycustom
```

O comando acima criará um subdiretório em **~/.aws/models** com o nome do serviço que você especificou como mostrado abaixo.

```bash
$ ls -l ~/.aws/models/mycustom/2016-06-10/service-2.json
```

---

# Créditos

- [15 AWS Configure Command Examples to Manage Multiple Profiles for CLI](https://www.thegeekstuff.com/2019/03/aws-configure-examples), escrito originalmente por [Ramesh Natarajan](https://twitter.com/thegeekstuff)