Passer au contenu

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, puis le récupérer.

Brève description

Pour charger une image ou un fichier PDF sous forme de fichier binaire vers un compartiment Amazon S3 à l’aide d’API Gateway, activez la prise en charge binaire.

Pour accorder à API Gateway l'accès à votre compartiment S3, créez un rôle Gestion des identités et des accès AWS (AWS IAM). Le rôle IAM doit inclure les autorisations permettant à API Gateway d'effectuer les actions PutObject et GetObject sur votre compartiment S3.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Créer un rôle IAM pour API Gateway

Procédez comme suit :

  1. Ouvrez la console IAM.
  2. Dans le volet de navigation, sélectionnez Rôles.
  3. Sélectionnez Créer un rôle.
  4. Pour Type d’entité approuvée, choisissez Service AWS.
  5. Pour Service ou cas d'utilisation, choisissez API Gateway.
  6. Pour Cas d'utilisation, choisissez API Gateway.
  7. Sélectionnez Suivant. Puis, choisissez de nouveau Suivant.
  8. Pour Nom du rôle, saisissez le nom de votre politique. Par exemple, saisissez api-gateway-upload-to-s3.
  9. (Facultatif) Pour ajouter des identifications au rôle IAM, choisissez Ajouter une nouvelle étiquette.
  10. Sélectionnez Créer un rôle.

Créer et associer une politique IAM au rôle API Gateway

Procédez comme suit :

  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 IAM pour API Gateway, puis sélectionnez le rôle dans la colonne Nom du rôle.
  4. Dans la section Politiques d’autorisations, choisissez Ajouter des autorisations, puis Créer une politique intégrée.
  5. Dans l'onglet Éditeur visuel, dans la section Sélectionner un service, sélectionnez Choisir un service.
  6. Saisissez S3, puis choisissez S3.
  7. Dans Actions autorisées, saisissez PutObject, puis sélectionnez PutObject. Saisissez GetObjet, puis sélectionnez GetObjet.
  8. Développez Ressources, puis choisissez Spécifique.
  9. Choisissez Ajouter un ARN.
  10. Pour Nom du compartiment de ressources, saisissez le nom de votre compartiment. Incluez le préfixe, le cas échéant.
  11. Pour Nom de l'objet Ressource, 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 sections Règles de dénomination de compartiments à usage général et Présentation des objets Amazon S3.
  12. Choisissez Ajouter des ARN.
  13. Sélectionnez Suivant.
  14. Pour Nom, saisissez le nom de votre politique.
  15. Sélectionnez Créer une politique.

Créer une API REST pour API Gateway

Pour créer une API permettant de répondre à vos demandes, procédez comme suit :

  1. Ouvrez la console API Gateway.
  2. Dans le volet de navigation, sélectionnez API.
  3. Sélectionnez Créer une API.
  4. Sur la page Choisir un type d'API, pour API REST, sélectionnez Générer.
  5. Pour Nom d'API, saisissez le nom de votre API, puis sélectionnez Suivant.

