我通过设置指向AWS API Gateway端点的方式将AWS Lambda函数暴露给公共HTTP请求。
有两个部分:
- 创建并上传我的AWS Lambda函数
- 设置API网关,使HTTP端点指向Lambda函数
我想做这两个部分使用API调用而不是web接口。我可以使用AWS SDK和AWS CLI来完成第一部分。
然而,对于第二部分,我卡住了。在查看node.js的AWS SDK或AWS CLI
时,我没有发现提到API网关。是否有办法为Lambda函数设置API网关端点,以编程方式使用AWS API?
是的,可以通过AWS的API为AWS Lambda函数设置Amazon API网关端点。
虽然在Node.js和AWS CLI中用于JavaScript的AWS SDK还不支持Amazon API Gateway,但您可以使用Amazon API Gateway REST API来设置它们,而不需要官方SDK。在这种情况下,您可能会使用以下api:
- restapi:创建
- 资源:创建
- 方法:把
- 集成:将
- integrationresponse:把
- methodresponse:把
您可能希望使用第三方库将Amazon API Gateway与AWS Lambda集成,例如JAWS -stack/JAWS或r7kamura/fluct。
是…这绝对是可能的。下面是一些使用node.js的aws sdk的node.js代码。我在这里为方法集成做一个POST。现在你需要一些东西。希望这能帮到你…好运!
Gateway API使用的方法的ResourceId
网关API Rest Id
能够调用Lambda函数的调用角色的ARN
要积分的Lambda函数的ARN。
var AWS = require('aws-sdk');
api = new AWS.APIGateway();
var params = {
httpMethod: 'POST',
resourceId: [YOUR RESOURCE ID],
restApiId: [YOUR REST API ID],
type: 'AWS',
uri: [YOUR LAMBDA FUNCTION ARN],
integrationHttpMethod: 'POST',
credentials : [YOUR INVOKE ROLE ARN]
};
api.putIntegration(params, function (err, data) {
if (err) {
console.log('AWS Error', err);
} else {
console.log('Put Integration Method Created', data);
}
});
是的,这是可行的。
JAWS项目有一个很好的和简单的js实现,它工作得很好https://github.com/jaws-stack/jaws-api-gateway-client
最新的AWS CLI(1.99版)也完全支持API网关。http://docs.aws.amazon.com/cli/latest/reference/apigateway/index.html cli-aws-apigateway您可以将API端点指向Lambda函数。在API Gateway中创建新的HTTP方法时,选择"Integration type"为"Lambda Function",然后选择需要调用的Lambda函数。
主要的挑战是将API输入参数映射到Lambda模型对象,您可以手动定义映射或提供模型模式(使用json-schema)。
映射例子:
{
"firstname" : "$input.params('firstname')",
"lastname" : "$input.params('lastname')"
}