标签: aws-lambda

使用http端点访问lambda中的HTTP请求(标头,查询字符串,cookie,正文)对象

我试图看看如何从lambda代码中访问请求标头和正文值.如果请求主体是JSON格式,它似乎会自动解析并在事件对象中可用.

如何在Lambda中访问任何类型的传入"Content-Type"请求的完整查询字符串,请求正文,请求标头(cookie)?


以下编辑是我收集的信息,以帮助解决可能相关或不相关的问题.如果你愿意,请忽略它们.


编辑:

我在这里和这里详细介绍了SE的现有问题.按照这个线程,使用$input.json('$')应该做的伎俩.我猜上面这些链接的答案已经过时,因为默认情况下API网关似乎在请求中识别JSON,如果是这样,它在event对象中可用,而不配置任何映射模板.

按建议设置映射对我不起作用.它不包含请求标头信息.

以下是有关如何配置的屏幕截图.

在此输入图像描述


在此输入图像描述

"headers"键返回一个空值.使用$input.params('$')或"$input.params('$')"错误输出.


编辑2

尝试在方法请求中定义标头.仍然没有在lambda中获取User-Agent值.

在此输入图像描述


编辑3

我在API网关上使用了以下模板映射

{
    "request": $input.json('$'),
    "headers": "$input.params()"
}
Run Code Online (Sandbox Code Playgroud)

以及lambda中的以下代码

context.succeed("event.key32:"+JSON.stringify(event, null, 2) );
Run Code Online (Sandbox Code Playgroud)

API网关生成的响应显示了这一点 在此输入图像描述

查看响应中的"标题"值,看起来AWS-SDK/API网关/ cloudfront剥离了从HTTP客户端收到的所有标头?以下是$ input.params().标头返回的JSON的全文

header={CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, Content-Type=application/json, Via=1.1 5d53b9570d94ce920abbd471.cloudfront.net (CloudFront), 1.1 95eea7baa7ec95c9a41eca9e3ab7.cloudfront.net (CloudFront), X-Amz-Cf-Id=GBqmObLRy6Iem9bJbVPrrW1K3YoWRDyAaMpv-UkshfCsHAA==, X-Forwarded-For=172.35.96.199, 51.139.183.101, X-Forwarded-Port=443, X-Forwarded-Proto=https}}
Run Code Online (Sandbox Code Playgroud)

它在标头中没有User-Agent字符串,尽管如上面的屏幕截图所示,它是由REST客户端发送的.有趣的是,整个查询字符串可用.不确定这是否是访问它的预期方式.

amazon-web-services aws-sdk aws-lambda aws-api-gateway

12
推荐指数
1
解决办法
9945
查看次数

AWS Lambda函数的运行时配置

我有一个需要连接到远程TCP服务的AWS Lambda函数.将Lambda函数部署到AWS后,有没有办法使用远程服务的IP地址配置Lambda函数?或者我必须在部署之前将配置烘焙到打包的Lambda函数中?

aws-lambda

12
推荐指数
2
解决办法
3933
查看次数

AWS Lambda:如何使用java从Lambda函数访问S3存储桶

我写了一个Lambda函数.此函数上传到s3Bucket ="my-lambda",映射到角色hello-lambda-role和regionName ="us-west-2".

现在我想访问s3Bucket ="some-other",我们用'hello-lambda-role'映射了Policy,它位于"eu-west-1"区域.