Pour créer des ressources pour votre API, procédez comme suit :

  1. Dans le panneau Ressources de votre page API, sélectionnez**/**.
  2. Sélectionnez Créer une ressource.
  3. Pour Chemin de ressource, sélectionnez /.
  4. Pour Nom de la ressource, saisissez {compartiment}.
    Remarque : Le compartiment est un nom de variable que l'utilisateur peut modifier.
  5. Sélectionnez Créer une ressource.
  6. Dans le panneau Ressources, sélectionnez la ressource /{compartiment}.
  7. Sélectionnez Créer une ressource.
  8. Pour Chemin de ressource, sélectionnez /{compartiment}/.
  9. Pour Nom de la ressource, saisissez {proxy+}.
  10. Sélectionnez Créer une ressource.

Pour créer une méthode PUT permettant à votre API de charger des images ou des fichiers PDF, procédez comme suit :

  1. Dans la section Méthodes, choisissez Créer une méthode.
  2. Pour Type de méthode, sélectionnez PUT.
  3. Sous Type d’intégration, sélectionnez Service AWS.
  4. Pour Région AWS, choisissez us-east-1 ou la région AWS qui se trouve sur la page Propriétés du compartiment.
  5. Pour Service AWS, choisissez Simple Storage Service (S3).
  6. Laissez le champ Sous-domaine AWS vide.
  7. Pour Méthode HTTP, sélectionnez PUT.
  8. Pour Type d'action, choisissez Utiliser un remplacement de chemin.
  9. Pour Remplacement de chemin, saisissez {compartiment}/{proxy}.
  10. Pour Rôle d'exécution, saisissez l’Amazon Resource Name (ARN) pour le rôle IAM.
  11. Pour Gestion du contenu, choisissez Passage.
  12. Sélectionnez Créer une méthode.

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

Procédez comme suit :

  1. Dans le panneau Ressources de votre page API, sélectionnez PUT.
  2. Choisissez Demande d'intégration, puis Modifier.
  3. Développez Paramètres de chemin d’URL.
  4. Choisissez Ajouter un paramètre de chemin.
  5. Pour Nom, saisissez compartiment.
  6. Pour Mappé de, saisissez method.request.path.bucket.
  7. Répétez les étapes 4 à 6, mais pour l'étape 5, définissez Nom sur clé. Pour l'étape 6, définissez Mappé de sur method.request.path.proxy.
  8. Sélectionnez Enregistrer.

Créer une méthode GET pour que votre API récupère une image

Procédez comme suit :

  1. Dans le panneau Ressources de votre page API, sélectionnez /{objet}.
  2. Dans la section Méthodes, choisissez Créer une méthode.
  3. Pour Type de méthode, choisissez GET.
  4. Sous Type d’intégration, sélectionnez Service AWS.
  5. Pour Région AWS, sélectionnez us-east-1 ou la région que vous voyez sur la page Propriétés du compartiment.
  6. Pour Service AWS, choisissez Simple Storage Service (S3).
  7. Laissez le champ Sous-domaine AWS vide.
  8. Pour Méthode HTTP, choisissez GET.
  9. Pour Type d'action, choisissez Utiliser un remplacement de chemin.
  10. Pour Remplacement de chemin, saisissez {compartiment}/{clé}.
  11. Pour Rôle d'exécution, saisissez l'ARN du rôle IAM.
  12. Pour Gestion du contenu, choisissez Passage.
  13. Sélectionnez Créer une méthode.

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

Procédez comme suit :

  1. Dans le panneau Ressources de votre page API, choisissez GET.
  2. Choisissez Demande d'intégration, puis Modifier.
  3. Développez Paramètres de chemin d’URL.
  4. Choisissez Ajouter des paramètres de chemin.
  5. Pour Nom, saisissez compartiment.
  6. Pour Mappé de, saisissez method.request.path.folder.
  7. Répétez les étapes 4 à 6, mais pour l'étape 5, définissez Nom sur clé. Pour l'étape 6, définissez Mappé de sur method.request.path.object.
  8. Sélectionnez Enregistrer.

Configurer le mappage de réponse pour voir l'image ou le PDF dans le navigateur

Procédez comme suit :

  1. Dans le panneau Ressources de votre page API, choisissez GET.
  2. Sélectionnez Réponse de méthode.
  3. Pour Réponse 200, choisissez Modifier.
  4. Sous Corps de la réponse, supprimez application/json.
  5. Sous Nom de l'en-tête, choisissez Ajouter un en-tête.
  6. Pour Nom, saisissez Type de contenu.
  7. Sélectionnez Enregistrer.
  8. Choisissez Réponse d'intégration, puis Modifier.
  9. Pour Code de statut de la réponse de méthode 200, saisissez image/jpeg pour un fichier image ou application/pdf pour un fichier PDF.
  10. Sélectionnez Enregistrer.

Configurer des types de supports binaires de l'API

Procédez comme suit :

  1. Dans le volet de navigation de votre page API, choisissez Paramètres de l’API.
  2. Dans la section Types de supports binaires, choisissez Gérer les types de supports.
  3. Choisissez Ajouter un type de support binaire, puis ajoutez la chaîne / dans la zone de texte.
    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) spécifique à gérer en tant que type de support binaire. Par exemple, pour que API Gateway traite les images JPEG comme des types de supports binaires, choisissez image/jpeg. Si vous ajoutez */*, alors API Gateway traitera tous les types de supports comme des types de supports binaires.
  4. Sélectionnez Enregistrer les modifications.

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

