标签: aws-lambda

索引处理程序未定义或未导出

我有一个运行良好的 lambda 函数,但我想导入一个包,所以我用 index.js 创建了一个目录并安装了我的 npm 包。

然后创建此文件夹的 zip 并使用上传

aws lambda 更新函数代码 --function-name smrtfac-test --zip-file fileb://lambda.zip

但现在我收到这个错误

index.handler is undefined or not exported
Run Code Online (Sandbox Code Playgroud)

原因可能是什么?myindex.jsnode_modules在同一个目录中。

aws-cli aws-lambda

27
推荐指数
2
解决办法
2万
查看次数

AWS Lambda:创建事件源映射时出错:配置模糊定义

创建事件源映射时出错:配置模糊定义.如果前缀对于相同的事件类型重叠,则在两个规则中不能具有重叠的后缀.

我在6-7天前从GUI控制台创建了一个事件,它运行正常.第二天事件刚刚失踪,我无法再在Lambda控制台GUI上看到它.但每个S3对象仍然似乎触发lambda函数不是问题.如果我看不到,那就不好了; 所以我删除了Lambda函数,在创建另一个新函数之前等了5-10秒.现在,当我尝试创建这样的事件源时,我收到相同的内容: 在此输入图像描述

当我单击"提交"时,事件源选项卡显示"您没有此功能的任何事件源",Lambda不会被触发; 这意味着整个应用程序流程现在已经崩溃:(

问题几乎与:" https://forums.aws.amazon.com/thread.jspa?messageID=670712 "但不知何故我不能回复该线程,所以我在这里创建了一个新线程.谁有人遇到这个问题?

事实上,我尝试回应现有的AWS论坛帖子:https://forums.aws.amazon.com/thread.jspa? messageID = 670712 򣯸, 但我一直收到这个有趣的错误:"你的邮件配额已达到. 请稍后再试.".我甚至没有张贴任何东西,我怎么能用完我的配额?

amazon-web-services aws-lambda

26
推荐指数
2
解决办法
2万
查看次数

比较AWS-lambda,Azure功能和Google Cloud功能

我想通过选择aws-lambda,azure函数或google云函数来开发无服务器项目,然后我想比较每个项目以便为我的项目选择更好的项目.

我需要为我的项目需求选择最稳定的无服务器技术.这些技术比较有什么材料吗?这些无服务器技术是否有任何受支持的框架?

azure aws-lambda google-cloud-functions azure-functions

26
推荐指数
2
解决办法
6819
查看次数

AWS API网关没有"Access-Control-Allow-Origin"标头

我坚持使用API​​网关的问题,我已经在这个AWS论坛上完成了所有其他的SO答案,并且已经通过他们的文档,但仍然没有乐趣.

我正在尝试使用AWS API网关设置API,该网关调用Lambda函数,该函数读取/写入DynamoDB中的表.

DynamoDB的Lambda函数正在运行.我在AWS中创建了一个API,并为它创建了一个GET和OPTIONS方法.我读AWS并没有强制执行只有GET/POST的选项,但是当没有OPTIONS方法时我在我的ajax调用中遇到了预检错误,所以我添加了一个.

目前为了取得进展,我没有使用API​​密钥或授权.我可以使用POSTMAN成功调用我的GET方法,POSTMAN返回DynamoDB表的内容.

但是当我尝试使用JQuery ajax调用时,我得到了

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

我可以看到在网络选项卡下使用Chrome开发工具,OPTIONS方法返回状态200,GET返回状态200,但出现上述错误.

我已尝试在OPTIONS和GET方法上启用CORS,在每次更改后重新部署API,尝试了以下(http://enable-cors.org/server_awsapigateway.html)但总是得到相同的错误安慰.

我正在从桌面上的文件执行ajax调用,因此origin是null,因为页面将部署到S3作为JS中的单个Web页面应用程序.

当我在我的GET和OPTIONS上启用CORS时,我可以看到Access-Control-Allow-Headers是'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'和Access-Control-Allow-Origin*是'*'

我的Ajax调用如下所示.我也尝试复制POSTMAN使用的确切标题,它具有Authorization标头集(我现在已在AWS中关闭)但我总是得到相同的错误

var awsHeaders = {};
awsHeaders['X-Amz-Date'] = '20161127T171734';

$('#add, #cloud').click(function() {

    $.ajax({

        type: 'GET',
        headers: awsHeaders,
        dataType : "json",
        url: '...',
        success: function (res) {

            console.log('response in GET:');
            console.log(res);

        },
        error: function(data) {
            console.log('in error');
            console.log(data);
        }

    });

});
Run Code Online (Sandbox Code Playgroud)

任何人都可以阐明我可能会失踪的东西吗?

非常感谢

更新 请参阅下面的答案,关于我如何根据DigitalKapteain评论解决这个问题 - 在我的Lambda函数的响应中设置'Access-Control-Allow-Origin':'*'标题.我在AWS文档中查找了这个,但无法找到它.此链接描述了Lambda和Lambda Proxy之间的区别,并说明了使用CORS时要执行的操作https://serverless.com/framework/docs/providers/aws/events/apigateway/

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

26
推荐指数
3
解决办法
2万
查看次数

如何在python中使用boto3查询cloudwatch日志

我有一个将指标写入 Cloudwatch 的 lambda 函数。虽然它写入指标,但它会在日志组中生成一些日志。

INFO:: username: simran+test@abc.com ClinicID: 7667 nodename: MacBook-Pro-2.local

INFO:: username: simran+test2@abc.com ClinicID: 7667 nodename: MacBook-Pro-2.local

INFO:: username: simran+test@abc.com ClinicID: 7668 nodename: MacBook-Pro-2.local

INFO:: username: simran+test3@abc.com ClinicID: 7667 nodename: MacBook-Pro-2.local
Run Code Online (Sandbox Code Playgroud)

我想x根据任何参数查询过去几小时内的AWS 日志,其中 x 可以是 12 到 24 小时之间的任何时间。

例如:

  1. 查询过去 5 小时内的 Cloudwatch 日志,其中 ClinicID=7667

或者

  1. 查询过去 5 小时内的 Cloudwatch 日志,其中ClinicID=7667username='simran+test@abc.com'

或者

  1. 查询过去 5 小时内的 Cloudwatch 日志,其中 username='simran+test@abc.com'

boto3在 Python 中使用。我可以在这方面有指导吗?

python amazon-web-services amazon-cloudwatch boto3 aws-lambda

26
推荐指数
2
解决办法
2万
查看次数

在AWS Lambda上使用nodejs"ref"模块时,"无效的ELF标头"

我刚刚向AWS Lambda上传了一个zip,其中包含"ref"(https://www.npmjs.com/package/ref),这是验证iOS Game Center身份验证令牌所必需的(如何验证Game Center用户)来自第三方node.js服务器).

不幸的是,调用它会导致"无效的ELF头"错误,

{
  "errorMessage": "/var/task/node_modules/ref/build/Release/binding.node: invalid ELF header",
  "errorType": "Error",
  "stackTrace": [
    "Module.load (module.js:356:32)",
    "Function.Module._load (module.js:312:12)",
    "Module.require (module.js:364:17)",
    "require (module.js:380:17)",
    "bindings (/var/task/node_modules/ref/node_modules/bindings/bindings.js:76:44)",
    "Object.<anonymous> (/var/task/node_modules/ref/lib/ref.js:5:47)",
    "Module._compile (module.js:456:26)",
    "Object.Module._extensions..js (module.js:474:10)",
    "Module.load (module.js:356:32)",
    "Function.Module._load (module.js:312:12)"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是在运行Yosemite的64位Macbook Pro上开发的,在本地运行代码没有问题.谷歌搜索"无效的ELF标题"几乎没有知道相关的结果,我真的不知道从哪里去.我是否可以在node.js区域更好地询问这个问题,或者这是相关领域,因为它可能是平台的问题?

amazon-web-services node.js aws-lambda

25
推荐指数
2
解决办法
3万
查看次数

在Python中使用MySQL和AWS Lambda的问题

我正在尝试使用AWS Lambda Python(Python btw中的初学者)启动并运行,但在包含MySQL依赖项方面存在一些问题.我试图按照指示在这里我的Mac上.

对于第3步,我在项目的根目录下执行命令会遇到一些问题

sudo pip install MySQL-python -t /
Run Code Online (Sandbox Code Playgroud)

错误:

例外:回溯(最近一次调用最后一次):文件"/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/basecommand.py",第122行,处于主状态= self .run(options,args)在运行os.path中的文件"/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/commands/install.py",第311行. join(options.target_dir,item)文件"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py",第292行,移动引发错误,"目标路径"%s '已存在'%real_dst错误:目标路径'/MySQL_python-1.2.5-py2.7.egg-info/MySQL_python-1.2.5-py2.7.egg-info'已存在

我最终编写了以下lambda函数(在我的Mac上运行正常),这是:

import MySQLdb

def lambda_handler(event, context):
   # Open database connection
   db = MySQLdb.connect(...)

   # prepare a cursor object using cursor() method
   cursor = db.cursor()

   sql = "SELECT * FROM Users"

   try:
      # Execute the SQL command
      cursor.execute(sql)
      # Fetch all the rows in a list of lists.
      results = cursor.fetchall()
      for row in results:
         fname = row[0]
         lname = row[1]
         age …
Run Code Online (Sandbox Code Playgroud)

python mysql amazon-web-services python-2.7 aws-lambda

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

使用Python 3与AWS lambda

可以使用在lambda中使用Python3构建的应用程序,而不仅仅是python2.7.可能会看看周围的选项 - https://gun.io/blog/announcing-zappa-serverless-python-aws-lambda/

AWS lambda文档提到了python2.7.

是否有一些示例代码,我可以尝试使用lambda的python3.0

python-3.x aws-lambda

25
推荐指数
2
解决办法
7019
查看次数

在Lambda中创建AmazonS3Client时出现OutOfMemoryError

我有一个AWS Lambda函数,配置只有128MB内存,由SNS(它本身由S3触发)触发,并将从S3下载该文件.

在我的功能中,我有以下内容:

public class LambdaHandler {

    private final AmazonS3Client s3Client = new AmazonS3Client();

    public void gdeltHandler(SNSEvent event, Context context) {
        System.out.println("Starting");
        System.out.println("Found " + eventFiles.size() + " event files");
    }
Run Code Online (Sandbox Code Playgroud)

我已经注释掉并从这篇文章中排除了所有的逻辑,因为我得到了一个OutOfMemoryError,我已经隔离到了创建AmazonS3Client对象.当我拿出那个物体时,我没有得到错误.上面的确切代码导致OutOfMemoryError.

我为这个函数分配了128MB的内存,真的不足以简单地获取凭据并实例化AmazonS3Client对象吗?

我试过给AmazonS3Client构造函数

new EnvironmentVariableCredentialsProvider()
Run Code Online (Sandbox Code Playgroud)

以及

new InstanceProfileCredentialsProvider()
Run Code Online (Sandbox Code Playgroud)

结果相似.

创建AmazonS3Client对象是否只需要更多内存?

下面是堆栈跟踪:

Metaspace:java.lang.OutOfMemoryError java.lang.OutOfMemoryError:com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder.build(BeanDeserializerBuilder.java:347)中的Metaspace,位于com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer( BeanDeserializerFactory.java:242)at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:143)at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:409)at com .fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:358)位于com.fasterxml.jackson.databind.deser的com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:265) .deserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:245)at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143)at com.fasterxml.jackson.databind.De serial.Context.findRootValueDeserializer(DeserializationContext.java:439)位于com的com.fasterxml.jackson.databind.ObjectReader._prefetchRootDeserializer(ObjectReader.java:1588),位于com的com.fasterxml.jackson.databind.ObjectReader.(ObjectReader.java:185). quickxml.jackson.databind.ObjectMapper._newReader(ObjectMapper.java:558)at com.fasterxml.jackson.databind.ObjectMapper.reader(ObjectMapper.java:3108)

