Publicação Técnica · Amazon Web Services
Automatizando a Limpeza de Recursos AWS com Terraform e Python
Com o crescimento exponencial da computação em nuvem, a AWS (Amazon Web Services) se tornou uma das plataformas mais populares para…
Palavras-chave
Com o crescimento exponencial da computação em nuvem, a AWS (Amazon Web Services) se tornou uma das plataformas mais populares para hospedar e gerenciar recursos de TI. No entanto, muitos desenvolvedores, incluindo eu, têm enfrentado um desafio comum: o esquecimento de recursos criados em uma conta de teste. Recursos como instâncias EC2, bancos de dados RDS e buckets S3, quando deixados não gerenciados, podem levar a custos inesperados e, em alguns casos, à perda de dados. Neste artigo, exploraremos como automatizar a listagem e remoção desses recursos em todas as regiões da AWS, garantindo uma abordagem segura e eficiente.

Ferramentas e Tecnologias Utilizadas
Para resolver o problema da gestão de recursos não utilizados na AWS, empregaremos uma combinação poderosa de ferramentas: Terraform e Python com a biblioteca Boto3. O Terraform é uma ferramenta de infraestrutura como código (IaC) que permite a criação, modificação e remoção de recursos de forma declarativa. Ele nos fornecerá a capacidade de listar e gerenciar recursos EC2, RDS e S3 em todas as regiões da AWS. Complementando o Terraform, utilizaremos o Boto3, uma biblioteca Python que nos permitirá interagir com os serviços da AWS, possibilitando a automatização das remoções de recursos.
Implementando a Automação
No processo de implementação da automação, começamos definindo os recursos EC2, RDS e S3 no arquivo Terraform main.tf. Em seguida, configuramos uma variável aws_regions que conterá todas as regiões da AWS que desejamos abranger. Com o Terraform configurado, criamos um script Python chamado list_resources.py que utiliza o Boto3 para listar os recursos em cada região e, quando necessário, removê-los. O script é executado sequencialmente para garantir que todos os recursos não utilizados em todas as regiões da conta AWS de teste sejam identificados e eliminados, minimizando assim os custos e riscos associados ao esquecimento desses recursos.
Para automatizar a listagem e remoção de recursos EC2, RDS e S3 em todas as regiões da AWS usando Terraform e Python, você pode seguir os passos abaixo:
1. Configuração inicial:
Certifique-se de ter o Terraform instalado e configurado em sua máquina local. Você também precisará de credenciais de acesso à sua conta AWS configuradas como variáveis de ambiente (AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY) ou por meio do arquivo de configuração AWS CLI.
2. Listagem e Remoção de Recursos:
Aqui, vamos usar Terraform para listar e remover os recursos EC2, RDS e S3 em todas as regiões da AWS. Se necessário, usaremos Python com a biblioteca Boto3 para ajudar na remoção dos recursos.
2.1. Crie o arquivo main.tf com o seguinte conteúdo:
provider "aws" {
region = "us-east-1" # Defina uma região aqui para inicializar o provider
}
# Recursos EC2
resource "aws_instance" "existing_instances" {
count = 0
}
# Recursos RDS
resource "aws_db_instance" "existing_db_instances" {
count = 0
}
# Recursos S3
resource "aws_s3_bucket" "existing_s3_buckets" {
count = 0
}
2.2. Crie o arquivo variables.tf com o seguinte conteúdo:
variable "aws_regions" {
type = list(string)
default = ["us-east-1", "us-west-1", "us-west-2", "eu-west-1", "eu-central-1", "ap-southeast-1", "ap-southeast-2", "ap-northeast-1", "sa-east-1"]
}
Adicione ou remova regiões da lista aws_regions conforme necessário.
2.3. Crie o arquivo outputs.tf com o seguinte conteúdo:
output "existing_instances" {
value = aws_instance.existing_instances[*].id
}
output "existing_db_instances" {
value = aws_db_instance.existing_db_instances[*].identifier
}
output "existing_s3_buckets" {
value = aws_s3_bucket.existing_s3_buckets[*].bucket
}
2.4. Crie o arquivo list_resources.py com o seguinte conteúdo:
import boto3
import os
def get_all_regions():
ec2 = boto3.client('ec2', region_name='us-east-1')
response = ec2.describe_regions()
return [region['RegionName'] for region in response['Regions']]
def list_ec2_instances(region):
ec2 = boto3.resource('ec2', region_name=region)
instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
return list(instances)
def list_rds_instances(region):
rds = boto3.client('rds', region_name=region)
response = rds.describe_db_instances()
return response['DBInstances']
def list_s3_buckets(region):
s3 = boto3.client('s3', region_name=region)
response = s3.list_buckets()
return response['Buckets']
def delete_ec2_instances(instances):
for instance in instances:
instance.terminate()
def delete_rds_instances(instances):
for instance in instances:
rds = boto3.client('rds', region_name=instance['DBInstanceIdentifier'].split(':')[0])
rds.delete_db_instance(DBInstanceIdentifier=instance['DBInstanceIdentifier'], SkipFinalSnapshot=True)
def delete_s3_buckets(buckets):
for bucket in buckets:
s3 = boto3.resource('s3', region_name=bucket['LocationConstraint'])
bucket = s3.Bucket(bucket['Name'])
bucket.objects.all().delete()
bucket.delete()
if __name__ == "__main__":
regions = get_all_regions()
for region in regions:
print(f"Listing resources in region {region}")
# List EC2 instances
ec2_instances = list_ec2_instances(region)
print(f"EC2 instances found: {len(ec2_instances)}")
if ec2_instances:
delete_ec2_instances(ec2_instances)
# List RDS instances
rds_instances = list_rds_instances(region)
print(f"RDS instances found: {len(rds_instances)}")
if rds_instances:
delete_rds_instances(rds_instances)
# List S3 buckets
s3_buckets = list_s3_buckets(region)
print(f"S3 buckets found: {len(s3_buckets)}")
if s3_buckets:
delete_s3_buckets(s3_buckets)
print(f"Resources deleted in region {region}")
3. Execução:
- Execute o comando
terraform initpara inicializar o diretório do Terraform. - Em seguida, execute
terraform applypara criar a configuração e listar todos os recursos existentes em todas as regiões. - Por fim, execute o script Python
list_resources.pypara remover os recursos EC2, RDS e S3 em todas as regiões.
Observações:
- Tenha extremo cuidado ao executar a remoção de recursos, pois ela é irreversível e pode causar perda permanente de dados. Certifique-se de que está usando uma conta de teste e que os recursos a serem removidos são realmente os que você deseja.
Automatizar a limpeza de recursos AWS com Terraform e Python é uma solução valiosa para desenvolvedores que desejam manter suas contas de teste organizadas e eficientes. A combinação do poder do Terraform para configuração de infraestrutura e do Boto3 para interação com a AWS torna o processo seguro e controlado.
Ao adotar essa abordagem, desenvolvedores podem concentrar-se mais no desenvolvimento de aplicativos e menos na gestão manual de recursos, economizando tempo e recursos financeiros. Além disso, essa prática garante que a conta de teste esteja sempre pronta para novos projetos, evitando possíveis conflitos com recursos previamente provisionados. Em resumo, automatizar a limpeza de recursos AWS é uma prática recomendada para maximizar a eficiência e a organização de projetos em nuvem.
Até o próximo post! =)
Comentários
Todo comentário passa por moderação antes de aparecer aqui. Nada é publicado automaticamente.
Carregando…