Comment charger un fichier image ou PDF vers Amazon S3 via API Gateway ?

Dernière mise à jour : 20-12-2022

Je souhaite charger un fichier image ou PDF sur Amazon Simple Storage Service (Amazon S3) via Amazon API Gateway. Je souhaite également récupérer un fichier image ou PDF. Comment effectuer ces actions ?

Brève description

Pour télécharger une image ou un PDF sous forme de fichier binaire dans un compartiment S3 à l'aide d'API Gateway, activez la prise en charge des fichiers binaires à l'aide d'API Gateway.

Pour accorder à votre API l'accès à votre compartiment S3, créez un rôle AWS Identity and Access Management (IAM). Le rôle IAM doit inclure les autorisations permettant à API Gateway d'exécuter les actions PutObject et GetObject sur votre compartiment S3.

Solution

Créer un rôle IAM pour API Gateway

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Rôles.

3.    Choisissez Create role (Créer un rôle).

4.    Dans la section Select type of trusted entity (Sélectionner le type d'entité de confiance), choisissez AWS service (Service AWS).

5.    Dans la section Choose a use case (Choisir un cas d'utilisation), sélectionnez API Gateway (Gateway API).

6.    Dans la section Select your use case (Sélectionner votre cas d'utilisation), sélectionnez API Gateway (Gateway API).

7.    Choisissez Next: Permissions (Étape suivante : autorisations).

Remarque : cette section présente le service géré AWS qui permet à API Gateway de transmettre les journaux vers le compte d'un utilisateur. Vous ajouterez des autorisations pour Amazon S3 ultérieurement. Sélectionnez Next : Tags (Suivant : Balises) pour le moment.

8.    Ajoutez des balises (facultatif) et sélectionnez Next: Review (Suivant : Vérification).

9.    Pour Role name (Nom du rôle), saisissez un nom pour votre rôle. Par exemple : api-gateway-upload-to-s3.

10.    Choisissez Create role (Créer un rôle).

Créer et attacher une stratégie IAM au rôle API Gateway

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Rôles.

3.    Dans la zone de recherche, saisissez le nom du rôle API Gateway que vous venez de créer. Ensuite, sélectionnez ce rôle dans la colonne Role name (Nom du rôle).

4.    Sur l'onglet de la page de détails des rôles, choisissez Add permissions (Ajouter des autorisations).

5.    Choisissez Create inline policy (Créer une politique intégrée).

6.    Sous l'onglet Visual editor (Éditeur visuel), dans la section Select a service (Sélectionner un service), sélectionnez Choose a service (Choisir un service).

7.    Saisissez S3, puis sélectionnez S3.

8.    Dans la zone Specify the actions allowed in S3 (Spécifier les actions autorisées dans S3), saisissez PutObject, puis choisissez PutObject.

9.    Entrez GetObject, puis choisissez GetObject.

10.    Développez Resources (Ressources), puis choisissez Specific (Spécifique).

11.    Sélectionnez Add ARN (Ajouter ARN).

12.    Pour Bucket name (Nom du compartiment), saisissez le nom de votre compartiment. Incluez le préfixe, le cas échéant.

13.    Pour Object name (Nom d'objet), saisissez un nom d'objet.

Remarque : le nom du compartiment spécifie l'emplacement des fichiers chargés. Le nom de l'objet spécifie le modèle que l'objet doit respecter pour l'alignement de stratégie. Pour plus d'informations, consultez les règles de dénomination des compartiments et la présentation des objets Amazon S3.

14.    Choisissez Add (Ajouter).

15.    Sélectionnez Next: Tags (Suivant : Balises), ajoutez des balises (facultatif) et sélectionnez Next: Review (Suivant : Examen).

16.    Pour Name (Nom), saisissez le nom de votre stratégie.

17.    Choisissez Créer une stratégie.

18.    Dans la barre de recherche de stratégie, saisissez le nom de la stratégie créée à l'étape 17, puis sélectionnez la stratégie.

19.    Sélectionnez Policy actions (Actions de politique), puis Attach (Attacher). Une liste des rôles IAM apparaît.

20.    Recherchez le rôle API Gateway que vous avez créé précédemment. Sélectionnez ensuite le rôle.

21.    Sélectionnez Attach policy (associer une politique).

Créer une API REST API Gateway

Créez une API pour répondre à vos requêtes

1.    Ouvrez la console API Gateway.

2.    Dans le volet de navigation, sélectionnez APIs (API).

3.    Sélectionnez Create API (Créer une API).

4.    Dans la section Choose an API type (Choisir un type d'API), pour REST API, sélectionnez Build (Construire).

5.    Sous API Name (Nom d'API), saisissez un nom pour votre API, puis cliquez sur Next (Suivant).

6.    Sélectionnez Create API (Créer une API).

Créer des ressources pour votre API

1.    Dans le panneau Resources (Ressources) de votre page API, sélectionnez /.

2.    Pour Actions (Actions), sélectionnez Create Resource (Créer une ressource).

3.    Pour Resource Name (Nom de la ressource), saisissez folder.

4.    Pour Resource Path (Chemin de ressource), saisissez {folder}.

5.    Cliquez sur Create Resource (Créer une ressource).

6.    Dans le panneau Resources (Ressources), sélectionnez la ressource /{folder} que vous venez de créer à l'étape 5.

7.    Développez Actions (Actions), puis sélectionnez Create Resource (Créer une ressource).

8.    Pour Resource Name (Nom de la ressource), saisissez object.

9.    Pour Resource Path (Chemin de ressource), saisissez {object}.

10.    Cliquez sur Create Resource (Créer une ressource).

Créez une méthode PUT pour votre API pour télécharger une image ou un PDF

1.    Sélectionnez Actions (Actions), puis Create Method (Créer une méthode).

2.    Dans la liste déroulante, choisissez PUT, puis l'icône représentant une coche.

3.    Dans la catégorie Integration type (Type d'intégration), choisissez AWS Service.

4.    Pour la région AWS, choisissez us-east-1 ou la région AWS que vous voyez sur la page des propriétés du compartiment.

5.    Pour AWS Service (Service AWS), sélectionnez Simple Storage Service (S3).

6.    Laissez AWS Subdomain (Sous-domaine AWS) vide.

7.    Pour HTTP Method (Méthode HTTP), sélectionnez PUT.

8.    Pour Type d'action, sélectionnez Utiliser un remplacement de chemin.

9.    Pour Path override (optional) (Remplacer le chemin (facultatif)), saisissez {bucket}/{key}.

10.    Pour Execution role (Rôle d'exécution), saisissez l'Amazon Resource Name (ARN) du rôle IAM que vous avez créé précédemment. La création d'ARN fait partie de la section Créer et attacher une stratégie IAM au rôle API Gateway.

11.    Pour Content Handling (Gestion du contenu), sélectionnez Passthrough (Transmission).

12.    Choisissez Save (Enregistrer).

Configurer les mappages de paramètres pour la méthode PUT

1.    Dans le panneau Resources (Ressources) de votre page API, sélectionnez PUT.

2.    Sélectionnez Demande d'intégration.

3.    Développez URL Path Parameters (Paramètres de chemin d'URL).

4.    Sélectionnez Add path (Ajouter un chemin).

5.    Dans le champ Name (Nom), saisissez bucket.

6.    Pour Mapped from (Mappé depuis), saisissez method.request.path.folder.

7.    Sélectionnez l'icône en forme de coche à la fin de la ligne.

8.    Répétez les étapes 4 à 7. À l'étape 5, définissez Name (Nom) sur clé. À l'étape 6, définissez Mapped from (Mappé de) sur method.request.path.object.

Créez une méthode GET pour votre API afin de récupérer une image

1.    Dans le panneau Resources (Ressources) de votre page API, sélectionnez /{object}.

2.    Sélectionnez Actions (Actions), puis Create Method (Créer une méthode).

3.    Dans la liste déroulante, sélectionnez GET, puis cliquez sur l'icône représentant une coche.

4.    Dans la catégorie Integration type (Type d'intégration), choisissez AWS Service.

5.    Pour la région AWS, choisissez us-east-1 ou la région que vous voyez sur la page des propriétés du compartiment.

6.    Pour AWS Service (Service AWS), sélectionnez Simple Storage Service (S3).

7.    Laissez AWS Subdomain (Sous-domaine AWS) vide.

8.    Pour HTTP Method (Méthode HTTP), sélectionnez GET.

9.    Pour Type d'action, sélectionnez Utiliser un remplacement de chemin.

10.    Pour Path override (optional) (Remplacer le chemin (facultatif)), saisissez {bucket}/{key}.

11.    Pour Execution role (Rôle d'exécution), saisissez l'Amazon Resource Name (ARN) du rôle IAM que vous avez créé précédemment. La création d'ARN fait partie de la section Créer et attacher une stratégie IAM au rôle API Gateway.

12.    Pour Content Handling (Gestion du contenu), sélectionnez Passthrough (Transmission).

13.    Choisissez Save (Enregistrer).

Configurer les mappages de paramètres pour la méthode GET

1.    Dans le panneau Resources (Ressources) de votre page API, sélectionnez GET.

2.    Sélectionnez Demande d'intégration.

3.    Développez URL Path Parameters (Paramètres de chemin d'URL).

4.    Sélectionnez Add path (Ajouter un chemin).

5.    Dans le champ Name (Nom), saisissez bucket.

6.    Pour Mapped from (Mappé depuis), saisissez method.request.path.folder.

7.    Sélectionnez l'icône en forme de coche à la fin de la ligne.

8.    Répétez les étapes 4 à 7. À l'étape 5, définissez Name (Nom) sur clé. À l'étape 6, définissez Mapped from (Mappé de) sur method.request.path.object.

Configurez le mappage des réponses pour voir le fichier image ou PDF dans le navigateur

1.    Dans le panneau Resources (Ressources) de votre page API, sélectionnez GET.

2.    Sélectionnez Method Response (Réponse de méthode).

3.    Développez 200.

4.    Sous Response Body for 200 (Corps de réponse pour 200), supprimez application/json.

5.    Sous Response headers for 200 (En-têtes de réponse pour 200), choisissez Add header (Ajouter un en-tête).

6.    Dans le champ Name (Nom), entrez content-type.

7.    Choisissez l'icône de coche pour enregistrer.

8.    Choisissez Method execution (Exécution de la méthode) pour revenir au volet Method Execution (Exécution de la méthode).

9.    Sélectionnez Integration Response (Réponse d'intégration).

10.    Développez 200, puis développez les mappages d'en-tête.

11.    Choisissez l'icône en forme de crayon à la fin de la ligne nommée content-type.

12.    Entrez image/jpeg pour voir un fichier image.
-OU-
Entrez application/pdf pour voir un fichier PDF.

Configurer des types de médias binaires pour l'API

1.    Dans le volet de navigation de votre page API, sélectionnez Settings (Paramètres).

2.    Dans la section Binary Media Types (Types de médias binaires), sélectionnez Add Binary Media Type (Ajouter un type de média binaire).

3.    Dans la zone de texte, ajoutez la chaîne suivante :*/*

Note : évitez de mettre la chaîne entre guillemets. Vous pouvez remplacer par un caractère générique un type Multipurpose Internet Mail Extensions (MIME) particulier que vous souhaitez traiter comme un type de média binaire. Par exemple, sélectionnez « image/jpeg » pour qu'API Gateway traite les images JPEG comme des types de médias binaires. Si vous ajoutez */*, API Gateway traite tous les types de médias comme des types de médias binaires.

4.    Choisissez Save Changes (Enregistrer les modifications).

Résoudre l'erreur CORS avec les paramètres binaires de l'API

1.    Si vous souhaitez utiliser les API susmentionnées (PUT et GET) dans une application Web, vous risquez de rencontrer une erreur CORS.

2.    Pour résoudre l'erreur CORS lorsque les paramètres binaires sont activés, démarrez CORS à partir de la console API Gateway.

3.    Dans le panneau Resources (Ressources) de votre page API, sélectionnez /{object}.

4.    Pour Actions, choisissez Enable CORS (Activer CORS).

5.    Choisissez Enable CORS and replace existing CORS headers (Activer CORS et remplacer les en-têtes CORS existants).

6.    Utilisez la mise à jour de la commande CLI d'intégration pour mettre à jour la propriété de gestion du contenu. En effectuant cette mise à jour, le contenu binaire peut être géré pour les demandes d'options en amont avec une intégration fictive.

7.    Exécutez les deux commandes CLI suivantes en mettant à jour l'ID d'API, l'ID de ressource et la région AWS. Vous pouvez obtenir l'ID d'API et l'ID de ressource en haut de la console de l'API Gateway lorsque vous sélectionnez la ressource {object}.

aws apigateway update-integration --rest-api-id <API Id> --resource-id <Resource Id> --http-method OPTIONS --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT' --region <AWS Region>
aws apigateway update-integration-response --rest-api-id <API Id> --resource-id <Resource Id> --http-method OPTIONS --status-code 200 --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT' --region <AWS Region>

Déployer votre API

1.    Dans le volet de navigation de votre page API, sélectionnez Resources (Ressources).

2.    Dans le volet Resources (Ressources), sélectionnez Actions, puis Deploy API (Déployer l'API).

3.    Dans la fenêtre Deploy API (Déployer l'API), pour Deployment stage (Étape du déploiement), sélectionnez [New Stage] (Nouvelle étape).

4.    Pour Stage name (Nom de l'étape), saisissez v1.

5.    Choisissez Deploy (Déployer).

6.    Dans le volet de navigation, sélectionnez Stages (Étapes).

7.    Sélectionnez l'étape v1. L'URL d'appel pour effectuer des requêtes vers l'instantané de l'API déployée apparaît.

8.    Copiez l'URL d'appel.

Remarque : pour plus d'informations, consultez Déploiement d'une API REST dans Amazon API Gateway.

Charger un fichier image sur S3 en appelant votre API

Ajoutez le nom du compartiment et le nom de fichier de l'objet à l'URL d'appel de votre API. Ensuite, faites une requête HTTP PUT à l'aide d'un client de votre choix. Par exemple, avec l'application Postman, sélectionnez la méthode PUT dans la liste déroulante. Sélectionnez Body (Corps), puis sélectionnez Binary (Binaire). Lorsque le bouton Select File (Sélectionner un fichier) apparaît, sélectionnez un fichier local à charger.

Pour plus d'informations, consultez la section Appel d'une API REST dans Amazon API Gateway.

Exemple de commande curl pour effectuer une requête HTTP PUT pour télécharger une image ou un PDF

Remarque : dans cet exemple, abc12345 est votre identifiant d'API, testfolder est votre compartiment S3 et testimage.jpeg est le fichier local que vous importez.

curl -i --location --request PUT 'https://abc12345.execute-api.us-west-2.amazonaws.com/v1/testfolder/testimage.jpeg' --header 'Content-Type: text/plain' --data-binary '@/Path/to/file/image.jpeg'

Important : si */* est inclus dans la liste des types de médias binaires, alors vous pouvez effectuer une requête PUT pour charger le fichier. Si image.jpeg est inclus dans la liste des types de médias binaires, vous devez ajouter Content-Type header (En-tête de type de contenu) à votre requête PUT. Vous devez définir Content-Type header (En-tête de type de contenu) sur image/jpeg.

Vous pouvez désormais voir l'image ou le PDF dans un navigateur Web en utilisant la même URL, car le navigateur Web émet une requête GET.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?