本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
APIs 使用RDS簡介建置 GraphQL
AWS AppSync的簡介公用程式可以從資料庫資料表探索模型,並提出 GraphQL 類型。 AWS AppSync 主控台的建立API精靈可以立即API從 Aurora MySQL 或 PostgreSQL 資料庫產生 。它會自動建立類型和 JavaScript 解析程式來讀取和寫入資料。
AWS AppSync 透過 Amazon RDS Data 提供與 Amazon Aurora 資料庫的直接整合API。Amazon RDS Data API提供安全HTTP端點,可 AWS AppSync 連線至 以執行 SQL 陳述式。您可以使用此功能在 Aurora 上API為 MySQL 和 PostgreSQL 工作負載建立關聯式資料庫。
使用 API 為關聯式資料庫建置 AWS AppSync 有幾個優點:
-
您的資料庫不會直接暴露至用戶端,將存取點與資料庫本身解耦。
-
您可以針對不同應用程式的需求建置APIs量身打造的專用功能,消除前端中自訂業務邏輯的需求。這符合 Backend-For-Frontend(BFF) 模式。
-
可以使用各種授權模式在 AWS AppSync 層實作授權和存取控制,以控制存取。連線至資料庫不需要額外的運算資源,例如託管 Web 伺服器或代理連線。
-
您可以透過訂閱新增即時功能,透過 進行的資料突變 AppSync 會自動推送至連線的用戶端。
-
用戶端可以使用 443 等HTTPS常見連接埠連線至 API 。
AWS AppSync 讓APIs從現有關聯式資料庫建置變得簡單。其簡介公用程式可以從資料庫資料表探索模型,並提出 GraphQL 類型。 AWS AppSync 主控台的建立API精靈可以立即API從 Aurora MySQL 或 PostgreSQL 資料庫產生 。它會自動建立類型和 JavaScript解析程式來讀取和寫入資料。
AWS AppSync 提供整合 JavaScript 公用程式,以簡化解析程式中的撰寫SQL陳述式。您可以使用 AWS AppSync的sql
標籤範本來搭配動態值使用靜態陳述式,或rds
模組公用程式以程式設計方式建置陳述式。如需詳細資訊,請參閱資料來源和內建模組的解析器函數參考RDS。
使用介紹功能 (主控台)
如需詳細的教學課程和入門指南,請參閱教學課程:Aurora PostgreSQL Serverless with Data API。
AWS AppSync 主控台可讓您API從使用資料設定的現有 Aurora 資料庫建立 AWS AppSync GraphQL,API只需幾分鐘。這會根據您的資料庫組態快速產生操作結構描述。您可以使用原API樣或建置以新增功能。
-
登入 AWS Management Console 並開啟AppSync主控台
。 -
在儀表板 中,選擇建立 API。
-
-
在API選項 下,選擇 GraphQL APIs,從 Amazon Aurora 叢集 開始,然後選擇下一步 。
-
輸入API名稱 。這將用作主控台API中 的識別符。
-
如需聯絡詳細資訊 ,您可以輸入聯絡點,以識別 的管理員API。此為選用欄位。
-
在私有API組態 下,您可以啟用私有API功能。私有API只能從設定的VPC端點存取 (VPCE)。如需詳細資訊,請參閱私有 APIs。
我們不建議在此範例中啟用此功能。檢閱您的輸入後,請選擇下一步。
-
-
在資料庫頁面中,選擇選取資料庫 。
-
選擇匯入。
AWS AppSync 將開始介紹資料庫、探索資料表、資料欄、主索引鍵和索引。它會檢查 GraphQL 中是否支援探索的資料表API。請注意,為了支援建立新的資料列,資料表需要一個主索引鍵,可以使用多個 column. AWS AppSync maps 資料表資料欄來輸入欄位,如下所示:
資料類型 欄位類型 VARCHAR 字串 CHAR 字串 BINARY 字串 VARBINARY 字串 TINYBLOB 字串 TINYTEXT 字串 TEXT 字串 BLOB 字串 MEDIUMTEXT 字串 MEDIUMBLOB 字串 LONGTEXT 字串 LONGBLOB 字串 BOOL Boolean BOOLEAN Boolean BIT Int TINYINT Int SMALLINT Int MEDIUMINT Int INT Int INTEGER Int BIGINT Int YEAR Int FLOAT Float DOUBLE Float DECIMAL Float DEC Float NUMERIC Float DATE AWSDate TIMESTAMP 字串 DATETIME 字串 TIME AWSTime JSON AWSJson ENUM ENUM -
資料表探索完成後,資料庫區段將填入您的資訊。在新的資料庫資料表區段中,資料表中的資料可能已填入並轉換為結構描述的類型。如果您沒有看到某些必要資料,您可以選擇新增資料表 ,按一下出現的模型中這些類型的核取方塊,然後選擇新增 來檢查它。
若要從資料庫資料表區段中移除類型,請按一下您要移除的類型旁邊的核取方塊,然後選擇移除 。如果您想要稍後再次新增,移除的類型會放置在新增資料表模態中。
請注意, AWS AppSync 會使用資料表名稱作為類型名稱,但您可以重新命名它們,例如變更複數資料表名稱,例如
movies
類型名稱Movie
。 若要重新命名資料庫資料表區段中的類型,請按一下您要重新命名之類型的核取方塊,然後按一下類型名稱欄中的鉛筆圖示。若要根據您的選擇預覽結構描述的內容,請選擇預覽結構描述。請注意,此結構描述不能為空,因此您至少必須將一個資料表轉換為類型。此外,此結構描述的大小不能超過 1 MB。
-
在服務角色 下,選擇是否要特別為此匯入建立新的服務角色,或使用現有角色。
-
-
選擇 Next (下一步)。
-
接下來,選擇建立唯讀 API(僅限查詢) 還是API用於讀取和寫入資料 (具有查詢和突變)。後者也支援由突變觸發的即時訂閱。
-
選擇 Next (下一步)。
-
檢閱您的選擇,然後選擇建立 API。 AWS AppSync 將建立 API,並將解析器連接至查詢和突變。產生的 API 可完全運作,並可視需要延伸。
使用簡介功能 (API)
您可以使用 StartDataSourceIntrospection
簡介API,以程式設計方式探索資料庫中的模型。如需 命令的詳細資訊,請參閱使用 StartDataSourceIntrospection
API。
若要使用 StartDataSourceIntrospection
,請提供您的 Aurora 叢集 Amazon Resource Name (ARN)、資料庫名稱和 AWS Secrets Manager 秘密 ARN。命令會啟動簡介程序。您可以使用 GetDataSourceIntrospection
命令擷取結果。您可以指定 命令是否應傳回已探索模型的 Storage Definition Language (SDL) 字串。這有助於直接從探索的模型產生SDL結構描述定義。
例如,如果您有下列簡單Todos
資料表的資料定義語言 (DDL) 陳述式:
create table if not exists public.todos ( id serial constraint todos_pk primary key, description text, due timestamp, "createdAt" timestamp default now() );
您以下列內容開始介紹。
aws appsync start-data-source-introspection \ --rds-data-api-config resourceArn=<cluster-arn>,secretArn=<secret-arn>,databaseName=database
接下來,使用 GetDataSourceIntrospection
命令來擷取結果。
aws appsync get-data-source-introspection \ --introspection-id a1234567-8910-abcd-efgh-identifier \ --include-models-sdl
這會傳回下列結果。
{ "introspectionId": "a1234567-8910-abcd-efgh-identifier", "introspectionStatus": "SUCCESS", "introspectionStatusDetail": null, "introspectionResult": { "models": [ { "name": "todos", "fields": [ { "name": "description", "type": { "kind": "Scalar", "name": "String", "type": null, "values": null }, "length": 0 }, { "name": "due", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 }, { "name": "id", "type": { "kind": "NonNull", "name": null, "type": { "kind": "Scalar", "name": "Int", "type": null, "values": null }, "values": null }, "length": 0 }, { "name": "createdAt", "type": { "kind": "Scalar", "name": "AWSDateTime", "type": null, "values": null }, "length": 0 } ], "primaryKey": { "name": "PRIMARY_KEY", "fields": [ "id" ] }, "indexes": [], "sdl": "type todos\n{\ndescription: String\n\ndue: AWSDateTime\n\nid: Int!\n\ncreatedAt: AW SDateTime\n}\n" } ], "nextToken": null } }