问题描述
我在 nodeJs 中有一个 ApiGateway lambda,它有一个工作正常的 POST 方法。我想要做的是在 ApiGateway 执行后触发另一个 lambda。 我已经有一些 lambdas 调用其他 lambdas,但我无法使这个工作,我认为这是因为缺少 ApiGateway 设置。
Lambda A(ApiGateway,接收事件):
module.exports.LambdaA = async (event,context,callback) => {
const response = {
statusCode: 200,body: JSON.stringify({ "message": "everything is ok" }),};
callback(null,response);
} catch(error) {
console.log("> Error: " + error);
error => callback(error,null);
}
};
Lambda B(不是 ApiGateway):
module.exports.LambdaB = function(event,callback) {
console.log("> responsePayload: "+ event['responsePayload']);
let query = "SELECT 1 FROM table_name;"
poolCluster.getConnection(function(error,connection) {
// handles connection and query
});
}
};
触发时,Lambda A 返回 OK,我希望 Lambda B 被触发,但这不会发生。如果我单独测试 Lambda B,发送预期的请求,它工作得很好。 两个 Lambda 具有相同的角色。 在 serverless.yml 我有:
provider:
name: aws
stage: dev
runtime: nodejs10.x
profile: default
timeout: 20
region: eu-west-1
versionFunctions: true
iamRoleStatements:
- Effect: "Allow"
Action:
- "sns:*"
Resource: "*"
- Effect: Allow
Action:
- lambda:InvokeFunction
- lambda:InvokeAsync
Resource: "*"
- Effect: "Allow"
Action:
- "glue:GetDatabase"
- "glue:GetDatabases"
- "glue:GetTable"
- "glue:GetTables"
Resource: "*"
- Effect: "Allow"
Action:
- "secretsmanager:GetSecretValue"
Resource: secret-value-ARN
- Effect: "Allow"
Action:
- "s3:Getobject*"
- "s3:GetBucket*"
- "s3:List*"
Resource: "*"
package:
individually: true
exclude:
- "**/*"
functions:
LambdaA:
handler: lambda_a/index.handlerA
events:
- http:
path: lambda_a/handlerA
method: post
package:
include:
- lambda_a/**
destinations:
onSuccess: LambdaB-ARN
onFailure: SNS-ARN
LambdaB:
handler: lambda_b/index.handlerB
package:
include:
- lambda_b/**
我更改了信任关系,以便此角色信任 apigateway.amazonaws.com ,但似乎没有效果。 任何帮助将不胜感激,谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)