APIGateway에서 Lambda를 통해 S3 콘텐츠 얻기

개요



S3에 저장된 HTLM 파일을 Lmabda를 통해 API Gateway에서 가져옵니다.

지금 만들고 있는 앱이 API Gateway에서 직접 S3를 붙이고 있습니다만, 컨텐츠를 백엔드로 동적 생성하고 싶어졌기 때문에 사이에 Lambda의 처리를 씹게 하기로 했습니다.

백엔드 로직을 구축하기 전에 우선 솔직하게 만드는 방법을 조사했습니다.

환경



Node.js 8.10

구현



1. Lamnda 구현


const AWS = require('aws-sdk');

exports.handler = async (event) => {
    AWS.config.region = 'ap-northeast-1';
    const s3 = new AWS.S3();
    try {
        let data = await s3.getObject({
            Bucket: 'bucket_name',
            Key: 'path/to/file.html'
        }).promise();

        return {
            statusCode: 200,
            headers: {"Content-Type": "text/html"},
            body: data.Body.toString(),
        };
    } catch (e) {
        return {
            statusCode: 500,
            body: JSON.stringify(e.message),
        };
    }
};

2. API Gateway 설정


  • 통합 요청 LAMBDA_PROXY
  • 메서드 응답 콘텐츠 형식 text/html



  • 포인트



  • Content-Type 지정

    Lambda에서 Content-Type를 명시 적으로 지정하지 않으면 application/json로 처리됩니다.
  • s3.getObject() 의 구조

    텍스트 데이터를 돌려줄 때는 data.Body.toString() 로 디코드 한다.
    데이터 구조에 대해 자세히 알고 싶다면 JSON.stringify(data)를 반환하고 테스트하면 알기 쉽습니다.

  • 참고문헌



    여기를 읽으면 대답은 쓰여있다.
    htps : / / n kgr. 하테나 bぉg. 코m/엔트리/2018/06/26/220000

    좋은 웹페이지 즐겨찾기