当我尝试提供InstanceProfileCredentialsProvider或EnvironmentVariableCredentialsProvider时,我得到以下堆栈跟踪:

线程"main"中的异常java.lang.Error:java.lang.OutOfMemoryError:java.lang.Class中java.lang.Class.forName0(Native Method)的lambdainternal.AWSLambda.(AWSLambda.java:62)中的Metaspace. lambdaainternal.LambdaRTEntry.main上的forName(Class.java:348)(LambdaRTEntry.java:94)引起:java.lang.OutOfMemoryError:java.lang.ClassLoader中java.lang.ClassLoader.defineClass1(Native Method)的Metaspace. java.securityClassLoader.defineClass(URLClassLoader.java:467)java.securityClassLoader.defineClass(SecureClassLoader.java:142)中的javaC(ClassLoader.java:763)java.net.URLClassLoader.access $ 100(URLClassLoader. java:73)at java.net.URLClassLoader $ 1.run(URLClassLoader.java:368)at java.net.URLClassLoader $ 1.run(URLClassLoader.java:362)at java.security.AccessController.doPrivileged(Native Method)at java位于lambd的java.lang.ClassLoader.loadClass(ClassLoader.java:357)的java.lang.ClassLoader.loadClass(ClassLoader.java:424)中的.net.URLClassLoader.findClass(URLClassLoader.java:361)ainternal.EventHandlerLoader $ PojoMethodRequestHandler.makeRequestHandler(EventHandlerLoader.java:421)在lambdainternal.EventHandlerLoader.getTwoLengthHandler(EventHandlerLoader.java:777)在lambdainternal.EventHandlerLoader.getHandlerFromOverload(EventHandlerLoader.java:802)在lambdainternal.EventHandlerLoader.loadEventPojoHandler(EventHandlerLoader.java :888)lambdainternal.EventHandlerLoader.loadEventHandler(EventHandlerLoader.java:740)lambdainternal.AWSLambda.findUserMethodsImmediate(AWSLambda.java:126)lambdainternal.AWSLambda.findUserMethods(AWSLambda.java:71)lambdainternal.AWSLambda.startRuntime(AWSLambda) .java:219)在lambdainternal.AWSLambda.(AWSLambda.java:60)... 3更多START RequestId:58837136-483e-11e6-9ed3-39246839616a版本:$ LATEST …

