{"id":1332,"date":"2020-04-17T13:15:22","date_gmt":"2020-04-17T11:15:22","guid":{"rendered":"https:\/\/blog.besharp.it\/come-gestire-un-app-graphql-su-aws-usando-appsync-amplify-e-troposphere\/"},"modified":"2021-03-17T15:14:12","modified_gmt":"2021-03-17T14:14:12","slug":"come-gestire-un-app-graphql-su-aws-usando-appsync-amplify-e-troposphere","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/come-gestire-un-app-graphql-su-aws-usando-appsync-amplify-e-troposphere\/","title":{"rendered":"Come gestire un App GraphQL su AWS usando AppSync Amplify e Troposphere"},"content":{"rendered":"
Al momento il paradigma Serverless<\/strong> \u00e8 uno delle modalit\u00e0 pi\u00f9 diffuse di implementazione di nuove applicazioni sia Web based che Mobile<\/strong>. Diversamente dall’architettura classica in cui il back-end \u00e8 esposto da uno o pi\u00f9 server Web costantemente connessi al database, il back-end di un’applicazione Serverless<\/strong> viene in genere distribuito utilizzando servizi FaaS<\/strong> (Function as a Service<\/strong>) e il database \u00e8 di solito uno dei nuovi database NoSQL gestiti e scalabili, che possono essere interrogati direttamente utilizzando chiamate API HTTPS.\u00a0<\/span><\/p>\n Su Amazon Web Services un’architettura come questa \u00e8 in genere implementata utilizzando AWS Lambda<\/a> Functions (FaaS) e DynamoDB (database NoSQL). Se \u00e8 necessario un database SQL (ad es. per strutture dati complesse e\/o fortemente gerarchiche) DynamoDB pu\u00f2 essere sostituito da Aurora Serverless<\/a>, un database Postgres (e MySQL) compatibile e scalabile automaticamente, completamente gestito da AWS che pu\u00f2 anche essere interrogato tramite chiamate API HTTPS utilizzando il nuovo servizio AWS RDS DataApis<\/a>.<\/span><\/p>\n In una tipica applicazione API REST<\/strong>, le funzioni Lambda sono in genere invocate tramite AWS API Gateway<\/strong> che riceve le richieste https dai client degli utenti, recupera i parametri e li inoltra alle funzioni Lambda che eseguono la logica di business e infine restituiscono una risposta all’API Gateway che pu\u00f2 ulteriormente modificarla e decorarla, prima di rispondere al client. In questa configurazione, l’autenticazione<\/strong> degli utenti viene spesso gestita tramite AWS Cognito che \u00e8 un servizio di registrazione, accesso e controllo degli accessi gestito da AWS. Se si utilizza Cognito, API Gateway pu\u00f2 essere configurato per inoltrare le richieste alle funzioni Lambda<\/strong> solo se sono fornite di un token JWT di Cognito valido nell’header Authorization: la funzione Lambda dovr\u00e0 poi occuparsi di gestire l’autorizzazione dell’utente (questo utente ha il permesso di eseguire questa azione su quella risorsa?) ricavando l\u2019identit\u00e0 dell\u2019utente e\/o i suoi permessi dal token JWT di Cognito.\u00a0<\/span><\/p>\n A volte potrebbe essere utile chiamare l’API Gateway utilizzando l’autenticazione AWS IAM (tramite Cognito Identity Pools) anzich\u00e9 l’autenticazione Cognito di base: in questo modo, le APIs della nostra applicazione saranno protette dallo stesso algoritmo di firma IAM v4 estremamente sicuro utilizzato da AWS per proteggere le proprie API: tutte le chiamate HTTPS ai servizi di AWS (ad es. S3, SQS, ecc.) sono firmate usando questo algoritmo. Inoltre, utilizzando l’associazione tra i gruppi di Cognito e i ruoli IAM, possiamo eseguire diversi tipi di autorizzazione di base direttamente a livello di API Gateway e non verr\u00e0 nemmeno addebitato alcun costo per richieste non autorizzate!<\/span><\/p>\n <\/p>\n