[PYTHON] Afficher les images sur S3 avec API Gateway + Lambda

Aperçu

Je suis accro aux spécifications, je vais donc laisser un mot.

Choses à faire

  1. Création de Lambda
  2. Créer une passerelle API

On suppose que S3 a été créé.

1. Création de Lambda

Créez Lambda avec un nom approprié. Ici, il s'agit de get_image.

J'ai également choisi Python 3.8 comme runtime.

スクリーンショット 2020-06-27 22.24.52.png

Enregistrez ensuite le code suivant dans le code de fonction.

import boto3
import base64

def get_img_from_s3():
    s3 = boto3.client('s3')
    bucket_name = 'BUCKET_NAME'
    file_path = 'FILE_PATH'
    responce = s3.get_object(Bucket=bucket_name, Key=file_path)
    body = responce['Body'].read()
    body = base64.b64encode(body)
    return body
    

def lambda_handler(event, context):
    img = get_img_from_s3()
    return img

Passez le nom du bucket de S3 à bucket_name et le chemin de l'objet (image) de S3 que vous voulez lire à file_name, et lisez l'objet depuis S3.

Après cela, l'objet au format binaire lu est encodé en base64 et renvoyé.

Accorder l'accès Lambda à S3

Le Lambda créé n'a pas le droit d'accès à S3, et s'il est laissé tel quel, l'accès sera refusé, alors donnez le droit d'accès à S3.

Tout d'abord, ouvrez la page d'autorisation d'accès Lambda que vous avez créée. スクリーンショット 2020-06-27 23.07.20.png Le rôle d'exécution créé automatiquement étant attribué ici, ouvrez la page de ce rôle d'exécution. スクリーンショット 2020-06-27 22.47.45.png Appuyez sur le bouton bleu ʻAttach Policyau centre de la page. ![スクリーンショット 2020-06-27 22.50.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401124/755b90c7-4ded-b9e8-506f-d010266a26c4.png) De cette façon, diverses politiques sortent. ![スクリーンショット 2020-06-27 22.51.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401124/b2c42536-fdf2-7a41-7817-fcf4a4da84eb.png) La recherche deS3 fera apparaître la stratégie de S3. Cette fois, l'image est lue à partir de S3, alors attachez la stratégie ʻAmazonS3ReadOnlyAccess. Vous pouvez maintenant lire les fichiers stockés dans S3 à partir de Lambda.

Ceci termine les paramètres Lambda.

2. Créer une passerelle API

Ensuite, créez API Gateway.

スクリーンショット 2020-06-27 23.17.36.png

L'API REST a été sélectionnée comme type d'API et le nom de l'API a été correctement défini sur get_image. スクリーンショット 2020-06-27 23.19.33.png Ensuite, j'ai ajouté une méthode GET et spécifié Lambda comme type d'intégration et la fonction Lambda appelée get_image créée précédemment en tant que fonction Lambda.

Maintenant que la passerelle API a été créée, définissez la réponse de la méthode. スクリーンショット 2020-06-27 23.25.06.png Tout d'abord, Content-Type a été ajouté à l'en-tête de la réponse, et ʻimage / png a été ajouté au type de contenu du corps de la réponse. (Depuis que j'ai lu png cette fois, je l'ai réglé sur ʻimage / png.)

Ensuite, définissez la réponse intégrée. スクリーンショット 2020-06-27 23.31.30.png

Par défaut, la méthode de traitement de contenu est pass-through, mais sélectionnez «Convertir en binaire (si nécessaire)». Aussi, laissez la valeur de mappage du mappage d'en-tête être `` '*' '.

Ceci termine les paramètres de la passerelle API.

Enfin, lorsque vous testez l'API スクリーンショット 2020-06-27 23.42.50.png J'ai pu renvoyer le binaire png comme ça!

Lorsque vous déployez réellement l'API et accédez à l'URL, l'image s'affiche.

référence

Implémentation par Node.js Introduction à Lambda + API Gateway. Image DL

Recommended Posts

Afficher les images sur S3 avec API Gateway + Lambda
Envoyer les images prises avec ESP32-WROOM-32 vers AWS (API Gateway → Lambda → S3)
[AWS] Créer une API avec API Gateway + Lambda
API REST facile avec API Gateway / Lambda / DynamoDB
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
LINE BOT avec Python + AWS Lambda + API Gateway
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
Prenez rapidement une chaîne de requête avec API Gateway-> Lambda (Python)
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
Montez S3 sur Ubuntu avec goofys
Déplacer régulièrement les journaux CloudWatch vers S3 avec Lambda
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Essayez le chiffrement côté serveur de S3 à l'aide de boto3
Transcription d'images avec l'API Vision de GCP
[AWS] Associez Lambda et S3 à boto3
Connectez-vous à s3 avec AWS Lambda Python
[AWS] Faites des choses de type SSI avec S3 / Lambda
Essayez d'implémenter un robot Cisco Spark avec AWS Lambda + Amazon API Gateway (Python)
Exporter un instantané RDS vers S3 avec Lambda (Python)
Télécharger des images sur S3 avec une interface graphique à l'aide de tkinter
Transmettre Cognito Id à Lambda via API Gateway
Version Amazon API Gateway et AWS Lambda Python
Incorporer d'autres images sur le raster avec ArcPy
Manipuler des objets S3 avec Boto3 (API de haut niveau et API de bas niveau)
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Je veux AWS Lambda avec Python sur Mac!
Création d'un BOT «Présentation non officielle du produit remis à neuf par Apple» avec l'API de messagerie LINE (v2) + API Gateway + lambda (python)