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

Lecture de 10 minute(s)
0

Je souhaite charger une image ou un fichier PDF vers Amazon Simple Storage Service (Amazon S3) via Amazon API Gateway. Je souhaite également récupérer une image ou un fichier PDF.

Brève description

Pour charger une image ou un PDF sous forme de fichier binaire vers un compartiment Amazon S3 via une passerelle API, activez la prise en charge binaire.

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 à la passerelle API d'effectuer les](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) actions PutObjetet[GetObjet sur votre compartiment S3.

Résolution

Création d'un rôle IAM pour la passerelle API

1.Ouvrez la console IAM.

2.Dans le volet de navigation, sélectionnez Rôles.

3.Sélectionnez Créer un rôle.

4.Dans la section Sélectionnez le type d'entité de confiance, sélectionnez le service AWS.

5.Dans la section Sélectionner un cas d'utilisation, sélectionnez Passerelle API.

6.Dans la section Sélectionnez votre cas d'utilisation, sélectionnez ** Passerelle API**.

7.Sélectionnez Suivant : Autorisations.
Remarque : Cette section présente le service géré AWS qui permet à la passerelle API de transférer les journaux au compte d'un utilisateur. Vous ajouterez des autorisations pour Amazon S3 ultérieurement.

8.(Facultatif) Sélectionnez Suivant : Balises pour ajouter des balises.

9.Sélectionnez Suivant : Vérification.

10.Dans le champ Nom de rôle, saisissez le nom de votre politique. Par exemple : api-gateway-upload-to-s3.

11.Sélectionnez Créer un rôle.

Création et association d'une politique IAM au rôle Passerelle API

1.Ouvrez la console IAM.

2.Dans le volet de navigation, sélectionnez Rôles.

3.Dans le champ de recherche, saisissez le nom du nouveau rôle Passerelle API que vous avez créé. Sélectionnez ensuite ce rôle dans la colonne Nom de rôle.

4.Sur l'onglet Page de détails des rôles, sélectionnez Ajouter des autorisations.

5.Sélectionnez Créer une politique en ligne.

6.Sur l'onglet Éditeur visuel, dans la section Sélectionner un service, sélectionnez Choisir un service.

7.Saisissez S3, puis sélectionnez S3.

8.Dans la zone Spécifier les actions autorisées dans S3, saisissez PutObjet, puis sélectionnez PutObjet.

9.Saisissez GetObjet, puis sélectionnez GetObjet.

10.Développez l’option Ressources, puis sélectionnez Spécifique.

11.Sélectionnez Ajouter un ARN.

12.Dans le champ Nom de compartiment, saisissez le nom de votre compartiment. Incluez le préfixe, le cas échéant.

13.Dans le champ Nom d'objet, saisissez un nom d'objet.
Remarque : Le nom de compartiment indique l'emplacement des fichiers téléversés. Le nom d'objet indique le modèle auquel l'objet doit appartenir pour permettre l'alignement des politiques. Pour plus d'informations, consultez les Règles de dénomination des compartiments et la Présentation des objets Amazon S3.

14.Sélectionnez Ajouter.

15.(Facultatif) Sélectionnez Suivant : Balises pour ajouter des balises.

16.Sélectionnez Suivant : Vérification.

17.Dans le champ Nom, saisissez le nom de votre politique.

18.Sélectionnez Créer une politique.

19.Dans le champ de recherche des politiques, saisissez le nom de la politique que vous avez créée à l'étape 17, puis sélectionnez cette politique.

20.Sélectionnez Actions de politique, puis sélectionnez Associer. Une liste des rôles IAM s'affiche.

21.Recherchez le rôle de la Passerelle API que vous avez créé précédemment. Sélectionnez ensuite le rôle en question.

22.Sélectionnez Associer une politique.

Création d'une API REST pour la Passerelle API

Créez une API pour répondre à vos demandes

1.Ouvrez la console Passerelle API.

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

3.Sélectionnez Créer une API.

4.Dans la section Sélectionner un type d'API, de l'API REST, sélectionnez ** Build (Construire)**.

