[컴] boto3 로 presigned url 을 사용해서 aws s3 에 이미지 upload 하기

boto3 aws presigned url upload example / python aws client

boto3 로 presigned url 을 사용해서 aws s3 에 이미지 upload 하기

이 글은 windows 에서 작업한 내용이다.

환경설정

ref. 1 을 보고 환경을 설정하자.

설치

python -m venv .venv
.venv\Scripts\activate
python -m pip install boto3 pytest requests

실행

presigned_url.py 를 실행하면 된다. 아래는 ’test.png’를 upload 하는 command 이다.

python presigned_url.py mytestbucket test.png put

SignatureDoesNotMatch

위처럼 하면 SignatureDoesNotMatch 라는 error 가 발생했다. presinged_url.py 에서 다음 부분을 수정해 주면 된다.[ref. 3 참고]

s3_client = boto3.client('s3', region_name='ap-northeast-2', endpoint_url='https://s3.ap-northeast-2.amazonaws.com')

실행 화면:

(.venv) d:\python\aws>python presigned_url.py mytestbucket test.png put
----------------------------------------------------------------------------------------
Welcome to the Amazon S3 presigned URL demo.
----------------------------------------------------------------------------------------
INFO: Found credentials in shared credentials file: ~/.aws/credentials
INFO: Got presigned URL: https://s3.ap-northeast-2.amazonaws.com/mytestbucket/test.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=MYMYMYMYMYMY%2F20230613%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20230613T011310Z&X-Amz-Expires=1000&X-Amz-SignedHeaders=host&X-Amz-Signature=17c57d34c54ada2e0bde2899f7c67cd2bf044db3f3f3f3f3f3f3f35
Using the Requests package to send a request to the URL.
Putting data to the URL.
Got response:
Status: 200

----------------------------------------------------------------------------------------

curl 로 upload

위에서 생성한 presigned url 을 이용해서 http request 로 upload 를 하면 된다. 그래서 curl 로도 upload 가 가능하다. 아래는 windows curl 의 예시다.

curl -v -X PUT --upload-file "test.png" "https://s3.ap-northeast-2.amazonaws.com/mytestbucket/test.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=MYMYMYMYMYMY%2F20230613%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Date=20230613T011310Z&X-Amz-Expires=1000&X-Amz-SignedHeaders=host&X-Amz-Signature=17c57d34c54ada2e0bde2899f7c67cd2bf044db3f3f3f3f3f3f3f35"

See Also

  1. 쿠…sal: [컴][웹] AWS CLI 로 s3 에 파일 업로드 하기

Reference

  1. aws-doc-sdk-examples/README.md at main · awsdocs/aws-doc-sdk-examples · GitHub
  2. https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/python/example_code/s3/s3_basics/presigned_url.py
  3. boto3 lib of python, s3 image upload using presigned url with content type · Issue #1149 · boto/boto3 · GitHub

댓글 없음:

댓글 쓰기