这是我使用AmazonS3Client的API类.我的目的是从桶中获取一些文件"some-other".但在此之前,我需要建立连接.

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class LambdaFunctionHandler implements RequestHandler<Request, Response> {

    public Response handleRequest(Request request, Context context) {
        String greetingString = String.format("Hello %s %s.",
                request.firstName, request.lastName);
        return new Response(greetingString);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是列出存储桶的类.

public class Test{
    private static final Log logger = LogFactory.getLog(InvokeLambda.class);
    private static final String awsAccessKeyId = "XXXXX";
    private static final String awsSecretAccessKey = "XXXXX";
    private static final String regionName = "eu-west-1";
    private static Region region;
    private static AWSCredentials credentials;
    private …
Run Code Online (Sandbox Code Playgroud)

java amazon-s3 amazon-web-services aws-lambda

12
推荐指数
1
解决办法
1万
查看次数

12
推荐指数
1
解决办法
4148
查看次数

AWS CloudFormation - 在 RDS 实例准备好后创建表?

CloudFormation 业余爱好者在这里。一直在网上查找,但找不到任何关于在我的 RDS 实例通过 CloudFormation 建立后我将如何创建表的参考资料。是否可以指定一个 Lambda 来启动和创建所有表,或者指定一个要应用的 SQL 文件?这方面的标准模式是什么?

amazon-web-services amazon-rds aws-cloudformation aws-lambda

12
推荐指数
1
解决办法
4786
查看次数

如何从 Catch 状态的前一个函数访问 Step Function 中的错误信息

我想知道如何访问我的 lambda 函数中引发的自定义异常的原因。我需要在 Step Functions 工作流程结束时访问它,如下所示。

下图是执行失败的示例。错误(error-info对象,有它自己Error和Cause部门)的输出被发现ParseTextractOutput,但我想知道如何访问它OutputNotFound,如下图所示。

阶跃函数图

在此处输入图片说明

输出

的输出ParseTextractOutput是

{
  "event"...
  "error-info": {
    "Error": "OutputNotFoundException",
    "Cause": "{\"errorMessage\": \"Contents of Textracted file: {...}}"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想在这些字段(Step Functions 定义)中以某种方式访问​​这些数据:

...
  "States": {
    "OutputNotFound": {
      "Type": "Fail",
      "Error": "<useful stuff here, like $.error-info.Error or something>",
      "Cause": "<useful stuff here, like $.error-info.Cause or something>"
    },
...
    "ParseTextractOutput": {
      "Type": "Task",
      "Resource": "functionARN",
      "Catch": [
        {
          "ErrorEquals": ["OutputNotFoundException"],
          "ResultPath": "$.error-info",
          "Next": …
Run Code Online (Sandbox Code Playgroud)

python state-machine amazon-web-services aws-lambda aws-step-functions

12
推荐指数
1
解决办法
2613
查看次数

AWS Lambda - Runtime.ImportModuleError:错误:找不到模块“jmespath”

我正在使用无服务器框架使用 aws lambda,我将运行时从 更改nodejs8.10为nodejs10.x,然后我得到了一个错误跟踪,

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'jmespath'","stack":["Runtime.ImportModuleError: Error: Cannot find module 'jmespath'","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:36:30)","    at Module._compile (internal/modules/cjs/loader.js:701:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)","    at Module.load (internal/modules/cjs/loader.js:600:32)","    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)","    at Function.Module._load (internal/modules/cjs/loader.js:531:3)","    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)","    at startup (internal/bootstrap/node.js:283:19)"]}
Run Code Online (Sandbox Code Playgroud)

这个问题的原因是什么,如何解决?

amazon-web-services node.js aws-lambda serverless-framework

12
推荐指数
1
解决办法
1万
查看次数

Lambda 别名和 CloudFront:函数 ARN 必须引用特定的函数版本

我有一个 Lambda,当使用包含版本(例如...:function:MyFunction:123)的 ARN 引用时,它用作 CloudFront 源请求处理程序。我已经PROD为版本 123创建了一个别名,我想改用它。

使用...:function:MyFunction:PRODARN 会产生以下错误

com.amazonaws.services.cloudfront.model.InvalidLambdaFunctionAssociationException:
The function ARN must reference a specific function version. (The ARN
must end with the version number.) ARN: 
...:function:MyFunction:PROD (Service: AmazonCloudFront; Status Code:
400; Error Code: InvalidLambdaFunctionAssociation; Request ID:
d407f350-bc7f-11e9-8498-e7f23762c03e)
Run Code Online (Sandbox Code Playgroud)

完全删除版本(即...:function:MyFunction)根据文档应该是最新的,使用$LATEST或LATEST版本都失败并出现相同的错误。

我发现的所有文档都表明这应该有效,所以我不确定我在这里搞砸了什么。我创建的 IAM 角色的权限可能有问题吗?

amazon-web-services amazon-cloudfront aws-lambda

12
推荐指数
1
解决办法
1469
查看次数

如何在单击按钮以节流的情况下取消 lambda 函数的节流

我决定单击 aws lambda 界面上的油门按钮,以防止在调试过程中的问题时进一步激活该功能。我看现在没有办法移除油门。

现在我点击了油门按钮,我该如何移除油门?

问候康泰

aws-lambda

12
推荐指数
1
解决办法
4143
查看次数

AWS Lambda:函数空闲

我正在研究我的项目的 Lambda,我看到其中一个是空闲的。在仪表板页面的顶部,我看到带有文本的块:

函数 __ 空闲。要重新激活您的功能,请选择“恢复”。

我对此有点困惑,因为此功能与其他未标记为空闲但也已几个月未启动的功能非常相似。由于我没有在 AWS 文档中找到答案,我很感激有人向我解释处于空闲状态和非空闲状态的函数之间有什么区别,以及函数如何/为什么变为空闲?

amazon-web-services aws-lambda

12
推荐指数
2
解决办法
1590
查看次数