Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

AWS AppSync JavaScript Amazon のリゾルバー関数リファレンス RDS

フォーカスモード
AWS AppSync JavaScript Amazon のリゾルバー関数リファレンス RDS - AWS AppSync

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

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

AWS AppSync RDS 関数とリゾルバーにより、デベロッパーは SQL は、 RDS データを使用して Amazon Aurora クラスターデータベースにクエリAPIを実行し、これらのクエリの結果を返します。書き込むことができます。SQL AWS AppSyncのrdsモジュールsqlタグ付きテンプレートAPIを使用するか、rdsモジュールの selectinsertupdateremoveヘルパー関数を使用してデータに送信される ステートメント。 はRDS、Data Service の ExecuteStatementアクション AWS AppSync を使用して、データベースに対して SQLステートメントを実行します。

SQL タグ付きテンプレート

AWS AppSyncのsqlタグ付けされたテンプレートを使用すると、テンプレート expressions を使用して実行時に動的値を受信できる静的ステートメントを作成できます。 は、式値から変数マップ AWS AppSync を構築して、Amazon Aurora Serverless Data に送信されるSqlParameterizedクエリを構築しますAPI。この方法では、実行時に渡される動的な値によって元のステートメントを変更することができないため、意図しない実行が発生する可能性があります。動的な値はすべてパラメータとして渡され、元のステートメントを変更することはできず、データベースによって実行されることもありません。これにより、クエリの脆弱性が軽減されます。SQL インジェクション攻撃。

注記

いずれの場合も、書き込み時に SQL ステートメントでは、セキュリティガイドラインに従って、入力として受信したデータを適切に処理する必要があります。

注記

sql タグ付きテンプレートは変数値の受け渡しのみをサポートします。式を使用して列名やテーブル名を動的に指定することはできません。ただし、ユーティリティ関数を使用して動的ステートメントを作成することはできます。

次の例では、実行時に GraphQL クエリで動的に設定される col 引数の値に基づいてフィルタリングするクエリを作成します。この値は、タグ式を使用してのみステートメントに追加できます。

import { sql, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const query = sql` SELECT * FROM table WHERE column = ${ctx.args.col}` ; return createMySQLStatement(query); }

すべての動的な値を変数マップに渡すことで、データベースエンジンに依存して値を安全に処理し、サニタイズします。

ステートメントの作成

関数とリゾルバーは、MySQL データベースと PostgreSQL データベースとやり取りできます。createMySQLStatementcreatePgStatement をそれぞれ使用してステートメントを作成します。例えば、 createMySQLStatement は MySQL クエリを作成できます。これらの関数は最大 2 つのステートメントを受け付けるので、リクエストですぐに結果を取得する必要がある場合に便利です。My を使用するとSQL、次のことができます。

import { sql, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { id, text } = ctx.args; const s1 = sql`insert into Post(id, text) values(${id}, ${text})`; const s2 = sql`select * from Post where id = ${id}`; return createMySQLStatement(s1, s2); }
注記

createPgStatement および createMySQLStatement は、sql タグ付きテンプレートで作成されたステートメントをエスケープしたり、引用したりすることはありません。

データの取得

実行されたSQLステートメントの結果は、 context.result オブジェクトのレスポンスハンドラーで使用できます。結果は、 ExecuteStatementアクションのレスポンス要素を含むJSON文字列です。解析された結果は次のとおりです。

type SQLStatementResults = { sqlStatementResults: { records: any[]; columnMetadata: any[]; numberOfRecordsUpdated: number; generatedFields?: any[] }[] }

toJsonObject ユーティリティを使用して、返された行を表すJSONオブジェクトのリストに結果を変換できます。例:

import { toJsonObject } from '@aws-appsync/utils/rds'; export function response(ctx) { const { error, result } = ctx; if (error) { return util.appendError( error.message, error.type, result ) } return toJsonObject(result)[1][0] }

toJsonObject はステートメントの結果の配列を返すことに注意してください。1 つのステートメントを指定した場合、配列の長さは 1 です。2 つのステートメントを指定した場合、配列の長さは 2 です。配列内の各結果には、0 以上の行が含まれます。結果の値が無効な場合や予期しないものである場合、toJsonObjectnull を返します。

