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

Date de la dernière mise à jour : 01/06/2021

Je souhaite charger un fichier image sur Amazon Simple Storage Service (Amazon S3) via Amazon API Gateway.

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 API Gateway. Pour permettre à votre API d'accéder à votre compartiment S3, vous devez créer un rôle AWS Identity and Access Management (IAM). Le rôle IAM doit disposer des autorisations pour qu'API Gateway effectue des opérations Put 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 stratégie), puis Attach (Attacher).
  19. Dans le volet de navigation, sélectionnez Roles (Rôles).
  20. Recherchez et sélectionnez le rôle API Gateway que vous avez créé précédemment.
  21. Sélectionnez Policy actions (Actions de stratégie), puis Attach (Attacher).
    Remarque : les autorisations de stratégie permettent à API Gateway de charger des objets dans votre compartiment avec l'appel d'API PutObject.

Créez une API 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éez 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éez 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, puis l'icône de coche.
  4. Pour Integration type (Type d'intégration), sélectionnez AWS Service (Service AWS).
  5. Pour AWS Region (Région AWS), sélectionnez us-west-2.
  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 PUT.
  9. Pour Action Type (Type d'action), sélectionnez Use path override (Utiliser le 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.
  12. Pour Content Handling (Gestion du contenu), sélectionnez Passthrough (Transmission).
  13. sélectionnez Save (Enregistrer).

Créer une méthode PUT pour votre API

  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.

Vous voyez maintenant l'URL d'appel pour effectuer des requêtes vers l'instantané de l'API déployée.

Copiez l'URL d'appel et ajoutez le nom du compartiment et le nom de fichier de l'objet pour effectuer une requête PUT HTTP à l'aide d'un client. Vous pouvez utiliser le client de votre choix. Par exemple, vous pouvez utiliser Postman.

Considérez l'exemple de requête HTTP suivant. L'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}, tandis que myobject.jpeg est remplacé par {object} et mappé à {key}.

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

Remarque : 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 ?