标签: aws-lambda

使用 CFLAGS 和 PIP 缩小 AWS Lambda 部署包以适应 sklearn

我正在使用 Lambda 处理程序加载腌制的机器学习模型,因此我需要 sklearn(如果未包含,我会收到“ModuleNotFoundError:没有名为 'sklearn' 的模块”)

因此,我使用 sklearn 在 Docker 中创建了一个新的部署包。

但是当我尝试上传新的 lambda.zip 文件时,我无法保存 lambda 函数。我收到错误:解压后的大小必须小于 262144000 字节

我做了一些谷歌搜索,发现了两个建议:(1)将 CLFAG 与 PIP 结合使用,(2)使用 Lambda Layers。

我不认为图层会起作用。将我的部署包的部分内容移动到层不会减少总大小(并且AWS 文档指出“函数和所有层的解压缩总大小不能超过解压部署包大小限制 250 MB”。

CFLAGS 听起来很有希望,但我以前从未使用过 CFLAGS,并且遇到了错误。

我正在尝试添加标志:-Os -g0 -Wl,--strip-all

在 CLFAGS 之前,我的 docker pip 命令是:pip3 install requests pandas s3fs datetime bs4 sklearn -t ./

首先我尝试:pip3 install requests pandas s3fs datetime bs4 sklearn -t -Os -g0 -Wl,--strip-all ./

这产生了各种错误“没有这样的选项:-g”

然后我尝试了CFLAGS = -Os -g0 -Wl,--strip-all pip3 …

python pip amazon-web-services scikit-learn aws-lambda

7
推荐指数
1
解决办法
3568
查看次数

如何通过 aws web 控制台在 aws lambda 中添加描述

在 AWS 中,我在 aws 控制台中创建了一个 lambda,创建后描述为空,有什么方法可以从 aws Web 控制台编辑和添加描述吗?我找不到是否有任何字段可以做到这一点。

这是屏幕截图 awslambda 列表没有描述

amazon-web-services aws-lambda

7
推荐指数
2
解决办法
2875
查看次数

无服务器我将图像上传到 S3 在部署后损坏,仅本地工作

我尝试将图像上传到 S3 使用serverless和 NodeJS,但上传后出现问题。在本地使用中,serverless-offline一切都像冠军一样工作,但部署后我收到此错误。然后我尝试拦截并检测发生了什么并看到这个结果:

图像主体中出现了一些奇怪的字符,例如<0x0a> 0x01 0x04

在此输入图像描述

我也尝试过使用serverless-apigw-binary,但运气不好。

image-upload aws-lambda serverless

7
推荐指数
2
解决办法
3665
查看次数

AWS API Gateway 集成响应 - 当响应包含换行符时,Lambda 错误正则表达式无法匹配

我有 API Gateway 作为 lambda 函数的触发器。每当我的 lambda 引发异常时,它就会与集成响应中配置的模式匹配。问题是,如果异常包含换行符,则该模式将被忽略,并且默认返回 200 作为状态代码。

要重现该问题:

  1. 使用 python 3.6 创建 lambda 并添加 API Gateway 作为触发器。
  2. 在 API 网关中,将集成响应正则表达式配置为“内部服务器错误。*”到自定义代码 500。(这意味着每当 lambda 返回前缀为“内部服务器错误”的消息时,它将被视为异常,状态代码将设置为500)。
  3. 在 lambda 中,引发包含“\n”新行的异常消息。
  4. 当您从 API Gateway 触发 lambda 时,它会返回 200 而不是 500 作为状态代码。

注意:如果从异常消息中删除换行符,它会正常工作并按预期返回 500。

有人遇到同样的问题吗?有什么解决办法吗?

http-status-codes amazon-web-services aws-lambda aws-api-gateway

7
推荐指数
1
解决办法
665
查看次数

AWS Lambda 未显示 Python 3.8 中的异常堆栈跟踪原因

我使用运行时 Python 3.8 将以下代码部署到 AWS Lambda。

\n\n
try:\n    raise Exception(\'my exception\')\nexcept Exception as e:\n    raise ValueError(\'my exception 2\') from e\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 CloudWatch 中,我希望看到像这样的异常链:

\n\n
Traceback (most recent call last):\n  File "/var/task/handler.py", line 2, in <module>\n    raise Exception(\'my exception\')\nException: my exception\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n  File "/var/task/handler.py", line 4, in <module>\n    raise ValueError(\'my exception 2\') from e\nValueError: my exception 2\n
Run Code Online (Sandbox Code Playgroud)\n\n

相反,我只看到 CloudWatch 中报告的第一个异常,如下所示:

\n\n
[ERROR] ValueError: my exception 2\nTraceback …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services python-3.x aws-lambda

7
推荐指数
1
解决办法
4992
查看次数

用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误

我是 AWS 新手。我正在尝试使用 Lambda 函数连接到 AWS RDS postgreSQL 实例。我遵循了aws 文档。但它使用 python 来执行 Lambda 函数。下面是我的代码。

'use strict';
var pg = require('pg');
exports.handler = function (event, context) {
    var dbConfig = {
        username: '<username>',
        password: '<password>',
        database: '<database>',
        host: '<db-endpoint>',
    };
    var client = new pg.Client(dbConfig);
    try {
        client.connect();
        context.callbackWaitsForEmptyEventLoop = false;
        client.end();
    }
    catch (err) {
        console.log(err);
        client.end();
    }
};
Run Code Online (Sandbox Code Playgroud)

我收到如下超时错误

START RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847 Version: $LATEST
2020-06-15T16:28:18.911Z    368e619e-ed9d-4241-93a5-764ee01aa847    INFO    connected
END RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847
REPORT RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847  Duration: 20020.16 ms …
Run Code Online (Sandbox Code Playgroud)

postgresql amazon-rds node.js aws-lambda

7
推荐指数
1
解决办法
6697
查看次数

如何防止AWS Lambda从SQS队列中删除消息

我有一个 Lambda 函数,当消息发送到 SQS 队列时,它将发送 SNS 通知。但我观察到 Lambda 会在处理完消息后从队列中删除该消息,并且此处提到了这一点

有没有一种方法可以让 lambda 失败,而不用在 java.lang.String 中实际抛出新的异常。

java amazon-sqs amazon-web-services aws-lambda

7
推荐指数
1
解决办法
6430
查看次数

如何在创建新 EC2 实例时创建自动 Cloudwatch 警报

我想创建一个 lambda 函数,每当创建新的 EC2 实例时都会触发该函数,此 Lambda 函数应自动在此新实例上配置 StatusCheck 警报。这样我就不必在每次创建新实例时手动配置 cloudwatch 警报。有人可以帮助编写完成此任务的 lambda 函数代码吗?

我有这样的事情:

   response = client.put_metric_alarm(
    AlarmName='StatusCheckFailed-Alarm-for-i-1234567890abcdef0',
    AlarmActions=[
        'arn:aws:sns:us-west-2:111122223333:my-sns-topic',
    ],
    MetricName='StatusCheckFailed',
    Namespace='AWS/EC2',
    Statistic='Maximum',
    Dimensions=[
        {
            'Name': 'InstanceId',
            'Value': 'i-1234567890abcdef0'
        },
    ],
    Period=300,
    Unit='Count',
    EvaluationPeriods=2,
    Threshold=1,
    ComparisonOperator='GreaterThanOrEqualToThreshold')
Run Code Online (Sandbox Code Playgroud)

但我必须将 cloudwatch 规则中的实例 ID 作为输入映射到 Lambda。由于该函数会自动触发,因此无法每次手动输入实例 ID。

automation amazon-web-services amazon-cloudwatch aws-lambda

7
推荐指数
1
解决办法
2882
查看次数

AWS API 请求标头中的 Content-Type 为小写

我正在使用 AWS Cloudfront 和 API 网关作为文件上传 API。我已将相同的代码部署到两个不同但相同的环境。这两个环境都是由相同的 cloudformation 脚本构建的。我们遇到了一个奇怪的问题

当我们在环境 A 中上传文件时,我们收到以下请求

 "headers": {
    
    "content-type": "multipart/form-data; boundary=----WebKitFormBoundarygPe3hR4e1dTzLdBt",
Run Code Online (Sandbox Code Playgroud)

然而,在环境中,BI 正在关注

 "headers": {
   
    "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundarygPe3hR4e1dTzLdBt",
Run Code Online (Sandbox Code Playgroud)

区别在于内容类型。在环境 A 中,我得到小写的 Content-Type。不知道为什么。此行为在所有浏览器中都是一致的。

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

7
推荐指数
1
解决办法
2967
查看次数

如何使用 Serverless Framework 管理 Lambda 内 Aurora Serverless 数据 api 的 typeORM 连接

我在用着:

我正在连接到数据库,就像 github 中描述的那样,

const connection = await createConnection({
      type: 'aurora-data-api-pg',
      database: 'test-db',
      secretArn: 'arn:aws:secretsmanager:eu-west-1:537011205135:secret:xxxxxx/xxxxxx/xxxxxx',
      resourceArn: 'arn:aws:rds:eu-west-1:xxxxx:xxxxxx:xxxxxx',
      region: 'eu-west-1'
    })
Run Code Online (Sandbox Code Playgroud)

这就是我在 Lambda 函数中使用它的方式

export const testConfiguration: APIGatewayProxyHandler = async (event, _context) => {
  let response;
  try {
    const connectionOptions: ConnectionOptions = await getConnectionOptions();
    const connection = await createConnection({
      ...connectionOptions,
      entities,
    });
    const userRepository = connection.getRepository(User);
    const users = await userRepository.find();

    response = {
      statusCode: 200,
      body: JSON.stringify({ users }),
    }; …
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework typeorm aws-aurora-serverless

7
推荐指数
1
解决办法
6394
查看次数