Salta al contenuto

Come posso caricare un file immagine o PDF su Amazon S3 tramite Gateway API?

9 minuti di lettura
0

Desidero utilizzare Gateway Amazon API per caricare un file immagine o PDF su Amazon Simple Storage Service (Amazon S3) e recuperarlo.

Breve descrizione

Per caricare un'immagine o un PDF come file binario su un bucket Amazon S3 tramite Gateway API, attiva il supporto binario.

Per concedere a Gateway API l'accesso al bucket S3, crea un ruolo AWS Identity and Access Management (AWS IAM). Il ruolo IAM deve includere le autorizzazioni di Gateway API per eseguire le azioni PutObject e GetObject sul bucket S3.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Crea un ruolo IAM per Gateway API

Completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Ruoli.
  3. Scegli Crea ruolo.
  4. In Tipo di entità attendibile, scegli Servizio AWS.
  5. Per Servizio o caso d'uso, scegli Gateway API.
  6. Per Casi d'uso, scegli Gateway API.
  7. Scegli Avanti. Quindi scegli nuovamente Avanti.
  8. In Nome ruolo, inserisci un nome per la policy. Ad esempio, inserisci api-gateway-upload-to-s3.
  9. (Facoltativo) Per aggiungere tag al ruolo IAM, scegli Aggiungi nuovo tag.
  10. Scegli Crea ruolo.

Crea e collega una policy IAM al ruolo Gateway API

Completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Ruoli.
  3. Nella casella di ricerca inserisci il nome del ruolo IAM per Gateway API, quindi seleziona il ruolo dalla colonna Nome ruolo.
  4. Nella sezione Policy di autorizzazione, scegli Aggiungi autorizzazioni, quindi seleziona Crea policy inline.
  5. Nella scheda Editor visivo, all'interno della sezione Seleziona un servizio, seleziona Scegli un servizio.
  6. Inserisci S3, quindi scegli S3.
  7. In Actions allowed (Azioni consentite), inserisci PutObject, quindi scegli PutObject. Inserisci GetObject, quindi scegli GetObject.
  8. Espandi Risorse, quindi scegli Specifiche.
  9. Scegli Aggiungi ARN.
  10. In Resource bucket name (Nome bucket risorse), inserisci il nome del bucket. Includi il prefisso, se applicabile.
  11. In Resource object name (Nome oggetto risorsa), inserisci il nome di un oggetto.
    Nota: il nome del bucket specifica la posizione dei file caricati. Il nome dell'oggetto specifica il modello a cui l'oggetto deve attenersi per l'allineamento alla policy. Per ulteriori informazioni, consulta Regole di denominazione dei bucket per uso generico e Panoramica degli oggetti di Amazon S3.
  12. Scegli Aggiungi ARN.
  13. Scegli Avanti.
  14. In Nome, inserisci il nome della policy.
  15. Scegli Crea policy.

Crea una REST API di Gateway API

Per creare un'API per inviare le richieste, completa i seguenti passaggi:

  1. Apri la console Gateway API.
  2. Nel pannello di navigazione, scegli API.
  3. Scegli Crea API.
  4. Nella pagina Scegli un tipo di API, per REST API scegli Crea.
  5. In Nome API, inserisci un nome per l'API, quindi scegli Crea API.

