As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Anexando uma fonte de dados em AWS AppSyncAs fontes de dados são recursos em sua AWS conta com os quais o GraphQL APIs pode interagir. AWS AppSync oferece suporte a várias fontes de dados AWS Lambda, como Amazon DynamoDB, bancos de dados relacionais (Amazon Aurora Serverless), Amazon Service e endpoints. OpenSearch HTTP O An AWS AppSync API pode ser configurado para interagir com várias fontes de dados, permitindo agregar dados em um único local. AWS AppSync pode usar AWS recursos existentes da sua conta ou provisionar tabelas do DynamoDB em seu nome a partir de uma definição de esquema.
A seção a seguir mostrará como anexar uma fonte de dados ao seu GraphQLAPI.
Tipos de fontes de dados
Agora que você criou um esquema no AWS AppSync console, você pode anexar uma fonte de dados a ele. Quando você cria inicialmente umaAPI, há a opção de provisionar uma tabela do Amazon DynamoDB durante a criação do esquema predefinido. No entanto, não abordaremos essa opção nesta seção. Você pode ver um exemplo disso na seção Iniciar um esquema.
Em vez disso, analisaremos todos os AWS AppSync suportes de fontes de dados. Há muitos fatores que influenciam a escolha da solução certa para seu aplicativo. As seções abaixo fornecerão contexto adicional para cada fonte de dados. Para obter informações gerais sobre fontes de dados, consulte Data sources.
Amazon DynamoDB
O Amazon DynamoDB é uma das principais soluções AWS de armazenamento para aplicativos escaláveis. O componente principal do DynamoDB é a tabela, que é simplesmente um conjunto de dados. Normalmente, você cria tabelas com base em entidades como Book
ou Author
. As informações de entrada da tabela são armazenadas como itens, que são grupos de campos exclusivos para cada entrada. Um item completo representa uma linha/registro no banco de dados. Por exemplo, um item para uma entrada da Book
pode incluir title
e author
com seus valores. Os campos individuais, como title
e, author
são chamados de atributos, que são semelhantes aos valores das colunas em bancos de dados relacionais.
Como você pode imaginar, as tabelas serão usadas para armazenar dados do seu aplicativo. AWS AppSync permite que você conecte suas tabelas do DynamoDB ao seu GraphQL API para manipular dados. Veja este caso de uso no blog Front-end web and mobile. Esta aplicação permite que os usuários se inscrevam em um aplicativo de mídia social. Os usuários podem participar de grupos e fazer upload de postagens que são transmitidas para outros usuários inscritos no grupo. A aplicação armazena informações de usuários, publicações e grupos de usuários no DynamoDB. O GraphQL API (gerenciado por AWS AppSync) faz interface com a tabela do DynamoDB. Quando um usuário faz uma alteração no sistema que será refletida no front-end, o GraphQL API recupera essas alterações e as transmite para outros usuários em tempo real.
AWS Lambda
O Lambda é um serviço orientado por eventos que cria automaticamente os recursos necessários para executar códigos como resposta a um evento. O Lambda usa funções, que são declarações de grupo contendo o código, as dependências e as configurações para executar um recurso. As funções são executadas automaticamente quando detectam um gatilho, um grupo de atividades que invocam sua função. Um gatilho pode ser algo como um aplicativo fazendo uma API chamada, um AWS serviço em sua conta gerando um recurso etc. Quando acionadas, as funções processarão eventos, que são JSON documentos contendo os dados a serem modificados.
O Lambda é bom para executar códigos sem precisar provisionar os recursos para executá-lo. Veja este caso de uso no blog Front-end web and mobile. Esse caso de uso é um pouco semelhante ao apresentado na seção do DynamoDB. Nesse aplicativo, o GraphQL API é responsável por definir as operações para coisas como adicionar postagens (mutações) e buscar esses dados (consultas). Para implementar a funcionalidade de suas operações (por exemplo, getPost ( id: String ! ) : Post
e getPostsByAuthor ( author: String ! ) : [ Post ]
), eles usam funções do Lambda para processar solicitações de entrada. Na Opção 2: AWS AppSync com o resolvedor Lambda, eles usam o AWS AppSync serviço para manter seu esquema e vincular uma fonte de dados Lambda a uma das operações. Quando a operação é chamada, o Lambda interage com o RDS proxy da Amazon para executar a lógica de negócios no banco de dados.
Amazon RDS
A Amazon RDS permite que você crie e configure rapidamente bancos de dados relacionais. Na AmazonRDS, você criará uma instância de banco de dados genérica que servirá como ambiente de banco de dados isolado na nuvem. Nesse caso, você usará um mecanismo de banco de dados, que é o RDBMS software real (Postgre SQLSQL, My etc.). O serviço elimina grande parte do trabalho de back-end ao fornecer escalabilidade usando AWS infraestrutura, serviços de segurança, como patches e criptografia, e reduz os custos administrativos das implantações.
Veja o mesmo caso de uso da seção do Lambda. Na Opção 3: AWS AppSync com o Amazon RDS Resolver, outra opção apresentada é vincular o API GraphQL diretamente AWS AppSync à AmazonRDS. Usando dados API, eles associam o banco de dados ao GraphQLAPI. Um resolvedor é anexado a um campo (geralmente uma consulta, mutação ou assinatura) e implementa as SQL instruções necessárias para acessar o banco de dados. Quando uma solicitação de chamada do campo é feita pelo cliente, o resolvedor executa as instruções e retorna a resposta.
Amazon EventBridge
Em EventBridge, você criará barramentos de eventos, que são pipelines que recebem eventos de serviços ou aplicativos anexados (a origem do evento) e os processam com base em um conjunto de regras. Um evento é uma mudança de estado em um ambiente de execução, enquanto uma regra é um conjunto de filtros para eventos. Uma regra segue um padrão de evento ou metadados da mudança de estado de um evento (id, região, ARN número da conta, etc.). Quando um evento corresponde ao padrão do evento, EventBridge enviará o evento pelo pipeline até o serviço de destino (destino) e acionará a ação especificada na regra.
EventBridge é bom para rotear operações de mudança de estado para algum outro serviço. Veja este caso de uso no blog Front-end web and mobile. O exemplo mostra uma solução de comércio eletrônico que tem várias equipes mantendo serviços diferentes. Um desses serviços fornece atualizações de pedidos ao cliente em cada etapa da entrega (pedido feito, em andamento, enviado, entregue etc.) no front-end. No entanto, a equipe de front-end que gerencia esse serviço não tem acesso direto aos dados do sistema de pedidos, pois eles são mantidos por uma equipe de back-end separada. O sistema de pedidos da equipe de back-end também é descrito como uma caixa preta, por isso, é difícil coletar informações sobre a forma como eles estruturam os dados. No entanto, a equipe de back-end configurou um sistema que publicou dados de pedidos por meio de um barramento de eventos gerenciado por EventBridge. Para acessar os dados provenientes do barramento de eventos e encaminhá-los para o front-end, a equipe de front-end criou um novo alvo apontando para o GraphQL instalado. API AWS AppSync Eles também criaram uma regra para enviar apenas dados relevantes para a atualização do pedido. Quando uma atualização é feita, os dados do barramento de eventos são enviados para o GraphQLAPI. O esquema API processa os dados e os passa para o front-end.
Nenhuma fonte de dados
Se você não planeja usar uma fonte de dados, pode defini-la como none
. Uma fonte de dados none
, embora ainda seja explicitamente categorizada como fonte de dados, não é um meio de armazenamento. Normalmente, um resolvedor invoca uma ou mais fontes de dados em algum momento para processar a solicitação. No entanto, há situações em que talvez você não precise manipular uma fonte de dados. Definir a fonte de dados como none
vai executar a solicitação, ignorar a etapa de invocação de dados e executar a resposta.
Veja o mesmo caso de uso da EventBridge seção. No esquema, a mutação processa a atualização de status e a envia aos assinantes. Semelhante ao funcionamento dos resolvedores, geralmente há pelo menos uma invocação de fonte de dados. No entanto, os dados nesse cenário já foram enviados automaticamente pelo barramento de eventos. Isso significa que não é necessário passar pela mutação para realizar uma invocação da fonte de dados; o status do pedido pode ser tratado localmente. A mutação é definida como none
, o que funciona como um valor de passagem sem invocação da fonte de dados. O esquema é preenchido com os dados, que são enviados aos assinantes.
OpenSearch
O Amazon OpenSearch Service é um conjunto de ferramentas para implementar pesquisa de texto completo, visualização de dados e registro. Você pode usar esse serviço para consultar os dados estruturados que enviou.
Nesse serviço, você criará instâncias de OpenSearch. Eles são chamados de nós. Em um nó, você adicionará pelo menos um índice. Conceitualmente, os índices são um pouco como tabelas em bancos de dados relacionais. (No entanto, OpenSearch não é ACID compatível, então não deve ser usado dessa forma). Você preencherá seu índice com os dados que você envia para o OpenSearch serviço. Quando seus dados forem carregados, eles serão indexados em um ou mais fragmentos existentes no índice. Um fragmento é como uma partição do seu índice que contém alguns dos seus dados e pode ser consultado separadamente de outros fragmentos. Depois de carregados, seus dados serão estruturados como JSON arquivos chamados documentos. Em seguida, você pode consultar o nó em busca de dados no documento.
HTTPendpoints
Você pode usar HTTP endpoints como fontes de dados. AWS AppSync pode enviar solicitações aos endpoints com as informações relevantes, como parâmetros e carga útil. A HTTP resposta será exposta ao resolvedor, que retornará a resposta final após concluir suas operações.
Adicionar uma fonte de dados
Se você criou uma fonte de dados, poderá vinculá-la ao AWS AppSync serviço e, mais especificamente, aoAPI.
- Console
-
-
Faça login no AWS Management Console e abra o AppSyncconsole.
-
Escolha o seu API no painel.
-
Na barra lateral, escolha Fontes de dados.
-
Escolha Criar fonte de dados.
-
Dê um nome à sua fonte de dados. Você também pode incluir uma descrição, mas isso é opcional.
-
Selecione o tipo de fonte de dados.
-
Para o DynamoDB, você precisará escolher sua Região e, em seguida, a tabela na Região. Você pode definir regras de interação com sua tabela criando um novo perfil genérico ou importando um perfil existente. Você pode habilitar o versionamento, que pode criar automaticamente versões de dados para cada solicitação quando vários clientes estão tentando atualizar os dados ao mesmo tempo. O versionamento é usado para manter diversas variantes de dados para fins de detecção e resolução de conflitos. Você também pode ativar a geração automática de esquemas, que usa sua fonte de dados e gera algumas das CRUD Query
operações necessárias para acessá-la em seu esquema. List
Para isso OpenSearch, você terá que escolher sua região e, em seguida, o domínio (cluster) na região. Você pode definir regras de interação com seu domínio criando uma nova função genérica ou importando uma função existente.
Para o Lambda, você terá que escolher sua região e, em seguida, a função ARN Lambda na região. Você pode definir regras de interação com sua função do Lambda criando um novo perfil da tabela genérica ou importando um perfil existente.
PoisHTTP, você precisará inserir seu HTTP endpoint.
Pois EventBridge, você terá que escolher sua região e, em seguida, o ônibus do evento na região. Você pode definir regras de interação com seu barramento de eventos, criando uma nova função genérica ou importando uma função existente.
Para issoRDS, você terá que escolher sua região, depois o armazenamento secreto (nome de usuário e senha), nome do banco de dados e esquema.
Para nenhum deles, você adicionará uma fonte de dados sem uma fonte de dados real. Isso serve para lidar com resolvedores localmente, e não por meio de uma fonte de dados real.
Se você estiver importando funções existentes, elas precisarão de uma política de confiança. Para obter mais informações, consulte a política de IAM confiança.
-
Escolha Criar.
Como alternativa, se você estiver criando uma fonte de dados do DynamoDB, acesse a página Esquema no console, escolha Criar recursos na parte superior da página e preencha um modelo predefinido para converter em uma tabela. Nessa opção, você vai preencher ou importar o tipo de base, configurar os dados básicos da tabela, incluindo a chave de partição, além de analisar as alterações do esquema.
- CLI
-
-
Crie um objeto da fonte de dados executando o comando create-data-source
.
Você precisará inserir alguns parâmetros para esse comando específico:
-
O api-id
do seuAPI.
-
O name
da tabela.
-
O type
da fonte de dados. Dependendo do tipo de fonte de dados escolhido, talvez seja necessário inserir um -config
e uma tag service-role-arn
.
Veja um exemplo de comando:
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
-
Antes de usar oCDK, recomendamos revisar a CDK documentação oficial e AWS AppSync a CDKreferência.
As etapas listadas abaixo mostram apenas um exemplo geral do trecho usado para adicionar um recurso específico. Isso não é uma solução funcional para seu código de produção. Também presumimos que você já tenha uma aplicação em funcionamento.
Para adicionar sua fonte de dados específica, você precisará incluir a estrutura ao seu arquivo de pilha. Uma lista dos tipos de fontes de dados pode ser encontrada aqui:
-
Em geral, talvez seja necessário adicionar a diretiva de importação ao serviço que você está usando. Por exemplo, estas são as possíveis formas:
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'
Por exemplo, veja como você pode importar os serviços AWS AppSync e do DynamoDB:
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
-
Alguns serviços, por exemplo, RDS exigem alguma configuração adicional no arquivo de pilha antes de criar a fonte de dados (por exemplo, VPC criação, funções e credenciais de acesso). Consulte os exemplos nas CDK páginas relevantes para obter mais informações.
-
Para a maioria das fontes de dados, especialmente AWS serviços, você criará uma nova instância da fonte de dados em seu arquivo de pilha. Normalmente, isso será exibido da seguinte forma:
const add_data_source_func
= new service_scope
.resource_name
(scope: Construct, id: string, props: data_source_props);
Por exemplo, aqui está um exemplo de tabela do 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,
});
A maioria das fontes de dados terá pelo menos um suporte obrigatório (será indicado sem um símbolo ?
). Consulte a CDK documentação para ver quais adereços são necessários.
-
Em seguida, você precisa vincular a fonte de dados ao GraphQLAPI. O método recomendado é adicioná-la ao criar uma função para o resolvedor de pipeline. Por exemplo, o trecho abaixo é uma função que verifica todos os elementos em uma tabela do 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,
});
Nas dataSource
props, você pode chamar o API GraphQL add_api
() e usar um de seus métodos integrados addDynamoDbDataSource
() para fazer a associação entre a tabela e o GraphQL. API Os argumentos são o nome desse link que existirá no AWS AppSync console (data_source_name_in_console
neste exemplo) e o método da tabela (add_ddb_table
). Mais informações sobre esse tópico serão reveladas na próxima seção, quando você começar a criar resolvedores.
Existem métodos alternativos para vincular uma fonte de dados. Tecnicamente, você pode adicionar itens da api
à lista de propriedades na função de tabela. Por exemplo, aqui está o trecho da etapa 3, mas com um api
adereço contendo um GraphQL: API
const add_api = new appsync.GraphqlApi(this, 'API_ID', {
...
});
const add_ddb_table = new dynamodb.Table(this, 'Table_ID', {
...
api: add_api
});
Como alternativa, você pode chamar a estrutura do GraphqlApi
separadamente:
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);
Recomendamos criar a associação somente nas propriedades da função. Caso contrário, você precisará vincular sua função de resolução à fonte de dados manualmente no AWS AppSync console (se quiser continuar usando o valor do consoledata_source_name_in_console
) ou criar uma associação separada na função com outro nome, comodata_source_name_in_console_2
. Isso se deve às limitações na forma como as propriedades processam as informações.
Você precisará reimplantar a aplicação para conferir as alterações.
IAMpolítica de confiança
Se você estiver usando uma IAM função existente para sua fonte de dados, precisará conceder a essa função as permissões apropriadas para realizar operações em seu AWS recurso, como PutItem
em uma tabela do Amazon DynamoDB. Você também precisa modificar a política de confiança dessa função para permitir seu uso AWS AppSync para acesso a recursos, conforme mostrado no exemplo de política a seguir:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Você também pode adicionar condições à sua política de confiança para limitar o acesso à fonte de dados, conforme desejado. Atualmente, as chaves SourceArn
e SourceAccount
podem ser usadas nessas condições. Por exemplo, a política a seguir limita o acesso à sua fonte de dados na conta 123456789012
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
]
}
Como alternativa, você pode limitar o acesso a uma fonte de dados a uma específicaAPI, comoabcdefghijklmnopq
, usando a seguinte política:
{
"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"
}
}
}
]
}
Você pode limitar o acesso a todos AWS AppSync APIs de uma região específica, por exemplous-east-1
, usando a seguinte política:
{
"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/*"
}
}
}
]
}
Na próxima seção (Configurar os resolvedores), vamos adicionar nossa lógica de negócios do resolvedor e anexá-la aos campos em nosso esquema para processar os dados em nossa fonte de dados.
Para obter mais informações sobre a configuração da política de função, consulte Modificar uma função no Guia do IAM usuário.
Para obter mais informações sobre o acesso entre contas de AWS Lambda resolvedores para AWS AppSync, consulte Criação de resolvedores entre contas AWS Lambda para. AWS AppSync