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>",
}
이진 미디어 유형에 대한 자세한 내용은 API Gateway의 REST API에 대한 이진 미디어 유형 단원을 참조하세요.