[AWS] Boto3(실습) : 초보자도 파이썬으로 AWS 관리하기

권지은·2025년 8월 1일
post-thumbnail

Boto3란?

AWS에서 만든 Python SDK로, AWS의 다양한 서비스들을 제어/관리할 수 있다

import boto3

# client 방식 (low-level)
ec2_client = boto3.client('ec2')

# resource 방식 (high-level)
ec2_resource = boto3.resource('ec2')

대표 서비스별 세부사항 총정리!

(전체 서비스는 200개가 넘어요)

서비스주요 리소스조회 메서드 예시관리/제어 메서드 예시
EC2인스턴스, AMI, EBS, 보안 그룹 등describe_instances(), describe_images()start_instances(), stop_instances(), terminate_instances(), create_security_group()
S3버킷, 오브젝트list_buckets(), list_objects_v2()create_bucket(), delete_object(), put_object()
IAM사용자, 정책, 역할list_users(), list_roles()create_user(), attach_user_policy()
CloudWatch지표, 로그, 경보list_metrics(), get_metric_data(), describe_alarms()put_metric_alarm(), delete_alarms()
CloudTrail이벤트 기록lookup_events()(읽기 전용)
Lambda함수list_functions()create_function(), invoke()
DynamoDB테이블list_tables(), describe_table()put_item(), delete_item(), create_table()
RDSDB 인스턴스describe_db_instances()start_db_instance(), stop_db_instance()
VPC서브넷, 라우팅describe_vpcs(), describe_subnets()create_vpc(), delete_subnet()
ELB로드밸런서describe_load_balancers()create_load_balancer(), delete_load_balancer()
ECS클러스터, 서비스list_clusters(), describe_services()update_service(), run_task()
EKS클러스터list_clusters(), describe_cluster()create_cluster(), delete_cluster()
CloudFormation스택describe_stacks()create_stack(), delete_stack()
SNS주제, 구독list_topics(), list_subscriptions()create_topic(), publish()
SQSlist_queues()send_message(), receive_message()
Billing/Cost Explorer비용/사용량get_cost_and_usage()(읽기 전용)
Tagging리소스 태그get_resources() (resourcegroupstaggingapi)tag_resources(), untag_resources()

중간중간 커비는.. 제가 좋아해서.. 넣습니다.. 히히


직접 사용해 봅시다!

  1. Python 설치 확인
python --version
# 또는
python3 --version

1-1. 없는 경우 Python 설치

  1. 프로젝트 폴더 생성
mkdir test
cd test
  1. 가상환경 생성
python -m venv .venv
  1. 가상환경 활성화
.\.venv\Scripts\Activate.ps1       # Windows

source .venv/bin/activate          # macOS/Linux
  1. 필수 패키지 설치
pip install boto3 python-dotenv

# 선택 설치
pip install requests

#설치된 패키지 저장
pip freeze > requirements.txt
  1. .env 파일 생성
.env
AWS_ACCESS_KEY_ID=your_access_key			# 계정 키 입력
AWS_SECRET_ACCESS_KEY=your_secret_key		# 계정 시크릿키 입력
AWS_REGION=ap-northeast-2					# 계정 리전

주의! .env 파일은 절대 커밋하지 않도록 .gitignore에 추가하세요!

  1. test.py 코드 작성
import os
import boto3
from dotenv import load_dotenv

# .env 파일에서 환경 변수 로드
load_dotenv()

aws_access_key = os.getenv("AWS_ACCESS_KEY_ID")
aws_secret_key = os.getenv("AWS_SECRET_ACCESS_KEY")
aws_region = os.getenv("AWS_REGION")

# EC2 client 생성
ec2 = boto3.client(
    "ec2",
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=aws_region
)

# S3 client 생성
s3 = boto3.client(
    "s3",
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=aws_region
)

# EC2 인스턴스 조회
def list_ec2_instances():
    print("🖥 EC2 인스턴스 목록:")
    response = ec2.describe_instances()
    for reservation in response["Reservations"]:
        for instance in reservation["Instances"]:
            print(f"- Instance ID: {instance['InstanceId']}, State: {instance['State']['Name']}")

# S3 버킷 조회
def list_s3_buckets():
    print("\n🪣 S3 버킷 목록:")
    response = s3.list_buckets()
    for bucket in response["Buckets"]:
        print(f"- {bucket['Name']}")

# 실행
if __name__ == "__main__":
    list_ec2_instances()
    list_s3_buckets()
  1. 실행
python test.py

🎉 실행 결과 예시

🖥 EC2 인스턴스 목록:
- Instance ID: i-0123456789abcdef0, State: running
- Instance ID: i-0abcdef1234567890, State: stopped

🪣 S3 버킷 목록:
- my-project-logs
- static-assets-kwon

가능한 전체 서비스 확인하는 법

import boto3

print(boto3.session.Session().get_available_services())

특정 서비스의 전체 메서드 확인하는 법

import boto3

client = boto3.client('ec2')
print(dir(client))

잘 따라오셨나요?
boto3 초기화 시 Session을 사용하는 방식도 추후에 다루어 보겠습니다!

profile
하고 싶은 거 하면, 할 수 있게 되는 매직

0개의 댓글