Renvoi d'un support binaire à partir d'une intégration de proxy Lambda - Amazon API Gateway

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Renvoi d'un support binaire à partir d'une intégration de proxy Lambda

Pour renvoyer un média binaire à partir d'une intégration de proxy AWS Lambda, encodez en base64 la réponse de votre fonction Lambda. Vous devez également configurer les types de support binaire de votre API. La taille de la charge utile ne doit pas dépasser 10 Mo.

Note

Pour utiliser un navigateur web pour appeler une API avec cet exemple d'intégration, définissez les types de supports binaires de votre API sur */*. API Gateway utilise le premier en-tête Accept des clients pour déterminer si une réponse doit renvoyer un support binaire. Pour renvoyer un support binaire lorsque vous ne pouvez pas contrôler l'ordre des valeurs d'en-tête Accept, telles que les demandes d'un navigateur, définissez les types de support binaire de votre API sur */* (pour tous les types de contenu).

L’exemple de fonction Lambda suivant peut renvoyer aux clients une image binaire à partir d’Amazon S3 ou du texte. La réponse de la fonction inclut un en-tête Content-Type pour indiquer au client le type de données qu'elle renvoie. La fonction définit de manière conditionnelle la propriété isBase64Encoded dans sa réponse, en fonction du type de données qu'elle renvoie.

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>", }

Pour de plus amples informations sur les types de support binaire, veuillez consulter Utilisation des types de médias binaires pour les API REST.