使用AWS AppSync可以通过在GraphQL模式中定义自定义变异来同时更新两个表。以下是一个示例解决方案:
假设有两个DynamoDB表,一个名为TableA,另一个名为TableB。我们的目标是使用AppSync变异同时更新这两个表。
首先,我们需要在AppSync的GraphQL模式中定义一个自定义变异,该变异将接收输入参数并同时更新两个表。例如,我们可以定义一个名为updateTables变异:
schema.graphql:
type Mutation {
updateTables(input: UpdateTablesInput!): Boolean
}
input UpdateTablesInput {
id: ID!
fieldA: String!
fieldB: String!
}
然后,在AppSync的管道中创建一个Lambda函数来处理该变异。该函数将接收变异的输入参数,并使用AWS SDK来更新两个表。以下是一个使用Node.js的示例Lambda函数的代码:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB();
exports.handler = async (event) => {
const { id, fieldA, fieldB } = event.arguments.input;
try {
// 更新 TableA
await dynamodb.updateItem({
TableName: 'TableA',
Key: { id: { S: id } },
UpdateExpression: 'SET fieldA = :fieldA',
ExpressionAttributeValues: {
':fieldA': { S: fieldA },
},
}).promise();
// 更新 TableB
await dynamodb.updateItem({
TableName: 'TableB',
Key: { id: { S: id } },
UpdateExpression: 'SET fieldB = :fieldB',
ExpressionAttributeValues: {
':fieldB': { S: fieldB },
},
}).promise();
return true;
} catch (error) {
console.error(error);
return false;
}
};
最后,将Lambda函数与AppSync的数据源关联,并将updateTables变异的Resolver配置为该Lambda函数。这样,当调用updateTables变异时,将触发Lambda函数,并同时更新TableA和TableB。
请注意,以上代码示例仅用于演示目的,实际生产环境中可能需要根据实际需求进行更多的错误处理和验证逻辑。