Skip to content

gioele-ferrari/lambda-api-storage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Lambda API Storage

Questo progetto ha lo scopo di esplorare e sperimentare i servizi API Gateway, AWS Lambda e Amazon S3 per creare una semplice architettura di API REST serverless che consente di caricare e scaricare file da un bucket S3.
Inoltre, è stato necessario configurare correttamente i ruoli IAM, assegnando permessi mirati alle funzioni Lambda.

API Diagram


Fasi di sviluppo

1. Creazione delle funzioni Lambda

LambdaUploadApi

  • Nome: LambdaUploadApi
  • Linguaggio: Python 3.13
  • IAM Role: LambdaUploadApiRole
  • Policy assegnata: AmazonS3FullAccess (inizialmente read-only, poi estesa)

LambdaDownloadApi

  • Nome: LambdaDownloadApi
  • Linguaggio: Python 3.13
  • IAM Role: LambdaDownloadApiRole
  • Policy creata manualmente con permesso di lettura su S3

2. Definizione delle Policy IAM

Policy per l’upload

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::s3-bucket-gioele/*"
    }
  ]
}
  • Nome: LambdaUploadApiPolicy
  • Assegnata a: LambdaUploadApiRole

Policy per il download

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::s3-bucket-gioele/*"
    }
  ]
}
  • Nome: LambdaDownloadApiPolicy
  • Assegnata a: LambdaDownloadApiRole

3. Creazione del bucket S3

  • Nome bucket: s3-bucket-gioele
  • Nessuna configurazione avanzata, permessi gestiti da IAM policies.

4. Implementazione e test delle funzioni Lambda

Test LambdaUploadApi

Payload JSON di esempio:

{
  "body": "{\"filename\": \"test.txt\", \"content\": \"VGhpcyBpcyBhIHRlc3QgZmlsZSBmb3IgU0Mu\"}"
}

Test LambdaDownloadApi

Payload JSON di esempio:

{
  "queryStringParameters": {
    "filename": "test.txt"
  }
}

5. Configurazione di API Gateway

  • Tipo API: HTTP
  • Nome: API Gateway Main
  • Due route configurate:

/upload

  • Metodo: PUT
  • Integrazione: LambdaUploadApi

/download

  • Metodo: GET
  • Integrazione: LambdaDownloadApi

6. Esecuzione degli endpoint

📥 Endpoint di upload (PUT /upload)

Comando curl per test:

curl -X PUT "https://mio-indirizzo-del-gateway/prod/upload" \
  -H "Content-Type: application/json" \
  -d '{"filename": "prova.txt", "content": "VGhpcyBpcyBhIHRlc3Q="}'

📤 Endpoint di download (GET /download)

URL con parametro query:

https://mio-indirizzo-del-gateway/prod/download?filename=prova.txt

Conclusioni

Questo progetto ha mostrato come costruire un’API REST completa utilizzando AWS in modalità serverless, senza necessità di server EC2.
È stata un’ottima occasione per comprendere il funzionamento delle Lambda functions, del controllo degli accessi IAM, della gestione dei bucket S3 e della configurazione di API Gateway.

Tutti i componenti utilizzati rientrano nel Free Tier di AWS.

About

API Gateway in AWS with EC2 and Lambda

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages