标签: aws-lambda

为什么AWS Lambda函数会针对单个事件多次调用?

我正在尝试创建执行以下过程的AWS Lambda函数.

  • 接收S3"Put"事件
  • 从S3获取fileA
  • 从S3调用lambda获取fileB
  • 仅启动一个EC2实例
  • 为新的EC2实例创建标记

问题:意外启动了多个(5)实例.

已成功创建实例,但还会启动其他4个实例.共启动了5个实例.

日志

在此功能的Log Streams中,我发现了4个Streams用于此调用.每个Stream都不显示任何错误或异常,但似乎该函数重复执行.

审讯

我猜测该功能已超时,然后重新运行.

然后,我Timeout从5s变为60s并将文件放在S3上.它以某种方式影响了.仅出现2个Log Streams,第一个显示该功能仅执行一次,第二个显示该功能已执行两次.已启动实例的数量为3.

但是,我不知道为什么要启动多个(3)实例.

欢迎任何评论!先感谢您 :-)

我的Lambda功能

我的Lambda功能如下.(它被简化为隐藏凭证信息,但它不会丢失其基本结构)

var AWS = require('aws-sdk');

function composeParams(data, config){
  var block_device_name = "/dev/xvdb";
  var security_groups = [
    "MyGroupName"
  ];
  var key_name = 'mykey';
  var security_group_ids = [
    "sg-xxxxxxx"
  ];
  var subnet_id = "subnet-xxxxxxx";

  // Configurations for a new EC2 instance
  var params = {
    ImageId: 'ami-22d27b22',      /* required */
    MaxCount: 1,                  /* required */
    MinCount: 1,                  /* required */ …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-ec2 amazon-web-services aws-sdk aws-lambda

8
推荐指数
1
解决办法
4735
查看次数

AWS Lambda中的Python请求超时

我正在尝试从我的AWS Lambda发出http请求,但它超时了.

我的代码看起来与此类似:

import requests

def lambda_handler(event, context):
    print('Im making the request')
    request.get('http://www.google.com')
    print('I recieved the response')
Run Code Online (Sandbox Code Playgroud)

但是当我测试这个时,我会超时.

输出是

Im making the request
END RequestId: id
REPORT RequestId: id    Duration: 15003.25 ms   Billed Duration: 15000 ms   Memory Size: 128 MB Max Memory Used: 18 MB  
2016-04-08T20:33:49.951Z id Task timed out after 15.00 seconds
Run Code Online (Sandbox Code Playgroud)

所以我知道问题不是找不到请求包,而是运行我的python代码.我只想弄清楚为什么它会超时.

python amazon-web-services aws-lambda

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

AWS Lambda访问VPC外部的RDS

RDS实例不在VPC(Classic)上; 它与允许某些CIDR/IP和EC2安全组的安全组相关联.

我想创建一个AWS Lambda函数,该函数将在此数据库上执行一些SQL语句,并且还向同一安全组中的EC2实例发出请求.是否可以允许Lambda访问此数据库?

amazon-web-services amazon-rds amazon-vpc aws-lambda

8
推荐指数
1
解决办法
5268
查看次数

我可以在AWS Lambda上使用wkhtmltopdf

问候,

我正在使用AWS Lambda函数合并存储在S3上的PDF文件.除此之外,我现在需要创建一个PDF文件(来自HTML和CSS).我试图使用wkhtmltopdf,但似乎我必须使用apt-get install安装它(我认为我无法访问AWS Lambda).

关于我该怎么做的任何想法?

有关wkhtmltopdf替换的任何建议吗?

谢谢!

wkhtmltopdf aws-lambda

8
推荐指数
4
解决办法
6849
查看次数

从NodeJS AWS Lambda函数查询MySQL数据库

我在AWS Lambda函数中查询我的MySQL数据库(从AWS远程托管)时遇到问题.

这是我的代码,除了Lambda函数的其余部分所需的部分(正在为Alexa技能调用):

  var mysql = require('mysql');
  var connection = mysql.createConnection({
        host     : '<myserver>',
        user     : '<myusername>',
        password : '<mypw>',
        database : '<mydatabase>'
  });
  connection.connect(function(err){
        if(!err) {
              console.log("Database is connected ... nn");
        }
        else {
              console.log("Error connecting database ... nn");
        }
  });

  connection.query("INSERT INTO Users (user_id) VALUES ('TESTNAME')");
  connection.end();
Run Code Online (Sandbox Code Playgroud)

当我从命令提示符运行节点时,这工作正常:

node index.js
Run Code Online (Sandbox Code Playgroud)

我正在使用通过npm在index.js目录下安装的"mysql"模块并压缩它并将其上传到我的Lambda函数.

同样,这适用于我的开发机器,但在测试我的Lambda函数时没有给出任何指示,因为它根本不会影响我的数据库.

我的问题扩展到Alexa和Lambda,就像它正确使用mysql Node.JS模块一样.

这是我当前的Lambda代码,当然这里的问题仍然是我的测试值 - >名为"TESTNAME"的用户名没有添加到我的MySQL数据库中.

我把查询放入连接回调中,正如第一条评论所暗示的那样,我正在使用我的新代码而不是更新上面的旧代码,只是为了记录我认为代码应该如何转换为我的Alexa Lambda函数:

更新的代码:

var mysql = require('mysql');
var connection = mysql.createConnection({
      host     : '<myserver>',
      user     : '<myusername>',
      password : '<mypw>',
      database …
Run Code Online (Sandbox Code Playgroud)

mysql amazon-web-services node.js aws-lambda

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

Amazon AWSClientFactory不存在

我创建了一个空的.Net Core应用程序并为Amazon.Core和Amazon.S3安装了nuget包.

然后我尝试使用S3来获取一个对象但是我在第一时间陷入困境......在程序集内部无法找到Amazon.AWSClientFactory.即使使用dotPeek,我也试图搜索这种工厂方法,但我找不到它.甚至来自亚马逊的示例代码都不起作用.

我应该在哪里找到这门课?

c# amazon-s3 amazon-web-services aws-sdk aws-lambda

8
推荐指数
1
解决办法
5758
查看次数

无服务器GraphQL订阅

我最近开始使用GraphQL,并且能够在AWS Lambda上成功设置它,为我提供了"无服务器"架构.但是,我想利用GraphQL订阅来获得更多实时功能.

我了解AWS Lambda不允许使用WebSockets,因为只要函数运行或达到超时限制,连接就会持续.

但是有没有办法设置GraphQL后端,以便它可以利用订阅并将其保留在AWS服务中,并使其像"无服务器"应用程序一样扩展.

类似于使用AWS Lambda进行GraphQL查询和变异,然后使用不同的AWS服务进行GraphQL订阅.

aws-lambda graphql serverless-framework graphql-subscriptions aws-appsync

8
推荐指数
2
解决办法
1690
查看次数

如何配置Amazon AWS Lambda函数以防止在响应中拖尾?

请看这个:

http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html

日志类型

仅当您使用值RequestResponse指定InvocationType参数时,才可以在请求中将此可选参数设置为Tail.在这种情况下,AWS Lambda会在x-amz-log-result标头中返回由Lambda函数生成的base64编码的最后4 KB日志数据.

有效值:无| 尾巴

所以这意味着任何具有调用函数的有效凭据的用户也可以读取此函数发出的日志?

如果是这样,这是一个明显的漏洞,可以为攻击者提供有关处理无效输入的有用信息.

如何配置Amazon AWS Lambda函数以防止在响应中拖尾?

更新1

1)关于评论:" 如果黑客可以调用你的Lambda函数,你会遇到比查看日志文件更多的问题. "

不正确:Lambda函数也可以使用SDK直接从客户端代码调用.

例如,请参阅"AWS Lambda in Action"一书中的下图:

在此输入图像描述

2)关于评论:" 这是一个什么样的漏洞?只有您提供AWS IAM凭证的人才能调用Lambda函数. "

当然,客户确实拥有一些凭据,大部分时间(例如,通过Amazon Cognito登录到您的Facebook帐户的移动应用程序).我应该相信我的所有用户吗?

3)关于评论:" 只有你已经记录了一些安全信息. "

日志可能包含合理的信息.我不是在谈论密码之类的安全信息,而只是帮助开发团队调试的信息,或安全团队发现攻击的信息.应用程序可能会记录所有类型的信息,包括为什么某些无效输入失败,这可以帮助攻击者了解什么是有效输入.此外,攻击者可以查看安全团队记录其攻击的所有信息.不好.根据您记录的内容,即使隐私也可能存在风险.

更新2

如果我能以某种方式检测TailLambda代码中的参数,它也将解决我的问题.然后,我只会失败并显示"Tail now allowed"消息.不幸的是,该Context对象似乎不包含此信息.

logging amazon-web-services aws-lambda

8
推荐指数
1
解决办法
414
查看次数

防止使用Cognito同时登录

我们有使用Cognito进行身份验证的React Native应用程序。我们希望防止同一用户ID同时从多个设备登录。

希望我们可以为此使用Cognito预身份验证触发器。不幸的是,似乎我们不能仅仅呼吁globalSignOut用户,因为那不会使已经发行且当前处于活动状态的令牌无效(请参阅https://github.com/amazon-archives/amazon-cognito-identity-js / issues / 21#issuecomment-331472144)。

另一个想法是,如果用户在其他地方登录,则拒绝登录。但是我们看不到一种可靠的方式来判断用户是否已经登录。我们可以查看是否为该用户发行了有效的令牌,但是看不到当前是否与活动会话相关联。

我们还考虑过维护自己的活动会话数据库,但是没有退出触发器,因此我们不知道何时从数据库中删除会话。

authentication amazon-web-services amazon-cognito aws-lambda react-native

8
推荐指数
3
解决办法
1016
查看次数

如何找到花费最多的lambda函数?

我的 AWS 账户中有大约 60 个 lambda 函数。

是否可以按成本(调用次数 * 一段时间内的持续时间)列出 AWS lambda 函数?

因为我要把他们的架构从 改为x86_64到 以arm64节省资金。我想从最昂贵的 lambda 函数开始做这件事。

aws lambda list-functions好像没有提供这个功能。

amazon-web-services aws-lambda

8
推荐指数
1
解决办法
3975
查看次数