标签: aws-lambda

从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
查看次数

AWS lambda 的分布式速率限制器

我正在为我正在构建的应用程序寻找分布式速率限制器的服务或解决方案。这些应用程序是并发 AWS lambda 函数。下游API的速率限制为1000笔交易/分钟。该速率由多个应用程序共享。对于我的应用程序,我将如何为此开发解决方案?

java rate-limiting amazon-web-services aws-lambda

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

面临问题 KeyError:“AWS_LAMBDA_RUNTIME_API”

我是 lambda 新手,其中尝试将 lambda 与 docker 图像一起使用。我需要使用我自己的 docker 镜像作为基础镜像,而不是 aws 提供的 lambda 镜像。下面是我的 docker 文件,基本映像是python:3.9.6。但是,当我尝试执行 lambda 函数时,出现以下错误。

我指的是下面的链接来执行下面的实现。AWS 文档链接

# Define function directory
ARG FUNCTION_DIR="/function/"

FROM python:3.9.6 as build-image

# Install aws-lambda-cpp build dependencies
RUN apt-get update && \
  apt-get install -y \
  g++ \
  make \
  cmake \
  unzip \
  libcurl4-openssl-dev

# Include global arg in this stage of the build
ARG FUNCTION_DIR
# Create function directory
RUN mkdir -p ${FUNCTION_DIR}

# Copy function code
COPY …
Run Code Online (Sandbox Code Playgroud)

python docker aws-lambda

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

无法使用 Nodejs14.x ES 模块在 AWS lambda 中导入包

我有一个层,其中 node_modules 的路径是nodejs/node14/node_modules。

使用该层,我尝试在 Lambda 函数中导入一个包,例如“aws-cloudfront-sign”,如下所示:

import cfsign from 'aws-cloudfront-sign'
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

Cannot find package 'aws-cloudfront-sign' imported from /var/task/signer.js\nDid you mean to import aws-cloudfront-sign/lib/cloudfrontUtil.js?
Run Code Online (Sandbox Code Playgroud)

但是如果我像这样导入包:

import cfsign from '/opt/nodejs/node14/node_modules/aws-cloudfront-sign/lib/cloudfrontUtil.js'
Run Code Online (Sandbox Code Playgroud)

它成功了。

你知道为什么吗?如何正确导入包?

aws-lambda node-js-14 esmodules

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

用于无服务器长时间运行任务的 Lambda 替代方案

我正在使用 AWS Step 函数,其中有一个地图任务。对于映射任务输入中的每个项目,计划触发一个 Lambda 函数。我就是这样设计线框的。

但现在功能代码发生了变化,新代码在CPU上需要大约1个多小时,并且也有可能在GPU支持下运行它。

因此,我需要用另一个无服务器 aws 服务替换 Lambda 函数。请建议使用哪种服务?

谢谢。

amazon-web-services aws-lambda

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

了解SQS消息接收量

我有一个队列,应该接收 lambda 函数发送的消息。该函数应该只发送每个不同的消息一次。然而,我在控制台上看到了可怕的接收计数: 在此输入图像描述

由于我找不到任何关于接收计数的简单英语解释,我需要咨询 StackOverflow 社区。我有两个理论需要验证:

  1. 实际上没有那么多消息,“接收计数”之所以这么高,只是因为我轮询了消息很长时间,所以消息被捕获了不止一次;
  2. 将消息发送到队列的函数是 SQS 触发的,这些消息可能由多个处理器处理。虽然我VisibilityTimeout已经设置了,但是处理完的消息会被删除吗?如果它们没有被留下,就没有理由再次捕获和处理它们。

任何调试建议将不胜感激!

amazon-sqs amazon-web-services aws-lambda

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

切换到 18.x 后,Lambda 函数无法加载 AWS sdk

我将 Lambda 函数从 node12.x 升级到了 node18.x

该代码在 12.x 上运行得很好,切换到 18.x 后,我无法再包含 AWS sdk:

我曾经通过简单地输入以下内容来包含它:

var AWS = require('aws-sdk');
Run Code Online (Sandbox Code Playgroud)

我现在收到这个错误

"Error: Cannot find module 'aws-sdk'
Run Code Online (Sandbox Code Playgroud)

我想如果我能让AWS sdk正确加载该功能应该没问题,有什么想法吗?

谢谢

amazon-web-services node.js aws-lambda aws-sdk-nodejs

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