RDS のイントロスペクション - AWS AppSync

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

RDS のイントロスペクション

AWS AppSync は、既存のリレーショナルデータベースから API を簡単に構築できます。そのイントロスペクションユーティリティは、データベーステーブルからモデルを検出し、GraphQL の型を提案できます。AWS AppSync コンソールの API 作成ウィザードを使用すると、Aurora MySQL または PostgreSQL データベースから API を即座に生成できます。データを読み書きするための型と JavaScript リゾルバーを自動的に作成されます。

AWS AppSync は、Amazon RDS Data API を通じて Amazon Aurora データベースとの直接統合を実現します。Amazon RDS Data API は、永続的なデータベース接続を必要とせず、SQL ステートメントを実行するために AWS AppSync が接続する安全な HTTP エンドポイントを提供します。これを使用して、Aurora で MySQL および PostgreSQL ワークロードのリレーショナルデータベース API を作成できます。

AWS AppSync を使用してリレーショナルデータベースの API を構築すると、以下のような利点があります。

  • データベースはクライアントに直接公開されないため、アクセスポイントをデータベース自体から切り離すことができます。

  • さまざまなアプリケーションのニーズに合わせた専用の API を構築できるため、フロントエンドでのカスタムビジネスロジックが不要になります。これは Backend For Frontend (BFF) パターンと一致します。

  • 承認とアクセス制御は、アクセスを制御するためのさまざまな承認モードを使用して AWS AppSync レイヤーで実装できます。データベースに接続するために、ウェブサーバーのホスティングやプロキシ接続など、追加のコンピューティングリソースは必要ありません。

  • リアルタイム機能はサブスクリプションを通じて追加でき、AppSync を介して行われたデータミューテーションは、接続されたクライアントに自動的にプッシュされます。

  • クライアントは 443 などの共通ポートを使用して HTTPS 経由で API に接続できます。

AWS AppSync は、既存のリレーショナルデータベースから API を簡単に構築できます。そのイントロスペクションユーティリティは、データベーステーブルからモデルを検出し、GraphQL の型を提案できます。AWS AppSync コンソールの API 作成ウィザードを使用すると、Aurora MySQL または PostgreSQL データベースから API を即座に生成できます。データを読み書きするための型と JavaScript リゾルバーを自動的に作成されます。

AWS AppSync には、リゾルバーでの SQL ステートメントの記述を簡単にするための統合された JavaScript ユーティリティが用意されています。動的な値を含む静的ステートメントには AWS AppSync の sql タグテンプレートを使用でき、プログラムでステートメントを構築するには rds モジュールユーティリティを使用できます。詳細については、「RDS のリゾルバー関数リファレンス」データソースと「組み込みモジュール」をご覧ください。

イントロスペクション機能を使用する (コンソール)

詳細なチュートリアルと入門ガイドについては、「チュートリアル: Aurora PostgreSQL Serverless で Data API を使用する」を参照してください。

AWS AppSync のコンソールでは、Data API で設定した既存の Aurora データベースから AWS AppSync GraphQL API をわずか数分で作成できます。これにより、データベース設定に基づいて運用スキーマが迅速に生成されます。API をそのまま使用することも、API を基にして機能を追加することもできます。

  1. AWS Management Console にサインインして、AppSync コンソールを開きます。

    1. ダッシュボードで、[API の作成] を選択します。

  2. [API のオプション] で、[GraphQL API][Amazon Aurora クラスターから始める][次へ] の順に選択します。

    1. [API 名] を入力します。これはコンソールで API の識別子として使用されます。

    2. 連絡先情報については、API のマネージャーを特定する連絡先を入力できます。これはオプションのフィールドです。

    3. [プライベート API 設定] で、プライベート API 機能を有効にできます。プライベート API には、設定された VPC エンドポイント (VPCE) からのみアクセスできます。詳細については、「プライベート DNS」を参照してください。

      この例では、この機能を有効にすることはお勧めしません。[次へ] 選択して入力を確認します。

  3. [データベース] ページで [データベースを選択] を選択します。

    1. クラスターからデータベースを選択する必要があります。最初のステップは、クラスターが存在する [リージョン] を選択することです。

    2. ドロップダウンリストから [Aurora クラスター] を選択します。リソースを使用する前に、対応するData API を作成して有効にしておく必要があることに注意してください。

    3. 次に、データベースの認証情報をサービスに追加する必要があります。これは主に AWS Secrets Manager を使用して行われます。シークレットが存在する [リージョン] を選択します。シークレット情報を取得する方法の詳細については、「シークレットを検索する」または「シークレットの取得」を参照してください。

    4. ドロップダウンリストからシークレットを選択します。ユーザーにはデータベースの読み取りアクセス許可が必要であることに注意してください。

  4. Import (インポート) を選択します。

    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 では、テーブル名を型名として使用しますが、名前を変更することもできます。例えば、movies のような複数形のテーブル名を Movie という型名に変更できます。[データベーステーブル] セクションで型名を変更するには、名前を変更する型のチェックボックスをクリックし、[タイプ名] 列の鉛筆アイコンをクリックします。

    選択内容に基づいてスキーマの内容をプレビューするには、[スキーマをプレビュー] を選択します。このスキーマは空にはできないため、少なくとも 1 つのテーブルを型に変換する必要があることに注意してください。また、このスキーマのサイズは 1 MB を超えることはできません。

    1. [サービスロール] で、このインポート専用の新しいサービスロールを作成するか、既存のロールを使用するかを選択します。

  6. [次へ] を選択します。

  7. 次に、読み取り専用 API (クエリのみ) を作成するか、データの読み取りと書き込み用の API (クエリとミューテーションを含む) を作成するかを選択します。後者は、ミューテーションによってトリガーされるリアルタイムサブスクリプションもサポートします。

  8. [次へ] を選択します。

  9. 選択内容を確認し、[API を作成] を選択します。AWS AppSync は API を作成し、クエリとミューテーションにリゾルバーをアタッチします。生成された API は完全に動作し、必要に応じて拡張できます。

イントロスペクション機能の使用 (API)

StartDataSourceIntrospection イントロスペクション API を使用して、データベース内のモデルをプログラムで検出できます。コマンドの詳細については、「StartDataSourceIntrospection API の使用」を参照してください。

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