本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 2:附加資料來源資料來源是您的資源AWS圖形 SQL API 可以與之互動的帳戶。AWSAppSync支持多種數據源,例如AWS Lambda, 亞馬遜動態資料庫, 關聯式資料庫 (亞馬遜極光無伺服器), 亞馬遜OpenSearch服務和 HTTP 端點。一個AWS AppSyncAPI 可設定為與多個資料來源互動,讓您能夠在單一位置彙總資料。AWSAppSync可以使用現有的AWS您帳戶中的資源,或代表您從結構描述定義佈建 DynamoDB 表格。
以下部分將向您展示如何將數據源附加到 GraphQL API。
資料來源的類型
現在,您已經在AWS AppSync控制台中,您可以將數據源附加到它。當您一開始建立 API 時,可以選擇在建立預先定義的結構描述期間佈建 Amazon DynamoDB 表格。但是,我們將不會在本節中介紹該選項。你可以看到這個例子啟動結構描述部分。
相反,我們將查看所有數據源AWS AppSync支持。為您的應用選擇正確的解決方案有很多因素。以下各節將為每個資料來源提供一些額外的上下文。如需有關資料來源的一般資訊,請參閱資料來源。
Amazon DynamoDB
亞馬遜是其中之一AWS'可擴展應用的主要存儲解決方案。動態支援的核心元件是表,這只是一個數據的集合。您通常會根據實體創建表Book
或者Author
。表格項目資訊儲存為項目,是每個項目唯一的欄位群組。完整項目代表資料庫中的列/記錄。例如,對於一個項目Book
項目可能包括title
和author
連同它們的價值觀。各個字段title
和author
被稱為屬性,類似於關聯式資料庫中的欄值。
您可以猜到,表將用於存儲應用程序中的數據。AWS AppSync可讓您將 DynamoDB 資料表連結至您的圖形 SQL API 來操作資料。拿著這個使用案例從前端 Web 和移動博客。該應用程序允許用戶註冊社交媒體應用程序。使用者可以加入群組並上傳廣播給訂閱群組的其他使用者的貼文。其應用程式會將使用者、貼文和使用者群組資訊儲存在 DynamoDB 中。圖形 SQL 應用程式介面 (由管理AWS AppSync) 與動態資料表的介面。當使用者在將反映在前端的系統中進行變更時,GraphQL API 會擷取這些變更,並即時將其廣播給其他使用者。
AWS Lambda
Lambda 是一項事件驅動型服務,可自動建置必要的資源,以便執行程式碼作為回應事件。拉姆達使用功能,這是包含用於執行資源的程式碼、相依性和組態的群組陳述式。函數在偵測到時自動執行觸發器,一組調用您的函數的活動。觸發器可以是類似於進行 API 調用的應用程序,AWS您帳戶中的服務旋轉資源等 觸發時,函數將處理事件,這是包含要修改之資料的 JSON 文件。
Lambda 非常適合執行程式碼,而不必佈建資源來執行程式碼。拿著這個使用案例從前端 Web 和移動博客。此使用案例有點類似於 DynamoDB 一節中展示的使用案例。在此應用程序中,GraphQL API 負責定義諸如添加帖子(突變)和獲取數據(查詢)之類的操作。為了實現其操作的功能(例如,getPost ( id: String ! ) : Post
,getPostsByAuthor ( author: String ! ) : [ Post ]
),他們使用 Lambda 函數來處理輸入請求。下選項二:AWS AppSync使用拉姆達解析器,他們使用AWS AppSync維護其結構描述並將 Lambda 資料來源連結至其中一項作業的服務。呼叫作業時,Lambda 會與 Amazon RDS 代理進行介面,以便在資料庫上執行商業邏輯。
Amazon RDS
Amazon RDS 可讓您快速建置和設定關聯式資料庫。在亞馬遜 RDS,你會創建一個通用資料庫實例這將作為雲中隔離的數據庫環境。在這種情況下,您將使用資料庫引擎這是實際的數據庫管理系統軟件(PostgreSQL,MySQL 等)。該服務通過使用提供可擴展性來卸載大部分後端工作AWS'基礎架構、修補和加密等安全服務,以及降低部署的管理成本。
採取相同的使用案例從拉姆達部分。下選項三:AWS AppSync與亞馬遜 RDS 解析器,提供的另一個選項是將 GraphQL API 連接到AWS AppSync直接到亞馬遜 RDS。使用資料 API,它們會將資料庫與 GraphQL API 建立關聯。解析器附加到字段(通常是查詢,突變或訂閱),並實現訪問數據庫所需的 SQL 語句。當調用字段的請求是由客戶端提出,解析器執行語句並返回響應。
Amazon EventBridge
在EventBridge,您將創建活動巴士,它們是從您附加的服務或應用程式接收事件的管道 (事件來源) 並根據一組規則處理它們。一個事件是執行環境中的某些狀態變化,而 a規則是一組用於事件的過濾器。規則遵循事件模式,或事件狀態變更的中繼資料 (ID、地區、帳號、ARN 等)。當事件與事件模式匹配時,EventBridge將通過管道將事件發送到目的地服務(目標) 並觸發規則中指定的處理行動。
EventBridge對於將狀態更改操作路由到其他服務有好處。拿著這個使用案例從前端 Web 和移動博客。這個例子描述了一個電子商務解決方案,該解決方案具有多個團隊維護 其中一項服務會在前端的每個交貨步驟 (下訂單、進行中、出貨、交付等),為客戶提供訂單更新。但是,管理此服務的前端團隊無法直接存取訂購系統資料,因為這些資料是由個別的後端團隊所維護的。後端團隊的訂購系統也被描述為黑匣子,因此很難收集有關他們構建數據方式的信息。但是,後端團隊確實設置了一個系統,該系統通過管理的事件總線發布訂單數據EventBridge。為了訪問來自事件總線的數據並將其路由到前端,前端團隊創建了一個指向其 GraphQL API 的新目標AWS AppSync。他們也建立了一個規則,只傳送與訂單更新相關的資料。進行更新時,事件匯流排中的資料會傳送至 GraphQL API。API 中的結構描述會處理資料,然後將其傳遞至前端。
無資料來源
如果您不打算使用資料來源,可以將其設定為none
。一個none
資料來源雖然仍明確分類為資料來源,但不是儲存媒體。通常,解析器會在某個時候調用一個或多個數據源來處理請求。但是,在某些情況下,您可能不需要操作資料來源。將資料來源設定為none
將運行請求,跳過數據調用步驟,然後運行響應。
採取相同的使用案例從EventBridge部分。在結構描述中,突變會處理狀態更新,然後將其傳送給訂閱者。回顧解析器如何工作,通常至少有一個數據源調用。不過,此案例中的資料已由事件匯流排自動傳送。這意味著不需要突變來執行數據源調用; 訂單狀態可以簡單地在本地處理。突變設置為none
,它充當沒有資料來源叫用的傳遞值。然後,結構描述會填入資料,資料會傳送給訂閱者。
OpenSearch
亞馬遜OpenSearch服務是一套工具,用於實現全文搜索,數據可視化和日誌記錄。您可以使用此服務查詢已上傳的結構化資料。
在此服務中,您將建立的執行個體OpenSearch。這些被稱為節點。在節點中,您將至少添加一個指數。在概念上,索引有點像關係數據庫中的表。(但是,OpenSearch不符合 ACID 標準,因此不應該以這種方式使用)。您將在索引中填入您上傳到OpenSearch服務。上傳數據後,它將在索引中存在的一個或多個分片中進行索引。一個碎片就像索引的一個分區,其中包含一些數據,並且可以與其他碎片分開查詢。上傳後,您的數據將結構為 JSON 文件,稱為文件。然後,您可以查詢文檔中的數據節點。
HTTP 端點
您可以使用 HTTP 端點做為資料來源。AWSAppSync可以使用參數和有效負載等相關信息將請求發送到端點。HTTP 響應將暴露給解析器,該解析器將在完成其操作後返回最終響應。
新增資料來源
如果您已建立資料來源,則可以將其連結至AWS AppSync服務,更具體地說,API。
- Console
-
-
登入 AWS Management Console 並開啟 AppSync主控台。
-
在中選擇您的 API儀表板。
-
在側邊欄,選擇資料來源。
-
選擇 Create data source (建立資料來源)。
-
為您的資料來源命名。你也可以給它一個描述,但這是可選的。
-
選擇您的資料來源類型。
-
對於 DynamoDB,您必須選擇您的區域,然後選擇區域中的表格。您可以選擇設定新的泛用表格角色或匯入表格的現有角色,來指定與表格互動規則。您可以啟用版本化,當多個用戶端同時嘗試更新資料時,可自動為每個要求建立資料版本。版本控制用於保留和維護數據的多種變體,用於衝突檢測和解決目的。您還可以啟用自動模式生成,這將需要您的數據源並生成一些 CRUD,List
,以及Query
在模式中訪問它所需的操作。
對於OpenSearch,您必須選擇您的區域,然後選擇區域中的域(集群)。您可以選擇設定新的泛用表格角色或匯入表格的現有角色,來指定與網域的互動規則。
對於 Lambda,您必須選擇您的區域,然後選擇區域中 Lambda 函數的 ARN。您可以選擇建立新的泛用資料表角色或匯入表格的現有角色,來指定與 Lambda 函數的互動規則。
對於 HTTP,您必須輸入您的 HTTP 端點。
對於EventBridge,您必須選擇您的地區,然後選擇該地區的活動巴士。您可以選擇建立新的泛用表格角色或匯入表格的現有角色,來指定與事件匯流排的互動規則。
對於 RDS,您必須選擇您的區域,然後選擇秘密存儲區(用戶名和密碼),數據庫名稱和模式。
如果是 none,您將新增沒有實際資料來源的資料來源。這是用於在本地處理解析器,而不是通過實際的數據源處理。
如果您要匯入現有角色,則他們需要信任原則。如需詳細資訊,請參閱IAM 信任政策。
-
選擇 建立 。
或者,如果您要建立 DynamoDB 資料來源,您可以移至綱要在控制台頁面中,選擇建立資源在頁面頂部,然後填寫預先定義的模型以轉換為表格。在此選項中,您將填寫或匯入基礎類型、設定包含分割區索引鍵的基本資料表資料,以及檢閱結構描述變更。
- CLI
-
-
執行以建立資料來源create-data-source
指令。
您需要為此特定命令輸入一些參數:
-
該api-id
你的 API。
-
該name
你的桌子。
-
該type
的資料來源。根據您選擇的資料來源類型,您可能需要輸入service-role-arn
和一個-config
標籤。
範例命令可能如下所示:
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
-
在您使用 CDK 之前,我們建議您先查看 CDK 的官方文件隨著AWS AppSync的CDK 參考資料。
下面列出的步驟將僅顯示用於添加特定資源的代碼片段的一般示例。這是不意味著成為生產代碼中的工作解決方案。我們還假設您已經有一個可用的應用程序。
要添加特定的數據源,您需要將構造添加到堆棧文件中。您可以在此處找到資料來源類型的清單:
-
通常,您可能必須將 import 指令添加到您正在使用的服務中。例如,它可以遵循以下形式:
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'
例如,以下是如何導入AWS AppSync和動態支援服務:
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
-
某些服務 (例如 RDS) 需要在堆疊檔案中進行一些額外的設定,才能建立資料來源 (例如 VPC 建立、角色和存取認證)。如需詳細資訊,請參閱相關 CDK 頁面中的範例。
-
對於大多數資料來源,尤其是AWS服務,您將在堆棧文件中創建數據源的新實例。通常情況下,這看起來像下面這樣:
const add_data_source_func
= new service_scope
.resource_name
(scope: Construct, id: string, props: data_source_props);
例如,以下是亞馬遜動態資料表的範例:
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,
});
大多數資料來源至少會有一個必要 prop (將表示)無一個?
符號)。請參閱 CDK 文件以瞭解需要哪些道具。
-
接下來,您需要將資料來源連結至 GraphQL API。建議的方法是在為管線解析器創建函數時添加它。例如,下面的程式碼片段是掃描 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,
});
在dataSource
道具,你可以調用圖形 SQL API(add_api
)並使用其中一種內置方法(addDynamoDbDataSource
) 以建立資料表與 GraphQL API 之間的關聯性。參數是此鏈接的名稱,將存在於AWS AppSync控制台(data_source_name_in_console
在這個例子中)和表方法(add_ddb_table
). 當您開始製作解析器時,下一節將顯示有關此主題的更多信息。
有用於連結資料來源的替代方法。你可以在技術上添加api
到表格函數中的 prop 列表。例如,這是步驟 3 中的代碼片段,但帶有api
包含一個圖形 SQL API 的道具:
const add_api = new appsync.GraphqlApi(this, 'API_ID', {
...
});
const add_ddb_table = new dynamodb.Table(this, 'Table_ID', {
...
api: add_api
});
或者,您可以呼叫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);
我們建議您只在函數的 prop 中建立關聯。否則,您必須在中手動將解析器函數鏈接到數據源AWS AppSync控制台(如果你想繼續使用控制台值data_source_name_in_console
)或以另一個名稱在函數中創建一個單獨的關聯data_source_name_in_console_2
。這是由於 prop 處理資訊的方式有所限制。
IAM 信任政策
如果您為資料來源使用現有的 IAM 角色,則需要授予該角色適當的許可,才能在您的資料來源上執行操作AWS資源,例如PutItem
在亞馬遜動態 B 表上。您也需要修改該角色的信任原則,以允許AWS AppSync以將其用於資源訪問,如以下示例策略所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
您也可以在信任原則中新增條件,以視需要限制對資料來源的存取。目前,SourceArn
和SourceAccount
金鑰可以在這些條件下使用。例如,下列政策會限制對帳戶對資料來源的存取123456789012
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
}
]
}
或者,您可以將資料來源的存取限制為特定 API,例如abcdefghijklmnopq
,使用下列原則:
{
"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"
}
}
}
]
}
您可以限制對所有人的存取AWS AppSync來自特定區域的 API,例如us-east-1
,使用下列原則:
{
"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/*"
}
}
}
]
}
在下一節中(配置解析器),我們將添加解析器業務邏輯並將其附加到模式中的字段,以處理數據源中的數據。
如需有關角色原則組態的詳細資訊,請參閱修改角色在IAM 使用者指南。
有關跨帳戶訪問的更多信息AWS Lambda解析器AWS AppSync,請參閱建立跨帳戶AWS Lambda解析器AWS AppSync。