5.Dans le champ Nom d'API, saisissez le nom de votre API, puis sélectionnez Suivant.

6.Sélectionnez Créer une API.

Créez des ressources pour votre API

1.Dans le panneau Ressources de votre page API, sélectionnez**/**.

2.Dans le champ Actions, sélectionnez Créer une ressource.

3.Dans le champ Nom de ressource, saisissez dossier.

4.Dans le champ Chemin de ressource, saisissez {folder}.

5.Sélectionnez Créer un ressource.

6.Dans le panneau Ressources, sélectionnez la ressource**/{folder}** que vous avez créée à l'étape 5.

7.Sélectionnez Actions, puis sélectionnez Créer une ressource.

8.Dans le champ Nom de ressource, saisissez objet.

9.Dans le champ Chemin de ressource, saisissez {object}.

10.Sélectionnez Créer un ressource.

Créez une méthode PUT de votre API destinée au chargement d'une image ou d'un PDF

1.Sélectionnez Actions, puis sélectionnez Créer une méthode.

2.Dans la liste déroulante, sélectionnez PUT, puis cliquez sur l'icône en forme de coche.

3.Dans la catégorie Type d'intégration, sélectionnez AWS Service.

4.Dans le champ Région AWS, sélectionnez us-east-1 ou la région AWS que vous voyez sur la page Propriétés de compartiment.

5.Dans le champ AWS Service, sélectionnez Simple Storage Service (S3).

6.Laissez le champ Sous-domaine AWS vide.

7.Dans le champ Méthode HTTP, sélectionnez **PUT **.

8.Dans le champ Type d'action, sélectionnez Utiliser le remplacement du chemin.

9.Dans le champ Remplacement du chemin (facultatif), saisissez {bucket}/{key}.

10.Dans le champ Rôle d'exécution, saisissez l'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 associe une politique IAM au rôle de Passerelle API.

11.Dans le champ Gestion du contenu, sélectionnez Transmission.

12.Sélectionnez Enregistrer.

Configuration des mappages de paramètres de la méthode PUT

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

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

3.Développez Paramètres du chemin d'URL.

4.Sélectionnez Ajouter un chemin.

5.Dans le champ Nom, saisissez compartiment.

6.Dans le champ Mappé de, saisissez method.request.path.folder.

7.Cliquez sur 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 Nom sur clé. À l'étape 6, définissez Mappé de sur method.request.path.object.

Création d’une méthode GET pour votre API pour récupérer une image

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

2.Sélectionnez Actions, puis sélectionnez Créer une méthode.

3.Dans la liste déroulante, sélectionnez GET, puis cliquez sur l'icône en forme de coche.

4.Dans la catégorie Type d'intégration, sélectionnez AWS Service.

5.Dans le champ Région AWS, sélectionnez us-east-1 ou la région que vous voyez sur la page Propriétés de compartiment.

6.Dans le champ AWS Service, sélectionnez Simple Storage Service (S3).

7.Laissez le champ Sous-domaine AWS vide.

8.Dans le champ Méthode HTTP, sélectionnez GET.

9.Dans le champ Type d'action, sélectionnez Utiliser le remplacement du chemin.

10.Dans le champ Remplacement du chemin (facultatif), saisissez {bucket}/{key}.

11.Dans le champ Rôle d'exécution, saisissez l'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 associe une politique IAM au rôle de Passerelle API.

12.Dans le champ Gestion du contenu, sélectionnez Transmission.

13.Sélectionnez Enregistrer.

Configuration des mappages de paramètres pour la méthode GET

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

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

3.Développez Paramètres du chemin d'URL.

4.Sélectionnez Ajouter un chemin.

5.Dans le champ Nom, saisissez compartiment.

6.Dans le champ Mappé de, saisissez method.request.path.folder.

7.Cliquez sur 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 Nom sur clé. À l'étape 6, définissez Mappé de sur method.request.path.object.

Configuration du mappage des réponses pour voir l'image ou le PDF dans le navigateur

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

2.Sélectionnez Réponse de méthode.

3.Développez 200.

4.Sous Corps de réponse pour 200, supprimez application/json.

5.Sous En-têtes de réponse pour 200, sélectionnez Ajouter un en-tête.

6.Dans le champ Nom, saisissez le type de contenu.

7.Cliquez sur l'icône en forme de coche pour enregistrer.

8.Sélectionnez Exécution de la méthode pour revenir au volet Exécution de la méthode.

9.Sélectionnez Réponse d'intégration.

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

11.Cliquez sur l'icône en forme de crayon à la fin de la ligne nommée type de contenu.

12.Saisissez « image/jpeg » pour afficher un fichier d’image.
-ou-
Saisissez « application/pdf » pour afficher un fichier PDF.

Configuration des types de médias binaires de l'API

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

2.Dans la section Types de média binaires, sélectionnez Ajouter un type de média binaire.

3.Dans la zone de texte, ajoutez la chaîne suivante : */*
Remarque : Ne mettez pas la chaîne entre guillemets. Vous pouvez remplacer un caractère générique par un type MIME (Multipurpose Internet Mail Extensions) particulier que vous souhaitez traiter comme un type de média binaire. Par exemple, pour que la Passerelle API traite les images JPEG comme des types de médias binaires, choisissez « image/jpeg ». Si vous ajoutez */*, alors la Passerelle API traitera tous les types de média comme des types de média binaires.

4.Sélectionnez Enregistrer les modifications.

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

1.Si vous utilisez les API mentionnées précédemment (PUT et GET) dans une application Web, il est possible qu’une erreur CORS se produise. Pour plus d'informations, consultez les erreurs CORS sur le site Web de Mozilla.

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

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

4.Dans le champ Actions, sélectionnez Activer CORS.

5.Sélectionnez Activer CORS et remplacer les en-têtes CORS existants.

6.Pour mettre à jour la propriété de gestion du contenu, exécutez la commande CLI update-integration. Cette mise à jour permet au contenu binaire de gérer les demandes d'options de contrôle préalable à l’aide d’une intégration fictive.

7.Mettez à jour l'ID d'API, l'ID de ressource et la région AWS pour exécuter les deux commandes CLI suivantes. Pour obtenir l'ID d'API et l'ID de ressource, sélectionnez la ressource **{object} **en haut de la console Passerelle API.

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éployez votre API

1.Dans le panneau de navigation de votre page API, sélectionnez Ressources.

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

3.Dans la fenêtre Déployer l’API, pour l’étape de déploiement, sélectionnez [Nouvelle étape].

4.Dans le champ Nom d'étape, saisissez v1.

5.Sélectionnez Déployer.

6.Dans le panneau de navigation, sélectionnez Étapes.

7.Sélectionnez l'étape v1. L'URL d'appel permettant d’envoyer des demandes à l'instantané de l'API déployée s'affiche.

8.Copiez l'URL d'appel.

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

Appelez votre API pour téléverser un fichier image vers S3

Ajoutez le nom de compartiment et le nom de fichier de l'objet à l'URL d'appel de votre API. Ensuite, faites une requête HTTP PUT avec le client de votre choix. Par exemple, avec l'application externe Postman, sélectionnez la méthode PUT dans la liste déroulante. Sélectionnez Corps, puis sélectionnez binaire. Lorsque le bouton Sélectionner un fichier s’affiche, sélectionnez un fichier local à téléverser.

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éverser une image ou un PDF

Dans l'exemple suivant, abc12345 est l’ID de votre API, testfolder est votre compartiment S3 et testimage.jpeg est le fichier local à téléverser :

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 */* figure dans la liste des types de médias binaires, vous pouvez faire une requête PUT pour téléverser le fichier. Si image.jpeg figure dans la liste des types de médias binaires, vous devez ajouter l'en-tête Content-Type à votre requête PUT. Vous devez définir l'en-tête Content-Type sur « image/jpeg ».

L'image ou le PDF s'affiche désormais dans un navigateur Web avec la même URL. C’est parce que le navigateur Web effectue une requête GET.

Informations connexes

Activation de la prise en charge binaire à l'aide de l'API REST pour la Passerelle API