データソースを追加する - AWS AppSync

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

データソースを追加する

スキーマの設計」から続けてこの説明を読む場合には、スキーマの定義に基づくテーブルを AWS AppSync に自動的に作成させることができます。このステップはオプションですが、始めたばかりの場合は推奨される手順です。AWSこのプロセス中、AppSync はすべてのリゾルバを作成するため、GraphQL クエリ、ミューテーション、およびサブスクリプションの書き込みを迅速に行うことができます。このプロセスについては、「(オプション) スキーマからのプロビジョン」の説明を参照してください。これ以降は、自動プロビジョニングプロセスをスキップし、最初から作成することを前提に進めます。

データソースを追加する

AWS AppSync コンソールでスキーマを作成して保存したので、データソースを追加できます。前のセクションのスキーマでは、文字列型のidと呼ばれるTodos という名前のプライマリキーを持つ Amazon DynamoDB テーブルがあることを前提としています。これを手動で作成するには、Amazon DynamoDB コンソールまたは以下の AWS CloudFormation スタックを使用します。

データソースを追加するには

  1. コンソールで [データソース] タブを選択し、[新規] を選択します。

    1. データソースに TodosTable などのわかりやすい名前を付けます。

  2. タイプとして [Amazon DynamoDB テーブル] を選択します。

    1. 適切なリージョンを選択します。

  3. Todos テーブルを選択します。次に、新しいロールを作成するか (推奨)、PutItem への IAM アクセス許可を持つ既存のロールを選択し、テーブルをスキャンします。後で説明しているように、既存のロールに信頼ポリシーが必要です。

  4. 既存のテーブルがある場合は、オプション) Amazon DynamoDB からのインポートGraphQL を自動的に生成するで概説されている通り[CRUD]、[リスト]、および [クエリ] の各オペレーションを自動的に生成することもできます。ただし、このチュートリアルでは、選択を解除したままにします。

スキーマでページ分割とリレーションが使用される (GraphQL 接続による) チュートリアルの高度なセクションに進まない場合には、「リゾルバーを設定する」に直接進むことができます。

ページ分割とリレーションで高度なセクションを実行している場合は、両方とも文字列型である、todoidのプライマリキーとcommentidのソートキーを持つComments という名前のテーブルで上記を繰り返す必要があります。さらに、文字列型のtodoidパーティションキーを持つtodoid-indexというテーブル上にグローバルセカンダリインデックスを作成する必要があります。これを手動で作成するには、Amazon DynamoDB コンソールまたは以下の AWS CloudFormation スタックを使用します。

Comments テーブルのコード PutItem とコード Query に対する IAM アクセス許可が必要です。前に示したように新しいロールの作成を使用することをお勧めします。

これでデータソースを接続したので、リゾルバーを使用してこれをスキーマに接続することができます。「リゾルバーを設定する」に進んでください。

IAM 信頼ポリシー

データソースに既存の IAM ロールを使用している場合は、Amazon DynamoDB テーブルのPutItemなどのAWSのリソースに対してオペレーションを実行するための適切なアクセス許可をロールに与える必要があります。また、そのロールの信頼ポリシーを次のポリシー例のように変更して、AWS AppSync がそのロールを利用してリソースにアクセスできるようにする必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

また、信頼ポリシーに条件を追加して、必要に応じてデータソースへのアクセスを制限することもできます。現在、SourceArnおよびSourceAccountキーはこれらの条件で使用できます。たとえば、次のポリシーでは、データソースへのアクセスを123456789012 アカウントに制限しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

AWSAppSync のAWS Lambdaリゾルバーのクロスアカウントアクセスの詳細については、AWSAppSync のクロスアカウントAWS Lambdaリゾルバの構築を参照してください。

または、データソースへのアクセスを、次のポリシーを使用するabcdefghijklmnopqのような特定の API に制限することもできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:appsync:us-west-2:123456789012:apis/abcdefghijklmnopq" } } } ] }

次のポリシーを使用して、us-east-1のような特定のリージョンからのすべてのAWSAppSync API へのアクセスを制限することができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:appsync:us-east-1:123456789012:apis/*" } } } ] }