開発時流れ
AWS CDKを使ってTypeScriptでAppSync APIを追加する方法は以下の手順で行います。
必要なパッケージのインストール:
まず、@aws-cdk/aws-appsyncパッケージをインストールしてください。
npm install @aws-cdk/aws-appsync
CDKスタックの作成:
libディレクトリ内に新しいスタックファイル(例: appsync-cdk-app-stack.ts)を作成し、必要なモジュールをインポートします。
import * as cdk from 'aws-cdk-lib';
import * as appsync from 'aws-cdk-lib/aws-appsync';
AppSync APIの追加:
スタッククラス内でAppSync APIを作成します。GraphQL Endpoint自体の定義をします。
以下の例では、schema.graphqlファイルからスキーマを読み込んでいます。
export class AppsyncCdkAppStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// AppSync APIの作成
const api = new appsync.GraphqlApi(this, 'api', {
name: 'myApi',
schema: appsync.Schema.fromAsset(path.join(__dirname, 'schema.graphql')),
});
}
}
データソースとリゾルバの追加:
必要に応じて、データソースとリゾルバをAPIに追加できます。
データソースとリゾルバは、AWS AppSyncでGraphQL APIを構築する際に重要な役割を果たします。データソースは、APIがアクセスするデータの場所を定義し、リゾルバは、クライアントからのGraphQLクエリやミューテーションに対して実際にデータを取得・操作する方法を指定します
データソースは、DynamoDB、RDS、Amazon Elasticsearch Service、HTTPエンドポイントなど、さまざまなデータストレージやサービスに対応しています。
リゾルバは、クライアントからのリクエストをデータソースにマッピングし、その結果をクライアントに返す役割を果たします。それぞれのリゾルバは特定のデータソース(例えば、DynamoDBテーブルやLambda関数など)と関連付けられ、そのデータソースからデータを取得したり、データを変更したりします。
パイプラインは、複数のリゾルバ(これをリゾルバ関数とも呼びます)を一連のステップとして組み合わせたものです。各リゾルバ関数は順番に実行され、一つの関数の出力が次の関数の入力となります。これにより、複数のデータソースからデータを取得し結合したり、複雑なデータ操作や変換を行ったりすることが可能になります。
したがって、パイプラインリゾルバを使用することで、単一のリクエストで複数のデータソースを操作し、それらの結果を組み合わせてクライアントに返すことができます。これは、より複雑なデータ取得や操作を可能にします。
以下は、DynamoDBテーブルをデータソースとして追加し、リゾルバを作成する例です。
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
// DynamoDBテーブルの作成
const table = new dynamodb.Table(this, 'MyTable', {
partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
});
// データソースの追加
const dataSource = api.addDynamoDbDataSource('MyDataSource', table);
// リゾルバの追加
dataSource.createResolver({
typeName: 'Query',
fieldName: 'getItem',
requestMappingTemplate: appsync.MappingTemplate.dynamoDbGetItem('id', 'id'),
responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultItem(),
});
デプロイ:
最後に、CDKアプリケーションをデプロイします。
cdk deploy
これで、AWS CDKとTypeScriptを使用してAppSync APIを追加する方法が完了しました。