ユーティリティ関数

モジュールのユーティリティヘルパーを使用して AWS AppSync RDS、データベースとやり取りできます。

select ユーティリティは、リレーショナルデータベースにクエリを実行する SELECT ステートメントを作成します。

基本的な使用法

基本的な形式では、クエリを実行するテーブルを指定できます。

import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // "SELECT * FROM "persons" return createPgStatement(select({table: 'persons'})); }

なお、テーブル識別子でスキーマを指定することもできます。

import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // SELECT * FROM "private"."persons" return createPgStatement(select({table: 'private.persons'})); }

列の指定

columns プロパティで列を指定できます。これを値に設定しない場合、デフォルトでは * になります。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'name'] })); }

また、列のテーブルも指定できます。

export function request(ctx) { // Generates statement: // SELECT "id", "persons"."name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'persons.name'] })); }

LIMIT と OFFSET

limitoffset をクエリに適用できます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // LIMIT :limit // OFFSET :offset return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], limit: 10, offset: 40 })); }

ORDER BY

結果は orderBy プロパティを使用してソートできます。列とオプションの dir プロパティを指定するオブジェクトの配列を指定します。

export function request(ctx) { // Generates statement: // SELECT "id", "name" FROM "persons" // ORDER BY "name", "id" DESC return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], orderBy: [{column: 'name'}, {column: 'id', dir: 'DESC'}] })); }

フィルター

特殊条件オブジェクトを使用してフィルターを構築できます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}} })); }

以下のフィルターを組み合わせることもできます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME and "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}, id: {gt: 10}} })); }

また、OR ステートメントも作成できます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME OR "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { or: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }

not を使用して条件を無効にすることもできます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE NOT ("name" = :NAME AND "id" > :ID) return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { not: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }

以下の演算子を使用して、値を比較することもできます。

演算子 説明 可能な値型
eq Equal 数値、文字列、ブール値
ne Not equal 数値、文字列、ブール値
le Less than or equal 番号、文字列
lt Less than 番号、文字列
ge Greater than or equal 番号、文字列
gt Greater than 番号、文字列
contains いいね string
notContains 好きではない string
beginsWith プレフィックスで始まる string
次の間 2 つの値の間 番号、文字列
attributeExists 属性が null ではありません 数値、文字列、ブール値
size 要素の長さを確認します string

select ユーティリティは、リレーショナルデータベースにクエリを実行する SELECT ステートメントを作成します。

基本的な使用法

基本的な形式では、クエリを実行するテーブルを指定できます。

import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // "SELECT * FROM "persons" return createPgStatement(select({table: 'persons'})); }

なお、テーブル識別子でスキーマを指定することもできます。

import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // SELECT * FROM "private"."persons" return createPgStatement(select({table: 'private.persons'})); }

列の指定

columns プロパティで列を指定できます。これを値に設定しない場合、デフォルトでは * になります。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'name'] })); }

また、列のテーブルも指定できます。

export function request(ctx) { // Generates statement: // SELECT "id", "persons"."name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'persons.name'] })); }

LIMIT と OFFSET

limitoffset をクエリに適用できます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // LIMIT :limit // OFFSET :offset return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], limit: 10, offset: 40 })); }

ORDER BY

結果は orderBy プロパティを使用してソートできます。列とオプションの dir プロパティを指定するオブジェクトの配列を指定します。

export function request(ctx) { // Generates statement: // SELECT "id", "name" FROM "persons" // ORDER BY "name", "id" DESC return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], orderBy: [{column: 'name'}, {column: 'id', dir: 'DESC'}] })); }

フィルター

特殊条件オブジェクトを使用してフィルターを構築できます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}} })); }

以下のフィルターを組み合わせることもできます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME and "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}, id: {gt: 10}} })); }

また、OR ステートメントも作成できます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME OR "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { or: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }

not を使用して条件を無効にすることもできます。

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE NOT ("name" = :NAME AND "id" > :ID) return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { not: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }

