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

Date de la dernière mise à jour : 09/12/2021

Je souhaite charger un fichier image sur Amazon Simple Storage Service (Amazon S3) via Amazon API Gateway. Comment puis-je procéder ?

Brève description

Pour charger un fichier binaire (image) vers un compartiment S3 à l'aide d'API Gateway, vous devez activer la prise en charge binaire pour votre API REST API Gateway.

Pour permettre à votre API d'accéder à votre compartiment S3, vous devez également créer un rôle AWS Identity and Access Management (IAM). Le rôle IAM doit inclure les autorisations permettant à API Gateway d'exécuter l'action PutObject 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, sélectionnez Roles (Rôles).
  3. Sélectionnez 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 (Suivant : 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 S3 ultérieurement. Sélectionnez Next : Tags (Suivant : Balises) pour le moment.
  8. Ajoutez des balises (facultatif), puis 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. Sélectionnez 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, sélectionnez Roles (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. Dans l'onglet Permissions (Autorisations), sélectionnez Attach Policy (Associer des stratégies).
  5. Sélectionnez Create policy (Créer une stratégie).
  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 sélectionnez PutObject.
  9. Développez Resources (Ressources), puis sélectionnez Specific (Spécifique).
  10. Sélectionnez Add ARN (Ajouter ARN).
  11. Pour Bucket name (Nom du compartiment), saisissez le nom de votre compartiment. Incluez le préfixe, le cas échéant.
  12. Pour Object name (Nom d'objet), saisissez votre 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 (c'est-à-dire les noms de fichiers) doit respecter pour l'alignement de stratégie.
  13. Sélectionnez Add (Ajouter).
  14. Sélectionnez Next: Tags (Suivant : Balises), ajoutez des balises (facultatif), puis sélectionnez Next: Review (Suivant : Examen).
  15. Pour Name (Nom), saisissez le nom de votre stratégie.
  16. Sélectionnez Create policy (Créer une stratégie).
  17. Dans la barre de recherche de stratégie, saisissez le nom de la stratégie que vous venez de créer, puis sélectionnez la stratégie.
  18. Sélectionnez Policy actions (Actions de politique), puis Attach (Attacher). Une liste des rôles IAM apparaît.
  19. Recherchez le rôle API Gateway que vous avez créé précédemment. Sélectionnez ensuite le rôle.
  20. 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), sélectionnez Build (Construire) pour REST API.
  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. Sélectionnez Create Resource (Créer une ressource).
  6. Dans le panneau Resources (Ressources), sélectionnez la ressource /{folder} que vous venez de créer.
  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. Sélectionnez Create Resource (Créer une ressource).

Créer une méthode PUT pour votre API

  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 le menu déroulant, sélectionnez PUT (Soumettre), puis l'icône de coche.
  4. En raison d'une limitation de la console, seules trois options peuvent s'afficher. Pour contourner cette limitation, vous pouvez configurer temporairement l'un des types d'intégration disponibles, puis modifier ultérieurement le point de terminaison de la demande d'intégration vers AWS Service (Service AWS). Par exemple, sélectionnez HTTP Proxy (proxy HTTP) pour Integration type (type d'intégration). Ensuite, saisissez https://postman-echo.com/get comme URL de point de terminaison (ignorez l'avertissement « Missing parameters:{proxy} » pour l'instant). Sélectionnez Save (Enregistrer) pour sauvegarder les modifications.
  5. Maintenant, sélectionnez Integration Request (Demande d'intégration) et sélectionnez AWS Service (Service AWS) dans la catégorie Integration type (Type d'intégration).
  6. Pour AWS Region (Région AWS), sélectionnez us-west-2.
  7. Pour AWS Service (Service AWS), sélectionnez Simple Storage Service (S3).
  8. Laissez AWS Subdomain (Sous-domaine AWS) vide.
  9. Pour HTTP Method (Méthode HTTP), sélectionnez PUT.
  10. Pour Action Type (Type d'action), sélectionnez Use path override (Utiliser le remplacement de chemin).
  11. Pour Path override (optional) (Remplacer le chemin (facultatif)), saisissez {bucket}/{key}.
  12. 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.
  13. Pour Content Handling (Gestion du contenu), sélectionnez Passthrough (Transmission).
  14. Sélectionnez 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 Integration Request (Demande d'intégration).
  3. Développez URL Path Parameters (Paramètres du 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 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.

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 également substituer un caractère générique à un type MIME particulier que vous souhaitez traiter en tant que 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 traitera tous les types de médias comme des types de médias binaires.
  4. Sélectionnez Save changes (Enregistrer les modifications).

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 (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. Sélectionnez 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, l'application Postman.

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

Exemple de requête HTTP de la méthode PUT

Remarque : cet exemple suppose que abc est votre ID d'API, que mybucket est votre compartiment S3 et que myobject.jpeg est le fichier local que vous chargez. Dans cet exemple, mybucket est remplacé par {folder} et mappé à {bucket}. myobject.jpeg est remplacé par {object} et mappé à {key}.

https://abc.execute-api.ap-southeast-1.amazonaws.com/v1/mybucket/myobject.jpeg

Important : si */* est inclus dans la liste binaire, alors vous pouvez effectuer une requête PUT pour charger le fichier. Si image.jpeg est inclus dans la liste binaire, 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.


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


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