API Gateway + Lambda로 S3의 이미지 표시
5737 단어 람다파이썬APIGatewayS3AWS
개요
사양이 잘 모르고 빠졌기 때문에 메모를 남깁니다.
할 일
S3은 이미 작성되었습니다.
1. Lambda 만들기
Lambda를 적절한 이름으로 만듭니다. 여기에서는
get_image
로 했습니다.또한 런타임은 Python 3.8을 선택했습니다.
그런 다음 함수 코드에 다음 코드를 등록합니다.
import boto3
import base64
def get_img_from_s3():
s3 = boto3.client('s3')
bucket_name = 'BUCKET_NAME'
file_path = 'FILE_PATH'
responce = s3.get_object(Bucket=bucket_name, Key=file_path)
body = responce['Body'].read()
body = base64.b64encode(body)
return body
def lambda_handler(event, context):
img = get_img_from_s3()
return img
bucket_name
에 S3 버킷의 이름을, file_name
에 읽고 싶은 S3 객체 (이미지)의 경로를 전달하고 S3에서 객체를 읽습니다.그런 다음 읽은 바이너리 형식의 객체를 base64로 인코딩하고 반환합니다.
Lambda에게 S3에 대한 액세스 권한 부여
작성한 Lambda는 S3에 대한 액세스 권한을 가지고 있지 않으며,이 상태로 액세스가 거부되어 버리므로 S3에 대한 액세스 권한을 부여합니다.
먼저 만든 Lambda의 액세스 권한 페이지를 엽니 다.
여기에 자동으로 생성 된 실행 역할이 할당되어 있으므로이 실행 역할의 페이지를 엽니 다.
페이지 중앙의 파란색
ポリシーをアタッチします
버튼을 누릅니다.이와 같이 다양한 정책이 나옵니다.
S3
로 검색하면 S3에 대한 정책이 나옵니다.이번에는 S3에서 이미지를로드하므로
AmazonS3ReadOnlyAccess
라는 정책을 첨부합니다.이제 Lambda에서 S3에 저장된 파일을 읽을 수 있습니다.
이상으로 Lambda의 설정은 종료입니다.
2. API Gateway 만들기
계속해서 API Gateway를 작성합니다.
API 유형은 REST API를 선택했으며 API 이름은 적절하게
get_image
로 설정되었습니다.그런 다음 GET 메소드를 추가하고 통합 유형에는 Lambda를 지정하고 Lambda 함수에는 이전에 작성한 Lambda 함수
get_image
를 지정했습니다.이제 API Gateway를 만들 수 있으므로 메소드 응답을 설정합니다.
먼저 응답 헤더에
Content-Type
를 추가하고 응답 본문의 콘텐츠 형식에 image/png
를 추가했습니다. (이번에는 png를 읽었으므로 image/png
로했습니다.)다음으로 통합 응답을 설정합니다.
콘텐츠 처리 방법은 기본적으로 패스 스루되어 있지만
バイナリに変換(必要な場合)
를 선택합니다.또한 헤더 매핑의 매핑 값을
'*'
로 설정합니다.이것으로 API Gateway 설정도 종료됩니다.
마지막으로 API를 테스트하면
이런 식으로 png 바이너리를 반환 할 수있었습니다!
실제로 API를 배포하고 URL에 액세스하면 이미지가 표시됩니다.
참고
Node.js에 의한 구현 Lambda + API Gateway 입문. 이미지 DL
Reference
이 문제에 관하여(API Gateway + Lambda로 S3의 이미지 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yutake27/items/30ca4bdffd130087b708텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)