以下の演算子を使用して、値を比較することもできます。

演算子 説明 可能な値型
eq Equal 数値、文字列、ブール値
ne Not equal 数値、文字列、ブール値
le Less than or equal 番号、文字列
lt Less than 番号、文字列
ge Greater than or equal 番号、文字列
gt Greater than 番号、文字列
contains いいね string
notContains 好きではない string
beginsWith プレフィックスで始まる string
次の間 2 つの値の間 番号、文字列
attributeExists 属性が null ではありません 数値、文字列、ブール値
size 要素の長さを確認します string

insert ユーティリティによって、INSERT オペレーションを使用してデータベースに単一行の項目を簡単に挿入できます。

単一項目の挿入

項目を挿入するには、テーブルを指定して、値のオブジェクトを渡します。オブジェクトキーはテーブルの列にマッピングされます。列名は自動的にエスケープされ、値は変数マップを使用してデータベースに送信されます。

import { insert, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) return createMySQLStatement(insertStatement) }

SQLユースケース

insert の後に select を組み合わせて、挿入した行を取得できます。

import { insert, select, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); const selectStatement = select({ table: 'persons', columns: '*', where: { id: { eq: values.id } }, limit: 1, }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) // and // SELECT * // FROM `persons` // WHERE `id` = :ID return createMySQLStatement(insertStatement, selectStatement) }

Postgres のユースケース

Postgres では、returning を使用して、挿入した行からデータを取得できます。* または列名の配列が受け入れられます。

import { insert, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values, returning: '*' }); // Generates statement: // INSERT INTO "persons"("name") // VALUES(:NAME) // RETURNING * return createPgStatement(insertStatement) }

insert ユーティリティによって、INSERT オペレーションを使用してデータベースに単一行の項目を簡単に挿入できます。

単一項目の挿入

項目を挿入するには、テーブルを指定して、値のオブジェクトを渡します。オブジェクトキーはテーブルの列にマッピングされます。列名は自動的にエスケープされ、値は変数マップを使用してデータベースに送信されます。

import { insert, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) return createMySQLStatement(insertStatement) }

SQLユースケース

insert の後に select を組み合わせて、挿入した行を取得できます。

import { insert, select, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); const selectStatement = select({ table: 'persons', columns: '*', where: { id: { eq: values.id } }, limit: 1, }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) // and // SELECT * // FROM `persons` // WHERE `id` = :ID return createMySQLStatement(insertStatement, selectStatement) }

Postgres のユースケース

Postgres では、returning を使用して、挿入した行からデータを取得できます。* または列名の配列が受け入れられます。

import { insert, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values, returning: '*' }); // Generates statement: // INSERT INTO "persons"("name") // VALUES(:NAME) // RETURNING * return createPgStatement(insertStatement) }

update ユーティリティでは、既存の行を更新できます。条件オブジェクトを使用すると、条件を満たすすべての行の指定された列に変更を適用できます。例えば、このミューテーションを可能にするスキーマがあるとします。Personname3id 値で更新したいのですが、これは 2000 年以降にそれら (known_since) がわかっている場合に限ります。

mutation Update { updatePerson( input: {id: 3, name: "Jon"}, condition: {known_since: {ge: "2000"}} ) { id name } }

更新リゾルバーは以下のようになります。

import { update, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id, ...values }, condition } = ctx.args; const where = { ...condition, id: { eq: id }, }; const updateStatement = update({ table: 'persons', values, where, returning: ['id', 'name'], }); // Generates statement: // UPDATE "persons" // SET "name" = :NAME, "birthday" = :BDAY, "country" = :COUNTRY // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }

条件にチェックを追加して、3 と等しいプライマリキー id を持つ行だけが更新されるようにすることができます。同様に、Postgres inserts の場合も、returning を使用して変更されたデータを返すことができます。

update ユーティリティでは、既存の行を更新できます。条件オブジェクトを使用すると、条件を満たすすべての行の指定された列に変更を適用できます。例えば、このミューテーションを可能にするスキーマがあるとします。Personname3id 値で更新したいのですが、これは 2000 年以降にそれら (known_since) がわかっている場合に限ります。

