Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Collegamento di un'origine dati in AWS AppSyncLe fonti di dati sono risorse del tuo AWS account con cui le API GraphQL possono interagire. AWS AppSync supporta una moltitudine di fonti di dati come Amazon DynamoDB AWS Lambda, database relazionali (Amazon Aurora Serverless), Amazon Service ed endpoint HTTP. OpenSearch Un' AWS AppSync API può essere configurata per interagire con più fonti di dati, consentendoti di aggregare i dati in un'unica posizione. AWS AppSync puoi utilizzare AWS le risorse esistenti del tuo account o eseguire il provisioning di tabelle DynamoDB per tuo conto a partire da una definizione di schema.
La sezione seguente ti mostrerà come collegare un'origine dati alla tua API GraphQL.
Tipi di fonti di dati
Ora che hai creato uno schema nella AWS AppSync console, puoi allegare un'origine dati. Quando crei inizialmente un'API, c'è un'opzione per eseguire il provisioning di una tabella Amazon DynamoDB durante la creazione dello schema predefinito. Tuttavia, non tratteremo questa opzione in questa sezione. Puoi vederne un esempio nella sezione Avvio di uno schema.
Esamineremo invece tutte le fonti di dati AWS AppSync supportate. Sono molti i fattori che determinano la scelta della soluzione giusta per la tua applicazione. Le sezioni seguenti forniranno un contesto aggiuntivo per ciascuna origine dati. Per informazioni generali sulle origini dati, consulta Origini dati.
Amazon DynamoDB
Amazon DynamoDB è una delle AWS principali soluzioni di storage per applicazioni scalabili. Il componente principale di DynamoDB è la tabella, che è semplicemente una raccolta di dati. In genere creerai tabelle basate su entità come Book o. Author Le informazioni sulle voci della tabella vengono archiviate come elementi, ovvero gruppi di campi univoci per ogni voce. Un elemento completo rappresenta un elemento row/record nel database. Ad esempio, un elemento per una Book voce potrebbe includere title e author insieme ai relativi valori. I singoli campi come title e author sono denominati attributi, simili ai valori delle colonne nei database relazionali.
Come puoi immaginare, le tabelle verranno utilizzate per archiviare i dati dell'applicazione. AWS AppSync consente di collegare le tabelle DynamoDB all'API GraphQL per manipolare i dati. Prendete questo caso d'uso dal blog Front-end web e mobile. Questa applicazione consente agli utenti di iscriversi a un'app di social media. Gli utenti possono unirsi a gruppi e caricare post che vengono trasmessi ad altri utenti iscritti al gruppo. La loro applicazione memorizza le informazioni su utenti, post e gruppi di utenti in DynamoDB. L'API GraphQL (gestita da AWS AppSync) si interfaccia con la tabella DynamoDB. Quando un utente apporta una modifica al sistema che si rifletterà sul front-end, l'API GraphQL recupera queste modifiche e le trasmette ad altri utenti in tempo reale.
AWS Lambda
Lambda è un servizio basato sugli eventi che crea automaticamente le risorse necessarie per eseguire il codice in risposta a un evento. Lambda utilizza le funzioni, che sono istruzioni di gruppo contenenti il codice, le dipendenze e le configurazioni per l'esecuzione di una risorsa. Le funzioni vengono eseguite automaticamente quando rilevano un trigger, un gruppo di attività che richiamano la funzione. Un trigger può essere qualcosa come un'applicazione che effettua una chiamata API, un AWS servizio nel tuo account che attiva una risorsa, ecc. Una volta attivate, le funzioni elaboreranno gli eventi, che sono documenti JSON contenenti i dati da modificare.
Lambda è utile per eseguire codice senza dover fornire le risorse per eseguirlo. Prendi questo caso d'uso dal blog Front-end web e mobile. Questo caso d'uso è un po' simile a quello illustrato nella sezione DynamoDB. In questa applicazione, l'API GraphQL è responsabile della definizione delle operazioni per cose come l'aggiunta di post (mutazioni) e il recupero di tali dati (query). Per implementare la funzionalità delle loro operazioni (ad esempio,getPostsByAuthor ( author: String ! ) : [ Post ])getPost ( id: String ! ) : Post, utilizzano le funzioni Lambda per elaborare le richieste in entrata. Nell'opzione 2: AWS AppSync con il resolver Lambda, utilizzano il AWS AppSync servizio per mantenere il loro schema e collegare un'origine dati Lambda a una delle operazioni. Quando viene chiamata l'operazione, Lambda si interfaccia con il proxy Amazon RDS per eseguire la logica aziendale sul database.
Amazon RDS
Amazon RDS consente di creare e configurare rapidamente database relazionali. In Amazon RDS, creerai un'istanza di database generica che fungerà da ambiente di database isolato nel cloud. In questo caso, utilizzerai un motore DB, che è il vero software RDBMS (PostgreSQL, MySQL, ecc.). Il servizio alleggerisce gran parte del lavoro di backend fornendo scalabilità utilizzando l'infrastruttura, servizi di sicurezza come patch e AWS crittografia e riducendo i costi amministrativi per le implementazioni.
Prendiamo lo stesso caso d'uso dalla sezione Lambda. Nella sezione Opzione 3: AWS AppSync con il resolver Amazon RDS, un'altra opzione presentata è il collegamento diretto dell'API GraphQL ad Amazon RDS. AWS AppSync Utilizzando un'API di dati, associano il database all'API GraphQL. Un resolver è collegato a un campo (di solito una query, una mutazione o una sottoscrizione) e implementa le istruzioni SQL necessarie per accedere al database. Quando il client effettua una richiesta che chiama il campo, il resolver esegue le istruzioni e restituisce la risposta.
Amazon EventBridge
In EventBridge, creerai bus di eventi, che sono pipeline che ricevono eventi dai servizi o dalle applicazioni che alleghi (l'origine dell'evento) e li elaborano in base a una serie di regole. Un evento è un cambiamento di stato in un ambiente di esecuzione, mentre una regola è un insieme di filtri per gli eventi. Una regola segue uno schema di evento o i metadati della modifica dello stato di un evento (id, regione, numero di conto, ARN (s), ecc.). Quando un evento corrisponde allo schema dell'evento, EventBridge invia l'evento attraverso la pipeline al servizio di destinazione (target) e attiva l'azione specificata nella regola.
EventBridge è utile per indirizzare le operazioni di modifica dello stato a qualche altro servizio. Prendete questo caso d'uso dal blog Front-end web e mobile. L'esempio illustra una soluzione di e-commerce con diversi team che gestiscono servizi diversi. Uno di questi servizi fornisce al cliente gli aggiornamenti degli ordini in ogni fase della consegna (ordine effettuato, in corso, spedito, consegnato, ecc.) sul front-end. Tuttavia, il team di front-end che gestisce questo servizio non ha accesso diretto ai dati del sistema di ordinazione, poiché sono gestiti da un team di backend separato. Il sistema di ordinazione del team di backend è anche descritto come una scatola nera, quindi è difficile raccogliere informazioni sul modo in cui strutturano i propri dati. Tuttavia, il team di backend ha creato un sistema che pubblicava i dati degli ordini tramite un bus di eventi gestito da. EventBridge Per accedere ai dati provenienti dal bus degli eventi e indirizzarli al front-end, il team di front-end ha creato un nuovo target che puntava alla propria API GraphQL inserita. AWS AppSync Hanno anche creato una regola per inviare solo i dati rilevanti per l'aggiornamento dell'ordine. Quando viene effettuato un aggiornamento, i dati del bus degli eventi vengono inviati all'API GraphQL. Lo schema nell'API elabora i dati, quindi li passa al front-end.
Nessuna fonte di dati
Se non hai intenzione di utilizzare un'origine dati, puoi impostarla sunone. Un'origine none dati, sebbene sia ancora esplicitamente classificata come origine dati, non è un supporto di memorizzazione. In genere, un resolver richiama una o più origini dati a un certo punto per elaborare la richiesta. Tuttavia, ci sono situazioni in cui potrebbe non essere necessario manipolare un'origine dati. Se si imposta l'origine dati su, none verrà eseguita la richiesta, si salterà la fase di richiamo dei dati, quindi si eseguirà la risposta.
Prendi lo stesso caso https://aws.amazon.com/blogs/mobile/appsync-eventbridge/ d'uso della sezione. EventBridge Nello schema, la mutazione elabora l'aggiornamento dello stato, quindi lo invia agli abbonati. Ricordando come funzionano i resolver, di solito c'è almeno una chiamata alla fonte di dati. Tuttavia, i dati in questo scenario erano già stati inviati automaticamente dal bus degli eventi. Ciò significa che non è necessario che la mutazione esegua una chiamata all'origine dati; lo stato dell'ordine può essere semplicemente gestito localmente. La mutazione è impostata sunone, che funge da valore pass-through senza invocazione dell'origine dati. Lo schema viene quindi popolato con i dati, che vengono inviati agli abbonati.
OpenSearch
Amazon OpenSearch Service è una suite di strumenti per implementare la ricerca full-text, la visualizzazione dei dati e la registrazione. Puoi utilizzare questo servizio per interrogare i dati strutturati che hai caricato.
In questo servizio, creerai istanze di OpenSearch. Questi sono chiamati nodi. In un nodo, aggiungerai almeno un indice. Gli indici concettualmente sono un po' come le tabelle nei database relazionali. (Tuttavia, OpenSearch non è conforme all'ACID, quindi non dovrebbe essere usato in questo modo). Compilerai il tuo indice con i dati che carichi sul servizio. OpenSearch Quando i dati vengono caricati, verranno indicizzati in uno o più frammenti presenti nell'indice. Un frammento è come una partizione dell'indice che contiene alcuni dati e può essere interrogato separatamente dagli altri frammenti. Una volta caricati, i dati saranno strutturati come file JSON denominati documenti. È quindi possibile interrogare il nodo per i dati contenuti nel documento.
Endpoint HTTP
È possibile utilizzare gli endpoint HTTP come origini dati. AWS AppSync puoi inviare richieste agli endpoint con le informazioni pertinenti come parametri e payload. La risposta HTTP verrà esposta al resolver, che restituirà la risposta finale al termine delle sue operazioni.
Aggiungere una fonte di dati
Se hai creato un'origine dati, puoi collegarla al AWS AppSync servizio e, più specificamente, all'API.
- Console
-
-
Accedi Console di gestione AWS e apri la AppSync console.
-
Scegli la tua API nella dashboard.
-
Nella barra laterale, scegli Origini dati.
-
Seleziona Create data source (Crea origine dati).
-
Assegna un nome alla tua fonte di dati. Puoi anche dargli una descrizione, ma è facoltativa.
-
Scegli il tipo di origine dati.
-
Per DynamoDB, dovrai scegliere la tua regione, quindi la tabella nella regione. Puoi dettare le regole di interazione con la tua tabella scegliendo di creare un nuovo ruolo generico per la tabella o importando un ruolo esistente per la tabella. Puoi abilitare il controllo delle versioni, che può creare automaticamente versioni dei dati per ogni richiesta quando più client tentano di aggiornare i dati contemporaneamente. Il controllo delle versioni viene utilizzato per conservare e mantenere più varianti di dati per scopi di rilevamento e risoluzione dei conflitti. Puoi anche abilitare la generazione automatica dello schema, che utilizza l'origine dei dati e genera parte del CRUD e Query le operazioni necessarie per accedervi nello schema. List
Perché OpenSearch, dovrai scegliere la tua regione, quindi il dominio (cluster) nella regione. Puoi dettare le regole di interazione con il tuo dominio scegliendo di creare un nuovo ruolo generico per la tabella o importando un ruolo esistente per la tabella.
Per Lambda, dovrai scegliere la tua regione, quindi l'ARN della funzione Lambda nella regione. Puoi dettare le regole di interazione con la tua funzione Lambda scegliendo di creare un nuovo ruolo generico per la tabella o importando un ruolo esistente per la tabella.
Per HTTP, dovrai inserire il tuo endpoint HTTP.
Perché EventBridge, dovrai scegliere la tua regione, quindi il bus degli eventi nella regione. Puoi dettare le regole di interazione con il tuo bus di eventi scegliendo di creare un nuovo ruolo generico per la tabella o importando un ruolo esistente per la tabella.
Per RDS, dovrai scegliere la tua regione, quindi l'archivio segreto (nome utente e password), il nome del database e lo schema.
In caso contrario, aggiungerai un'origine dati senza un'origine dati effettiva. Questo serve per gestire i resolver localmente anziché tramite un'origine dati effettiva.
Se stai importando ruoli esistenti, hanno bisogno di una politica di fiducia. Per ulteriori informazioni, consulta la policy di fiducia IAM.
-
Scegli Crea.
In alternativa, se stai creando un'origine dati DynamoDB, puoi andare alla pagina Schema nella console, scegliere Create Resources nella parte superiore della pagina, quindi compilare un modello predefinito da convertire in una tabella. In questa opzione, compilerai o importerai il tipo di base, configurerai i dati di base della tabella, inclusa la chiave di partizione, ed esaminerai le modifiche allo schema.
- CLI
-
-
Crea la tua fonte di dati eseguendo il create-data-source comando.
Dovrai inserire alcuni parametri per questo particolare comando:
-
La api-id tua API.
-
Quella name del tuo tavolo.
-
La fonte type dei dati. A seconda del tipo di origine dati scelto, potrebbe essere necessario inserire un tag service-role-arn e un -config tag.
Un comando di esempio può essere simile al seguente:
aws appsync create-data-source --api-id abcdefghijklmnopqrstuvwxyz --name data_source_name --type data_source_type --service-role-arn arn:aws:iam::107289374856:role/role_name --[data_source_type]-config {params}
- CDK
-
Prima di utilizzare il CDK, ti consigliamo di consultare la documentazione ufficiale del CDK insieme AWS AppSync ai riferimenti al CDK.
I passaggi elencati di seguito mostreranno solo un esempio generale dello snippet utilizzato per aggiungere una particolare risorsa. Questa non è pensata per essere una soluzione funzionante nel codice di produzione. Supponiamo inoltre che tu abbia già un'app funzionante.
Per aggiungere la tua particolare fonte di dati, dovrai aggiungere il costrutto al tuo file stack. Un elenco di tipi di origini dati è disponibile qui:
-
In generale, potrebbe essere necessario aggiungere la direttiva di importazione al servizio che stai utilizzando. Ad esempio, può seguire i seguenti moduli:
import * as x from 'x'; # import wildcard as the 'x' keyword from 'x-service'
import {a, b, ...} from 'c'; # import {specific constructs} from 'c-service'
Ad esempio, ecco come puoi importare i servizi AWS AppSync e DynamoDB:
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
-
Alcuni servizi come RDS richiedono alcune impostazioni aggiuntive nel file stack prima di creare l'origine dati (ad esempio, creazione di VPC, ruoli e credenziali di accesso). Consulta gli esempi nelle pagine CDK pertinenti per ulteriori informazioni.
-
Per la maggior parte delle fonti di dati, in particolare per AWS i servizi, creerai una nuova istanza dell'origine dati nel tuo file stack. In genere, sarà simile al seguente:
const add_data_source_func = new service_scope.resource_name(scope: Construct, id: string, props: data_source_props);
Ad esempio, ecco un esempio di tabella Amazon DynamoDB:
const add_ddb_table = new dynamodb.Table(this, 'Table_ID', {
partitionKey: {
name: 'id',
type: dynamodb.AttributeType.STRING,
},
sortKey: {
name: 'id',
type: dynamodb.AttributeType.STRING,
},
tableClass: dynamodb.TableClass.STANDARD,
});
La maggior parte delle fonti di dati avrà almeno un prop obbligatorio (sarà indicato senza un simbolo). ? Consulta la documentazione del CDK per vedere quali oggetti di scena sono necessari.
-
Successivamente, è necessario collegare l'origine dati all'API GraphQL. Il metodo consigliato è aggiungerlo quando si crea una funzione per il risolutore di pipeline. Ad esempio, lo snippet seguente è una funzione che analizza tutti gli elementi di una tabella DynamoDB:
const add_func = new appsync.AppsyncFunction(this, 'func_ID', {
name: 'func_name_in_console',
add_api,
dataSource: add_api.addDynamoDbDataSource('data_source_name_in_console', add_ddb_table),
code: appsync.Code.fromInline(`
export function request(ctx) {
return { operation: 'Scan' };
}
export function response(ctx) {
return ctx.result.items;
}
`),
runtime: appsync.FunctionRuntime.JS_1_0_0,
});
Negli oggetti di dataSource scena, puoi chiamare l'API GraphQL (add_api) e utilizzare uno dei suoi metodi integrati (addDynamoDbDataSource) per creare l'associazione tra la tabella e l'API GraphQL. Gli argomenti sono il nome di questo collegamento che esisterà nella AWS AppSync console (data_source_name_in_consolein questo esempio) e il metodo table (). add_ddb_table Ulteriori informazioni su questo argomento verranno rivelate nella prossima sezione quando inizierai a creare risolutori.
Esistono metodi alternativi per collegare un'origine dati. Tecnicamente potresti aggiungerli api all'elenco degli oggetti di scena nella funzione table. Ad esempio, ecco lo snippet del passaggio 3 ma con un oggetto di api scena contenente un'API GraphQL:
const add_api = new appsync.GraphqlApi(this, 'API_ID', {
...
});
const add_ddb_table = new dynamodb.Table(this, 'Table_ID', {
...
api: add_api
});
In alternativa, puoi chiamare il costrutto separatamente: GraphqlApi
const add_api = new appsync.GraphqlApi(this, 'API_ID', {
...
});
const add_ddb_table = new dynamodb.Table(this, 'Table_ID', {
...
});
const link_data_source = add_api.addDynamoDbDataSource('data_source_name_in_console', add_ddb_table);
Consigliamo di creare l'associazione solo negli oggetti di scena della funzione. Altrimenti, dovrai collegare manualmente la tua funzione resolver all'origine dati nella AWS AppSync console (se vuoi continuare a utilizzare il valore della consoledata_source_name_in_console) o creare un'associazione separata nella funzione con un altro nome come. data_source_name_in_console_2 Ciò è dovuto alle limitazioni nel modo in cui gli oggetti di scena elaborano le informazioni.
Dovrai ridistribuire l'app per visualizzare le modifiche.
Politica di fiducia IAM
Se utilizzi un ruolo IAM esistente per la tua origine dati, devi concedere a quel ruolo le autorizzazioni appropriate per eseguire operazioni sulla tua AWS risorsa, ad esempio PutItem su una tabella Amazon DynamoDB. È inoltre necessario modificare la politica di fiducia su quel ruolo per consentirne AWS AppSync l'utilizzo per l'accesso alle risorse, come mostrato nel seguente esempio di policy:
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Puoi anche aggiungere condizioni alla tua politica di fiducia per limitare l'accesso all'origine dati, se lo desideri. Attualmente, SourceArn e SourceAccount le chiavi possono essere utilizzate in queste condizioni. Ad esempio, la seguente politica limita l'accesso all'origine dati all'account123456789012:
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
]
}
In alternativa, puoi limitare l'accesso a un'origine dati a un'API specificaabcdefghijklmnopq, ad esempio utilizzando la seguente politica:
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:appsync:us-west-2:123456789012:apis/abcdefghijklmnopq"
}
}
}
]
}
Puoi limitare l'accesso a tutte le AWS AppSync API di una regione specifica, ad esempio us-east-1 utilizzando la seguente politica:
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:appsync:us-east-1:123456789012:apis/*"
}
}
}
]
}
Nella prossima sezione (Configurazione dei risolutori), aggiungeremo la nostra business logic del resolver e la allegheremo ai campi del nostro schema per elaborare i dati nella nostra fonte di dati.
Per ulteriori informazioni sulla configurazione delle policy relative ai ruoli, consulta Modifying a role nella IAM User Guide.
Per ulteriori informazioni sull'accesso tra account ai resolver per AWS AppSync, vedi AWS Lambda Creazione di resolver tra account per. AWS LambdaAWS AppSync