从Lambda中的API网关获取URL参数

时间:2016-03-22 03:09:44

标签: amazon-web-services lambda url-parameters aws-lambda

我希望有人可以帮我从Lambda中的AWS API网关获取传递的URL参数。

我有点困惑如何在Lambda代码中访问它。

对于API网关,我已按照以下步骤操作:

1)去资源 - >整合请求

2)点击模板下拉列表旁边的加号图标

3)在内容类型字段中明确键入 application / json

4)输入映射已输入:

{ "apiToken": "$input.params('apiToken')" }

因此,为了澄清,如何在Lambda函数中访问参数 apiToken

我一直在看演练和其他文档一段时间,我的大脑有点疲惫不堪。

感谢所有帮助和反馈:)

更新

所以,问题似乎是AWS网站AJAX保存没有保存我在映射中输入的内容(我在酒店wifi上也可以这样)。

现在,当我测试它时,我得到:

Received event: { appToken: '123456' }

在lambda的控制台日志中。但是,当我转到API网关时,部署响应是:

  

" errorMessage":"在完成请求之前退出流程"

任何想法?

  

P.S该功能在Lambda控制台中有效,但是当我使用Postman [POST + Param]进行测试时,它不起作用,上面提供了错误消息

更新2

这是我的整个Lambda函数

    console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
var http = require('http');

exports.handler = function(event, context) {



    var tableName = "clients";

    var appToken = event.params.appToken; //gr5f4sgnca25hki98
    dynamodb.getItem({
        TableName: tableName,
        Key: {
            ClientID: { S: appToken } }

    }, function (err, data)
{
    if (err) {
       context.done(err);
    } else {
        var url = data.Item.url.S + data.Item.api.S;
        console.log(url);
        console.log('Received event:', event.params.appToken);
        http.get(url, function(res) {
            // Continuously update stream with data
            var body = '';
            res.on('data', function(d) {
                body += d;
            });
            res.on('end', function() {
                var result = body.replace('\\', '');
                context.succeed(JSON.parse(result));
            });
            res.on('error', function(e) {
                context.fail("Got error: " + e.message);
            });
        });
    }
    });
};

在我的测试活动中,我有:

{
    "method": "POST",
    "params": {
        "appToken": "gr5f4sgnca25hki98"
    }
}

当我在Lambda中运行它时,respnse工作,它连接外部JSON文件并返回它。

然而,在邮递员中我收到错误:

  

" errorMessage":"在完成请求之前退出流程"

任何人都可以在控制台中看到为什么一切正常,当我在部署中尝试时,我仍然会收到错误?

当我打开XCODE并使用Alamofire测试此网址时,我收到此错误(如果有帮助)

  

字符72周围的无效序列

更新3(从API控制台测试)

从API控制台测试时,使用:

 {
"method": "POST",
"params": {
    "appToken": "gr5f4sgnca25hki98"
}
}
请求正文中的

。我明白了:

  

请求:/ sendtoclient

     

状态:200

     

延迟:1839毫秒

响应主体

  

{" errorMessage":"在完成请求之前退出流程" }

响应标头

  

{"内容类型":"应用/ JSON"}

日志

Execution log for request test-request
Tue Mar 22 17:28:27 UTC 2016 : Starting execution for request:    test-invoke-request
Tue Mar 22 17:28:27 UTC 2016 : HTTP Method: POST, Resource      Path: /sendtoclient
Tue Mar 22 17:28:27 UTC 2016 : Method request path: {}
Tue Mar 22 17:28:27 UTC 2016 : Method request query string:     {}
Tue Mar 22 17:28:27 UTC 2016 : Method request headers: {}
Tue Mar 22 17:28:27 UTC 2016 : Method request body before  transformations: {
"method": "POST",
"params": {
    "appToken": "gr5f4sgnca25hki98"
}
}
Tue Mar 22 17:28:27 UTC 2016 : Endpoint request body after transformations: { "appToken": "" }
Tue Mar 22 17:28:29 UTC 2016 : Endpoint response body before transformations: {"errorMessage":"Process exited before completing request"}
Tue Mar 22 17:28:29 UTC 2016 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=123456789, Connection=keep-alive, Content-Length=59, X-Amz-Function-Error=Unhandled, Date=Tue, 22 Mar 2016 17:28:29   GMT, Content-Type=application/json}
Tue Mar 22 17:28:29 UTC 2016 : Method response body after transformations: {"errorMessage":"Process exited before completing request"}
Tue Mar 22 17:28:29 UTC 2016 : Method response headers: {Content-Type=application/json}
Tue Mar 22 17:28:29 UTC 2016 : Successfully completed execution
Tue Mar 22 17:28:29 UTC 2016 : Method completed with status: 200

我不确定如何破译这个。任何帮助将非常感谢。然而我注意到了这一点:

 Endpoint request body after transformations: { "appToken": "" }

由于某些原因,我觉得可能很重要

1 个答案:

答案 0 :(得分:0)

你应该使用' event.apiToken'在你的功能基础上你给我们的映射。 {apiToken}在您的资源名称中吗?