[Python] boto3.client와 boto3.resource

hwwwa·2022년 2월 17일
0

🐼 Python

목록 보기
15/18
post-thumbnail

boto3를 사용 예제를 찾아보는데, 어떤 예시는 boto3.client를 사용하고 어떤 예시는 boto3.resource를 사용해서 차이점이 뭔가 싶어서 정리해본 글

Client

  • low-level interface
  • service description에 의해 만들어짐
  • AWS CLI와 boto3의 기초가 되는 라이브러리인 botocore 수준의 client를 공개
  • 가끔 botocore의 API를 찾아봐야하는 경우가 있기도 함
  • 모든 AWS 서비스 API와 1:1 매핑
  • 메소드가 스네이크 케이스로 정의되어 있음
  • 예시
import boto3

BUCKET_NAME = 'mybucket'
client = boto3.client('s3')
response = client.list_objects(Bucket=BUCKET_NAME)

for content in response['Contents']:
    obj_dict = client.get_object(Bucket=BUCKET_NAME, Key=content['Key'])
    print(content['Key'], obj_dict['LastModified'])

Resource

  • boto3.client를 wrapping한 high-level, 객체지향적 interface
  • 높은 수준의 추상화
  • resource description에 의해 만들어짐
  • Identifiers
    • 특정 리소스를 고유하게 식별하는 데 사용되는 고유한 값
    • bucket_name과 key가 있음
  • Attributes
    • 리소스 속성에 액세스. load() 메소드를 통해 로드되므로 처음 액세스 시 느리게 로드 됨
    • accept_ranges, metadata, last_modified 등 👉 공식 문서 참고
  • Actions
    • 리소스에 대한 작업 호출. 식별자와 일부 특성으로부터 인수 전달을 자동으로 처리 가능
    • copy(), delete(), get(), download_file(), upload_file() 등 👉 공식 문서 참고
  • 자원에 대한 조작 위주 → 직관적, 사용 편리
  • AWS 서비스와 상호작용할 때 기본 디테일에 대한 고민이 많이 필요하지 않아 boto3 사용에서 권장됨
  • boto3.client의 모든 기능을 wrapping한 것이 아니라서 필요하다면 boto3.client 혹은 boto3.resource.meta.client를 사용해야 함
  • 예시
import boto3

BUCKET_NAME = 'mybucket'
s3 = boto3.resource('s3')

# S3 bucket identifier
bucket = s3.Bucket(BUCKET_NAME)

# S3 object identifier
obj = s3.Object(bucket_name="my_bucket", key="test.py")

# action on S3 Object
response = obj.get()

for obj in bucket.objects.all():
		# S3 object identifier, attribute
	  print(obj.key, obj.last_modified)
  • 참고 - resource를 사용할 수 있는 AWS API 목록:
    • s3
    • cloudformation
    • cloudwatch
    • dynamodb
    • ec2
    • glacier
    • iam
    • opsworks
    • sns
    • sqs

0개의 댓글