Lambda 프록시 통합에서 이진 미디어 반환 - Amazon API Gateway

Lambda 프록시 통합에서 이진 미디어 반환

AWS Lambda 프록시 통합에서 이진 미디어를 반환하려면 Lambda 함수의 응답을 base64로 인코딩합니다. 또한 API의 이진 미디어 유형을 구성해야 합니다. 페이로드 크기 제한은 10MB입니다.

참고

웹 브라우저를 사용하여 이 예제 통합이 포함된 API를 호출하려면 API의 이진 미디어 유형을 */*로 설정합니다. API Gateway는 클라이언트의 첫 번째 Accept 헤더를 사용하여 응답이 이진 미디어를 반환해야 하는지 결정합니다. 브라우저의 요청과 같이 Accept 헤더 값의 순서를 제어할 수 없을 때 이진 미디어를 반환하려면 API의 이진 미디어 유형을 */*(모든 콘텐츠 유형에 대해)로 설정합니다.

다음 예시 Lambda 함수는 Amazon S3의 이진 이미지나 텍스트를 클라이언트에 반환할 수 있습니다. 함수의 응답에는 클라이언트에 반환하는 데이터 유형을 나타내는 Content-Type 헤더가 포함됩니다. 이 함수는 반환하는 데이터 유형에 따라 응답에 isBase64Encoded 속성을 조건부로 설정합니다.

Node.js
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3" const client = new S3Client({region: 'us-east-2'}); export const handler = async (event) => { var randomint = function(max) { return Math.floor(Math.random() * max); } var number = randomint(2); if (number == 1){ const input = { "Bucket" : "bucket-name", "Key" : "image.png" } try { const command = new GetObjectCommand(input) const response = await client.send(command); var str = await response.Body.transformToByteArray(); } catch (err) { console.error(err); } const base64body = Buffer.from(str).toString('base64'); return { 'headers': { "Content-Type": "image/png" }, 'statusCode': 200, 'body': base64body, 'isBase64Encoded': true } } else { return { 'headers': { "Content-Type": "text/html" }, 'statusCode': 200, 'body': "<h1>This is text</h1>", } } }
Python
import base64 import boto3 import json import random s3 = boto3.client('s3') def lambda_handler(event, context): number = random.randint(0,1) if number == 1: response = s3.get_object( Bucket='bucket-name', Key='image.png', ) image = response['Body'].read() return { 'headers': { "Content-Type": "image/png" }, 'statusCode': 200, 'body': base64.b64encode(image).decode('utf-8'), 'isBase64Encoded': True } else: return { 'headers': { "Content-type": "text/html" }, 'statusCode': 200, 'body': "<h1>This is text</h1>", }

이진 미디어 유형에 대한 자세한 내용은 REST API에 대한 이진 미디어 유형 작업 단원을 참조하세요.