建立APIs具RDS有內省功能的 GraphQL - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立APIs具RDS有內省功能的 GraphQL

AWS AppSync的內部檢查公用程式可以從資料庫資料表中探索模型,並提出 GraphQL 類型。 AWS AppSync 控制台的創建API嚮導可以立即API從我的SQL或 Postgre SQL 數據庫生成一個 Aurora。它會自動創建類型和 JavaScript 解析器來讀取和寫入數據。

AWS AppSync 透過 Amazon 資料與 Amazon Aurora RDS 資料庫直接整合API。Amazon RDS Data 不需要持續性資料庫連線,而是API提供 AWS AppSync 連線到執行SQL陳述式的安全HTTP端點。您可以使用此功能API為 Aurora 上的「我的」SQL 和「Postgre」SQL 工作負載建立關聯式資料庫。

API為您的關係數據庫構建 AWS AppSync 具有以下幾個優點:

  • 您的數據庫不會直接暴露給客戶端,從數據庫本身解耦接接入點。

  • 您可以根據不同應用程式的需求APIs量身打造,不再需要前端自訂商務邏輯。這與後端對齊前端()模式。BFF

  • 可以使用各種授權模式來控制訪問的 AWS AppSync 層實現授權和訪問控制。無需額外的計算資源即可連接到數據庫,例如託管 Web 服務器或代理連接。

  • 您可以透過訂閱新增即時功能,並透過 AppSync 自動推送至連線的用戶端進行資料突變。

  • 客戶端可以HTTPS使用通用端口(如 443)連接到API過來。

AWS AppSync 使APIs從現有的關係數據庫構建變得容易。它的內部檢查實用程序可以從數據庫表中發現模型並提出 GraphQL 類型。 AWS AppSync 控制台的創建API嚮導可以立即API從我的SQL或 Postgre SQL 數據庫生成一個 Aurora。它會自動創建類型和 JavaScript解析器來讀取和寫入數據。

AWS AppSync 提供集成的 JavaScript 實用程序,以簡化在解析器中編寫SQL語句。您可以使用具有動態值 AWS AppSync的靜態陳述式的sql標籤範本,或使用rds模組公用程式以程式設計方式建立陳述式。有關更多信息,請參閱RDS數據源的解析器函數參考和內置模塊

使用內部檢查功能(控制台)

如需詳細教學課程和入門指南,請參閱教學課程:Aurora Postgre SQL 無伺服器 (含資料)。API

主 AWS AppSync 控台可讓您API在幾分鐘內API從使用資料設定的現有 Aurora 資料庫建立 AWS AppSync GraphQL。這會根據您的資料庫組態快速產生作業結構描述。您可以使用API原樣或在其上構建以添加功能。

  1. 登入 AWS Management Console 並開啟AppSync主控台

    1. 在「儀表板」中,選擇「建立」API。

  2. 在「API選項」下,選GraphQL APIs從 Amazon Aurora 叢集開始,然後選擇「下步」。

    1. 輸入API名稱。這將被用作控制台API中的標識符。

    2. 如需連絡人詳細資訊,您可以輸入連絡人,以識別的管理員API。此為選用欄位。

    3. 在 [私人API設定] 下,您可以啟用私人API功能。私有只API能從設定的VPC端點 (VPCE) 存取。如需詳細資訊,請參閱私人APIs

      我們不建議在此範例中啟用此功能。檢閱輸入後,請選擇「下一步」。

  3. 在「資料庫」頁面中,選擇選取資料庫

    1. 您需要從叢集中選擇資料庫。第一個步驟是選擇叢集所在的區域

    2. 從下拉式清單中選擇 Aurora 叢集。請注意,在使用資源API之前,您必須先建立並用對應的資料。

    3. 接下來,您必須將資料庫的認證新增至服務。這主要是使用 AWS Secrets Manager. 選擇您的密碼所在的地區。如需如何擷取機密資訊的詳細資訊,請參閱尋找機密擷取機密

    4. 從下拉式清單中新增您的密碼。請注意,使用者必須擁有資料庫的讀取權限

  4. 選擇匯入

    AWS AppSync 將開始檢查您的資料庫,探索資料表、資料行、主索引鍵和索引。它會檢查發現的資料表是否可以在 GraphQL API 中受到支援。請注意,為了支持創建新行,表需要一個主鍵,它可以使用多個列。 AWS AppSync 將表格欄對映至類型欄位,如下所示:

    資料類型 欄位類型
    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
  5. 資料表探索完成後,「資料庫」區段就會填入您的資訊。在新的 [資料庫資料表] 區段中,表格中的資料可能已經填入,並轉換為結構描述的類型。如果您沒有看到某些必要資料,可以選擇「新增表格」,在顯示的強制回應中按一下這些類型的核取方塊,然後選擇「新增」來檢查該資料。

    若要從「資料庫表格」區段移除類型,請按一下要移除之類型旁邊的核取方塊,然後選擇「移除」。如果您想稍後再次添加它們,則刪除的類型將被放置在「添加表」模式中。

    請注意, AWS AppSync 使用表名作為類型名稱,但您可以重命名它們-例如,更改複數表名稱 movies 到類型名稱 Movie。 若要重新命名「資料庫表格」區段中的類型,請按一下您要重新命名之類型的核取方塊,然後按一下「類型名稱」欄中的鉛筆圖示。

    若要根據您的選擇預覽結構描述的內容,請選擇 [預覽結構描述]。請注意,此結構定義不能為空,因此您必須至少將一個表轉換為類型。此外,此結構描述的大小不能超過 1 MB。

    1. 在 [服務角色] 下,選擇是要專門針對此匯入建立新的服務角色,還是使用現有角色。

  6. 選擇下一步

  7. 接下來,選擇創建只讀API(僅查詢)還是用API於讀取和寫入數據(使用查詢和突變)。後者還支持突變觸發的實時訂閱。

  8. 選擇下一步

  9. 檢閱您的選擇,然後選擇 [建立] API。 AWS AppSync 將創建解析器API並將其附加到查詢和突變。生成的API是完全可操作的,並且可以根據需要進行擴展。

使用內部檢查功能 () API

您可以使用StartDataSourceIntrospection內部檢查,以程式設計API方式探索資料庫中的模型。如需有關指令的詳細資訊,請參閱使用 StartDataSourceIntrospectionAPI.

若要使用StartDataSourceIntrospection,請提供您的 Aurora 叢集 Amazon 資源名稱 (ARN)、資料庫名稱和 AWS Secrets Manager 密碼ARN。此指令會啟動內部檢查程序。您可以使用GetDataSourceIntrospection指令擷取結果。您可以指定命令是否應傳回探查到的模型的儲存體定義語言 (SDL) 字串。這對於直接從發現的模型生成SDL結構描述定義非常有用。

例如,如果您有下列簡單資料表的資料定義語言 (DDL) 陳述Todos式:

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 } }