Remarque : Si vous utilisez les API PUT et GET dans une application Web, une erreur CORS (Cross-Origin Resource Sharing) peut s'afficher. Pour plus d'informations, consultez la page Erreurs CORS sur le site Web de Mozilla.

Pour résoudre l'erreur CORS avec les paramètres binaires activés, procédez comme suit :

  1. Ouvrez la console API Gateway.
  2. Sélectionnez votre API.
  3. Dans le panneau Ressources de votre page API, sélectionnez /{object}.
  4. Choisissez Activer CORS.
  5. Pour Réponses de la passerelle, choisissez Par défaut 4xx, Par défaut 5xx.
  6. Pour Access-Control-Allow-Methods, choisissez GET et PUT.
  7. Sélectionnez Enregistrer.
  8. Exécutez la commande de l'AWS CLI update-integration :
    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
    Remarque : Remplacez rest-api-id par votre ID d'API REST, RESOURCE_id par votre ID de ressource et AWS_REGION par votre région.
  9. Exécutez la commande update-integration-response :
    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
    Remarque : Remplacez rest-api-id par votre ID d'API REST, RESOURCE_id par votre ID de ressource et AWS_REGION par votre région. Pour qu'API Gateway puisse exécuter des demandes d'options, vous devez exécuter les commandes update-integration et update-integration-response l'une après l'autre.

Déployer votre API

Procédez comme suit :

  1. Dans le panneau de navigation de votre page API, sélectionnez Ressources.
  2. Sélectionnez Déployer l’API.
  3. Dans la fenêtre Déployer l’API, pour Étape, choisissez *[Nouvelle étape].
  4. Pour Nom de l'étape, saisissez v1.
  5. Choisissez Déployer.
  6. Dans le panneau de navigation, sélectionnez Étapes.
  7. Choisissez l'étape v1.
  8. Notez l'URL d'appel qui s'affiche.

Pour plus d'informations, consultez la section Déployer des API REST dans API Gateway.

Invoquer votre API REST pour charger un fichier image vers Amazon S3

Procédez comme suit :

  1. Ajoutez le nom du compartiment et le nom de fichier de l'objet à l'URL d'appel de votre API.
  2. Utilisez votre client préféré pour effectuer une requête PUT HTTP. Par exemple, vous pouvez télécharger et utiliser Postman. Pour plus d'informations, consultez la page Télécharger Postman sur le site Web de Postman.
  3. Sélectionnez Corps, puis binaire. Lorsque le bouton Sélectionner un fichier s’affiche, sélectionnez un fichier local à charger.

Voici un exemple de commande curl que vous pouvez exécuter pour effectuer une requête PUT HTTP afin de charger une image ou un fichier PDF :

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'

Remarque : Remplacez abc12345 par votre ID d'API, testfolder par votre compartiment S3 et testimage.jpeg par le fichier local que vous chargez.

Si vous avez inclus */* dans la liste des types de supports binaires, vous pouvez présenter une requête PUT pour charger le fichier. Si vous avez inclus image.jpeg dans la liste des types de supports binaires, vous devez ajouter l'en-tête Content-Type à votre requête PUT et le définir sur image/jpeg. Comme le navigateur Web émet une requête GET, vous pouvez afficher l'image ou le PDF dans un navigateur Web avec la même URL.

Informations connexes

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

Activer CORS sur une ressource à l'aide de la console API Gateway