API Gateway + Lambda로 S3의 이미지 표시

개요


  • API Gateway와 Lambda에서 S3의 이미지 반환
  • 클라이언트 측에서 단순히 URL에 액세스하면 이미지가 표시되는 것처럼 보입니다
  • S3을 공개하지 않고 이미지를 표시 할 수 있습니다 (한정 게시 등 가능)
  • 파이썬으로 구현

  • 사양이 잘 모르고 빠졌기 때문에 메모를 남깁니다.

    할 일


  • Lambda 만들기
  • API 게이트웨이 만들기

  • 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

    좋은 웹페이지 즐겨찾기