mutation Update { updatePerson( input: {id: 3, name: "Jon"}, condition: {known_since: {ge: "2000"}} ) { id name } }

更新リゾルバーは以下のようになります。

import { update, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id, ...values }, condition } = ctx.args; const where = { ...condition, id: { eq: id }, }; const updateStatement = update({ table: 'persons', values, where, returning: ['id', 'name'], }); // Generates statement: // UPDATE "persons" // SET "name" = :NAME, "birthday" = :BDAY, "country" = :COUNTRY // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }

条件にチェックを追加して、3 と等しいプライマリキー id を持つ行だけが更新されるようにすることができます。同様に、Postgres inserts の場合も、returning を使用して変更されたデータを返すことができます。

remove ユーティリティでは、既存の行を削除できます。条件オブジェクトは、条件を満たすすべての行で使用できます。delete は の予約キーワードです JavaScript。 は代わりに使用removeする必要があります。

import { remove, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id }, condition } = ctx.args; const where = { ...condition, id: { eq: id } }; const deleteStatement = remove({ table: 'persons', where, returning: ['id', 'name'], }); // Generates statement: // DELETE "persons" // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }

remove ユーティリティでは、既存の行を削除できます。条件オブジェクトは、条件を満たすすべての行で使用できます。delete は の予約キーワードです JavaScript。 は代わりに使用removeする必要があります。

import { remove, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id }, condition } = ctx.args; const where = { ...condition, id: { eq: id } }; const deleteStatement = remove({ table: 'persons', where, returning: ['id', 'name'], }); // Generates statement: // DELETE "persons" // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }

キャスティング

ステートメントで使用する正しいオブジェクト型に関して、さらに特異度が必要となる場合もあるでしょう。指定されたタイプのヒントを使用してパラメータのタイプを指定できます。 は、データ と同じタイプのヒント AWS AppSync をサポートしますAPI。モジュールの typeHint関数を使用してパラメータを AWS AppSync rdsキャストできます。

次の例では、JSONオブジェクトとしてキャストされる値として配列を送信できます。-> 演算子を使用して、index2JSON配列内の で 要素を取得します。

import { sql, createPgStatement, toJsonObject, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const arr = ctx.args.list_of_ids const statement = sql`select ${typeHint.JSON(arr)}->2 as value` return createPgStatement(statement) } export function response(ctx) { return toJsonObject(ctx.result)[0][0].value }

キャスティングは、DATETIMETIMESTAMP の処理や比較を行うときにも役立ちます。

import { select, createPgStatement, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const when = ctx.args.when const statement = select({ table: 'persons', where: { createdAt : { gt: typeHint.DATETIME(when) } } }) return createPgStatement(statement) }

現在の日付と時刻を送信する方法について別の例を以下に示します。

import { sql, createPgStatement, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const now = util.time.nowFormatted('YYYY-MM-dd HH:mm:ss') return createPgStatement(sql`select ${typeHint.TIMESTAMP(now)}`) }

使用可能な型ヒント

  • typeHint.DATE - 対応するパラメータが、DATE 型のオブジェクトとしてデータベースに送信されます。受け入れられる形式は YYYY-MM-DD です。

  • typeHint.DECIMAL - 対応するパラメータが、DECIMAL 型のオブジェクトとしてデータベースに送信されます。

  • typeHint.JSON - 対応するパラメータが、JSON 型のオブジェクトとしてデータベースに送信されます。

  • typeHint.TIME - 対応する文字列パラメータ値が、TIME 型のオブジェクトとしてデータベースに送信されます。受け入れられる形式は HH:MM:SS[.FFF] です。

  • typeHint.TIMESTAMP - 対応する文字列パラメータ値が、TIMESTAMP 型のオブジェクトとしてデータベースに送信されます。受け入れられる形式は YYYY-MM-DD HH:MM:SS[.FFF] です。

  • typeHint.UUID - 対応する文字列パラメータ値が、UUID 型のオブジェクトとしてデータベースに送信されます。

プライバシーサイト規約Cookie の設定
© 2024, Amazon Web Services, Inc. or its affiliates.All rights reserved.