Renvoie un média binaire à partir d'une intégration de proxy Lambda dans Gateway API - APIPasserelle Amazon

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.

Renvoie un média binaire à partir d'une intégration de proxy Lambda dans Gateway API

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 vos types API de supports binaires. La taille de la charge utile ne doit pas dépasser 10 Mo.

Note

Pour utiliser un navigateur Web pour invoquer une intégration API avec cet exemple, définissez les types API de médias binaires de votre choix sur*/*. APIGateway utilise le premier Accept en-tête des clients pour déterminer si une réponse doit renvoyer un support binaire. Pour renvoyer un média binaire lorsque vous ne pouvez pas contrôler l'ordre des valeurs d'Accepten-tête, comme les demandes provenant d'un navigateur, définissez les types API de médias binaires 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 Types de médias binaires pour REST APIs dans API Gateway.