boto3를 boto3.resource( )
로 대부분 사용해왔는데 생각해보니 resource 말고 client로 프로젝트를 했던 기억이 났다
?? 분명 프로젝트 할 때 멘토님께서 resource로 대부분 되는데 client가 더 큰 개념? 이라고 하셨던 것 같은데 정확하지 않은 것 같아서 자료를 찾아보다가 여기까지 왔다
근데 찾아보고 나니 그냥 말그대로 더 큰 개념과 작은 개념이 맞음 ..
AWS의 Boto3 라이브러리는 파이썬 어플리케이션과 다양한 AWS 서비스를 통합하기 위해 만들어졌음
클라이언트는 low-level의 인터페이스를 제공함
boto3와 AWS CLI에서 사용되는 botocore package의 JSON service로부터 왔음
Boto3 Client
를 사용하는 이점은 다음과 같다
import boto3
s3 = boto3.client("s3")
response = s3.list_buckets()
for bucket in reponse['buckets']:
print(f"bucket : {bucket['Name']}')
개인적으로 이 형태? response의 리스트 내의 리스트 혹은 어레이.. 이 형태가 좀 성가시다고? 생각함 ㅠ열심히 찍어가면서 확인해야함..
client refs: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/clients.html
리소스는 client보다 좀 더 높은 레벨임
리소스는 boto 라이브러리 자체에서 JSON 리소스로 정의되어있다
리소스는 다양한 AWS 서비스들 사이의 상호작용을 위한 객체 지향적인 인터페이스임
import boto3
s3 = boto3.resource("s3")
그 외에 Identifier라고 해서 각각의 리소스에서 자체적으로? 제공하는 특별한 값들이 있다고 한다.
예를 들어 다음과 같은 것들임
bucket = s3.Bucket(name = "bucket1")
obj = s3.Object(bucket_name = "bucket1", key = "test.py")
이런 것들은 필요할 때마다 AWS docs 찾아가면서 쓰면 된다
docs : https://boto3.amazonaws.com/v1/documentation/api/latest/guide/resources.html
요약하자면, resource는 client보다 조금 더 높은 레벨임. (뭐라는겨...)
resource는 너무 많은 디테일을 신경쓰지 않고 AWS 서비스를 사용할 때 쓰면 좋다.
말하자면, resource로 쓰인 코드들은 좀 더 심플한 경향이 있다.
하지만 resource가 AWS의 모든 서비스에 사용할 수 없다는 건 아님. 어떨 땐 client보다 낫기도 하다.
ref : https://www.learnaws.org/2021/02/24/boto3-resource-client/
원문은 docs에 있는 내용을 필요한 것만 가져다 쓴 것으로 보임. 이해가 안된다면 docs를 정독하자.!