Per creare risorse per l'API, completa i seguenti passaggi:

  1. Nel pannello Risorse della pagina dell'API seleziona /.
  2. Scegli Crea risorsa.
  3. Per Percorso risorsa, scegli**/**.
  4. In Nome risorsa, inserisci {bucket}.
    Nota: Bucket è un nome di variabile che l'utente può modificare.
  5. Scegli Crea risorsa.
  6. Nel pannello Risorse seleziona la risorsa /{bucket}.
  7. Scegli Crea risorsa.
  8. Per Percorso risorsa, scegli /{bucket}/.
  9. In Nome risorsa, inserisci {proxy+}.
  10. Scegli Crea risorsa.

Per creare un metodo PUT per l'API per caricare immagini o file PDF, completa i seguenti passaggi:

  1. Nella sezione Metodi scegli Crea metodo.
  2. Per Tipo di metodo, scegli PUT.
  3. Per Tipo di integrazione, scegli Servizio AWS.
  4. Per Regione AWS, scegli us-east-1 o la Regione AWS visualizzata nella pagina Proprietà del bucket.
  5. Per Servizio AWS, scegli Simple Storage Service (S3).
  6. Lascia vuoto Sottodominio AWS.
  7. Per Metodo HTTP, scegli PUT.
  8. Per Tipo di operazione, scegli Utilizza sostituzione percorso.
  9. In Sostituzione percorso, inserisci {bucket}/{proxy}.
  10. In Ruolo di esecuzione, inserisci il nome della risorsa Amazon (ARN) del ruolo IAM.
  11. Per Gestione contenuti, scegli Transito.
  12. Scegli Crea metodo.

Configura le mappature dei parametri per il metodo PUT

Completa i seguenti passaggi:

  1. Nel pannello Risorse della pagina dell'API scegli PUT.
  2. Scegli Richiesta di integrazione, quindi seleziona Modifica.
  3. Espandi Parametri del percorso URL.
  4. Scegli Aggiungi parametro di percorso.
  5. In Nome, inserisci bucket.
  6. In Mappato da, inserisci method.request.path.bucket.
  7. Ripeti i passaggi 4-6, ma nel passaggio 5, in Nome, inserisci chiave. Nel passaggio 6, in Mappato da, inserisci method.request.path.proxy.
  8. Scegli Salva.

Crea un metodo GET per l'API per recuperare un'immagine

Completa i seguenti passaggi:

  1. Nel pannello Risorse della pagina dell'API scegli /{object}.
  2. Nella sezione Metodi scegli Crea metodo.
  3. Per Tipo di metodo, scegli GET.
  4. Per Tipo di integrazione, scegli Servizio AWS.
  5. Per Regione AWS, scegli us-east-1 o la Regione visualizzata nella pagina Proprietà del bucket.
  6. Per Servizio AWS, scegli Simple Storage Service (S3).
  7. Lascia vuoto Sottodominio AWS.
  8. Per Metodo HTTP, scegli GET.
  9. Per Tipo di operazione, scegli Utilizza sostituzione percorso.
  10. In Sostituzione percorso, inserisci {bucket}/{key}.
  11. In Ruolo di esecuzione, inserisci l'ARN del ruolo IAM.
  12. Per Gestione contenuti, scegli Transito.
  13. Scegli Crea metodo.

Configura le mappature dei parametri per il metodo GET

Completa i seguenti passaggi:

  1. Nel pannello Risorse della pagina dell'API scegli GET.
  2. Scegli Richiesta di integrazione, quindi seleziona Modifica.
  3. Espandi Parametri del percorso URL.
  4. Scegli Aggiungi parametri di percorso.
  5. In Nome, inserisci bucket.
  6. In Mappato da, inserisci method.request.path.folder.
  7. Ripeti i passaggi 4-6, ma nel passaggio 5, in Nome, inserisci chiave. Nel passaggio 6, in Mappato da, inserisci method.request.path.object.
  8. Scegli Salva.

Configura la mappatura delle risposte per visualizzare l'immagine o il PDF in un browser

Completa i seguenti passaggi:

  1. Nel pannello Risorse della pagina dell'API scegli GET.
  2. Scegli Risposta metodo.
  3. Per Risposta 200, scegli Modifica.
  4. In Corpo risposta rimuovi applicazione/json.
  5. Per Nome intestazione, scegli Aggiungi intestazione.
  6. In Nome, inserisci content-type.
  7. Scegli Salva.
  8. Scegli Risposta di integrazione, quindi seleziona Modifica.
  9. In Codice di stato risposta metodo 200, inserisci image/jpeg per un file immagine o application/pdf per un file PDF.
  10. Scegli Salva.

Configura i tipi di supporti binari per l'API

Completa i seguenti passaggi:

  1. Nel pannello di navigazione della pagina dell'API scegli Impostazioni API.
  2. Nella sezione Tipi di supporti binari scegli Gestisci tipi di supporti.
  3. Scegli Aggiungi tipo di supporto binario, quindi aggiungi la stringa**/** nella casella di testo.
    Nota: non inserire la stringa tra virgolette. Puoi sostituire un carattere jolly con un tipo MIME (Multipurpose Internet Mail Extensions) specifico da gestire come tipo di supporto binario. Ad esempio, per fare in modo che Gateway API gestisca le immagini JPEG come tipi di supporti binari, scegli image/jpeg. Se aggiungi */*, Gateway API tratta tutti i tipi di supporti come binari.
  4. Scegli Salva modifiche.

Risolvi l'errore CORS con le impostazioni binarie per l'API

Nota: se utilizzi le API PUT e GET in un'applicazione web, potresti ricevere un errore CORS (Cross-Origin Resource Sharing). Per ulteriori informazioni, consulta CORS errors (Errori CORS) sul sito web Mozilla.

Per risolvere l'errore CORS con le impostazioni binarie attivate, completa i seguenti passaggi:

  1. Apri la console Gateway API.
  2. Seleziona l'API.
  3. Nel pannello Risorse della pagina dell'API seleziona /{object}.
  4. Scegli Abilita CORS.
  5. Per Risposte del gateway, scegli Default 4xx, Default 5xx.
  6. Per Access-Control-Allow-Methods, scegli GET e PUT.
  7. Scegli Salva.
  8. Esegui il comando 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
    Nota: sostituisci rest-api-id con l'ID della tua REST API, RESOURCE_id con l'ID della tua risorsa e AWS_REGION con la tua Regione.
  9. Esegui il comando 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
    Nota: sostituisci rest-api-id con l'ID della tua REST API, RESOURCE_id con l'ID della tua risorsa e AWS_REGION con la tua Regione. Affinché Gateway API esegua le richieste di opzioni, devi eseguire i comandi update-integration e update-integration-response uno dopo l'altro.

Distribuisci l'API

Completa i seguenti passaggi:

  1. Nel pannello di navigazione della pagina dell'API scegli Risorse.
  2. Scegli Distribuisci l'API.
  3. Nella finestra Distribuisci l'API, in Fase, scegli *New stage*.
  4. In Nome fase, inserisci v1.
  5. Scegli Implementa.
  6. Nel pannello di navigazione scegli Fasi.
  7. Scegli la fase v1.
  8. Annota l'URL di invocazione visualizzato.

Per ulteriori informazioni, consulta Implementa REST API in Gateway API.

Invoca la REST API per caricare un file di immagine in Amazon S3

Completa i seguenti passaggi:

  1. Aggiungi il nome del bucket e il nome del file dell'oggetto all'URL di invocazione dell'API.
  2. Utilizza il client che preferisci per effettuare una richiesta PUT HTTP. Ad esempio, puoi scaricare e utilizzare Postman. Per ulteriori informazioni, consulta Download Postman (Scarica Postman) sul sito web Postman.
  3. Scegli Corpo, quindi seleziona binario. Quando viene visualizzato il pulsante Seleziona file, seleziona un file locale da caricare.

Di seguito è riportato un esempio di comando curl che puoi eseguire per effettuare una richiesta PUT HTTP per caricare un'immagine o un 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'

Nota: sostituisci abc12345 con l'ID della tua API, testfolder con il tuo bucket S3 e testimage.jpeg con il file locale che carichi.

Se hai incluso */* nell'elenco dei tipi di supporti binari, puoi effettuare una richiesta PUT per caricare il file. Se hai incluso image.jpeg nell'elenco dei tipi di supporti binari, aggiungi l'intestazione Content-Type alla richiesta PUT e impostala su image/jpeg. Poiché il browser web effettua una richiesta GET, puoi visualizzare l'immagine o il PDF in un browser web con lo stesso URL.

Informazioni correlate

Abilitazione del supporto binario tramite la REST API di Gateway API

Abilitazione di CORS su una risorsa tramite la console Gateway API