APIs 使用RDS簡介建置 GraphQL - AWS AppSync

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

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樣或建置以新增功能。

  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。請注意,為了支援建立新的資料列,資料表需要一個主索引鍵,可以使用多個 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
  5. 資料表探索完成後,資料庫區段將填入您的資訊。在新的資料庫資料表區段中,資料表中的資料可能已填入並轉換為結構描述的類型。如果您沒有看到某些必要資料,您可以選擇新增資料表 ,按一下出現的模型中這些類型的核取方塊,然後選擇新增 來檢查它。

    若要從資料庫資料表區段中移除類型,請按一下您要移除的類型旁邊的核取方塊,然後選擇移除 。如果您想要稍後再次新增,移除的類型會放置在新增資料表模態中。

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

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

    1. 服務角色 下,選擇是否要特別為此匯入建立新的服務角色,或使用現有角色。

  6. 選擇 Next (下一步)

  7. 接下來,選擇建立唯讀 API(僅限查詢) 還是API用於讀取和寫入資料 (具有查詢和突變)。後者也支援由突變觸發的即時訂閱。

  8. 選擇 Next (下一步)

  9. 檢閱您的選擇,然後選擇建立 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 } }