自省 - AWS AppSync

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

自省

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

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

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

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

  • 您可以根據不同應用程式的需求,建置專為特定用途建置的 API,不再需要前端自訂商務邏輯。這與前端後端(BFF)模式對齊。

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

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

  • 客戶端可以使用像 443 這樣的通用端口通過 HTTPS 連接到 API。

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

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

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

如需詳細教學課程和入門指南,請參閱教學課程:使用資料 API 的 Aurora PostgreSQL 無伺服器

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

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

    1. 儀表板上,選擇 Create API (建立 API)

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

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

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

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

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

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

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

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

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

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

  4. 選擇匯入

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

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

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

    請注意,AWS AppSync使用表名作為類型名稱,但您可以重命名它們-例如,將複數表格名稱(如電影)更改為類型名稱 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 結構描述定義非常有用。

例如,如果您有下列簡單資料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 } }