Looking for how to use this in your app?See Frontend Libraries →
Lambda関数にAPIとデータへのアクセスを許可する
defineDataへの関数アクセスは、スキーマオブジェクトの承認ルールを使用して設定できます。
amplify/data/resource.ts
import { a, defineData, type ClientSchema} from '@aws-amplify/backend';import { functionWithDataAccess } from '../function/data-access/resource';
const schema = a .schema({ Todo: a.model({ name: a.string(), description: a.string(), isDone: a.boolean() }) }) .authorization(allow => [allow.resource(functionWithDataAccess)]);
export type Schema = ClientSchema<typeof schema>;
export const data = defineData({ schema});新しいディレクトリとリソースファイル amplify/functions/data-access/resource.ts を作成します。次に、defineFunction を使用して関数を定義します。
amplify/functions/data-access/resource.ts
import { defineFunction } from '@aws-amplify/backend';
export const functionWithDataAccess = defineFunction({ name: 'data-access',});defineFunction から返されたオブジェクトは、スキーマ承認ルールの allow.resource() に直接渡すことができます。これにより、関数はGraphQL APIに対してQuery、Mutation、およびSubscription操作を実行する権限が付与されます。.to() メソッドを使用して、1つ以上の操作へのアクセスを制限します。
amplify/data/resource.ts
const schema = a .schema({ Todo: a.model({ name: a.string(), description: a.string(), isDone: a.boolean() }) }) .authorization(allow => [ allow.resource(functionWithDataAccess).to(['query', 'listen']) ]); // クエリとサブスクリプション操作は許可されますが、ミューテーションは許可されませんaws-amplify を使用したAPIへのアクセス
関数のハンドラーファイルで、Amplifyデータクライアントを設定します
amplify/functions/data-access/handler.ts
import type { Handler } from 'aws-lambda';import type { Schema } from '../../data/resource';import { Amplify } from 'aws-amplify';import { generateClient } from 'aws-amplify/data';import { getAmplifyDataClientConfig } from '@aws-amplify/backend/function/runtime';import { env } from '$amplify/env/<function-name>'; // 関数名に置き換えてください
const { resourceConfig, libraryOptions } = await getAmplifyDataClientConfig(env);
Amplify.configure(resourceConfig, libraryOptions);
const client = generateClient<Schema>();
export const handler = async (event) => { // 関数コードをここに記述}クライアントコードを生成したら、データにアクセスするように関数を更新します。以下のコードはtodoを作成してから、すべてのtodoを一覧表示します。
amplify/functions/data-access/handler.ts
//...const client = generateClient<Schema>();
export const handler: Handler = async (event) => { const { errors: createErrors, data: newTodo } = await client.models.Todo.create({ name: "My new todo", description: "Todo description", isDone: false, })
const { errors: listErrors, data: todos } = await client.models.Todo.list();
return event;};