【发布时间】:2019-07-27 06:48:24
【问题描述】:
我有一个 lambda 函数,当我的 dynamodb 表发生更改时会触发该函数。当我使用 lambda 解析器时,我只能从我的 appsync 中调用一个 lambda 函数,这不是我想要做的。
我正在尝试遵循此处提供的答案:
How do I subscribe directly to my AWS AppSync data source?
但我在第 3 步时遇到问题。
谢谢
按照@Aaron_H 的回答,这是我的 lambda 函数:
module.exports.triggerStream = async (event, context, callback) => {
if(event.Records[0].eventName === 'INSERT'){
return new Promise((resolve, reject) => {
console.log(event.Records[0].eventName)
console.log(JSON.stringify(context))
console.log(JSON.stringify(event));
const myData = { //this part is hardcoded for my tests
"query": `
mutation UpdateData($myDeviceID : String!, $myTs : String!, $myPayload: payloadInput){
updateData(deviceID : $myDeviceID, ts : $myTs, payload : $myPayload){
checkup
}
}
`,
"variables": {
"myDeviceID": "z55-temp",
"myTs": "1549512000",
"myPayload":{
"deviceId": "z55-temp",
"ts": 1549512000,
"value": 17.25
}
}
};
const data=JSON.stringify(myData)
const options = {
host: 'blablabla.appsync-api.us-east-1.amazonaws.com',
path: '/graphql',
method: 'POST',
headers: {'Content-Type': 'application/json',
"X-Api-Key" : "myApiKey"}
};
var req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.setEncoding('utf8');
resolve('Success');
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (e) => {
console.error(e);
reject(e.message);
});
// send the request
req.write(data);
req.end();
});
}
};
我也在使用无服务器框架,这是我的 lambda 函数的 serverless.yml 配置:
function:triggerStream:
handler: handler.triggerStream
events:
- stream:
type: dynamodb
batchSize: 1
startingPosition: LATEST
arn: myExistingTableArn
我的问题是我想使用 Amazon Cognito 用户池进行我的 appsync 授权。如果我的请求来自 Dynamodb 流,我应该如何在我的标头中使用 JWT 令牌?我有一个在我的表中插入数据的 IOT 设备。
谢谢!
【问题讨论】:
标签: aws-lambda amazon-dynamodb graphql aws-appsync