amazon-s3 amazon-web-services aws-lambda

25
推荐指数
3
解决办法
6963
查看次数

API网关 - 发布multipart\form-data

似乎我的问题可能与类似.

我的API网关中有一个API,我正在通过POST的multipart/form-data文件的端点进行HTTP代理.

如果我直接调用http端点(而不是通过API网关) - 使用邮递员,它按预期工作,但是,使用API​​网关端点(通过邮递员)失败.

我已经比较了两个似乎相同的请求(通过fiddler和CloudWatch日志):

请求直接API调用(工作):

POST https://domainname/api/v1/documents HTTP/1.1
Host: api.service
Connection: keep-alive
Content-Length: 202
Authorization: AuthToken
Postman-Token: a75869d6-1d64-6b9f-513d-a80ac192c8e1
Cache-Control: no-cache
Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
docMetaInfo: some extra data needed
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB85rsPlMffA2fziS
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8

------WebKitFormBoundaryB85rsPlMffA2fziS
Content-Disposition: form-data; name=""; filename="Test.txt"
Content-Type: text/plain

This is a test Text File
------WebKitFormBoundaryB85rsPlMffA2fziS--
Run Code Online (Sandbox Code Playgroud)

来自API网关的请求(不工作):

POST https://GATEWAY_domainname/api/v1/documents HTTP/1.1
Host: api-Gateway.service
Connection: keep-alive
Content-Length: 202
Authorization: …
Run Code Online (Sandbox Code Playgroud)

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

25
推荐指数
4
解决办法
2万
查看次数