标签: aws-lambda

API网关方法与lambda函数集成,但lambda函数声称它没有触发器

我有一个 lambda 函数,我想通过 HTTP 请求触发它。

当我单击add triggerlambda 函数时,我会得到一个 API Gateway API 设置:

 method: ANY
Run Code Online (Sandbox Code Playgroud)

伟大的。现在,当查看此 lambda 函数时,我看到已配置触发器。

但是,我想将触发器限制为仅允许POST请求。

因此,我删除了 API Gateway 方法ANY,并POST在同一资源下创建了一个新方法,使用的集成类型为Lambda Function. 我选择了我的区域,果然,我现有的 lambda 函数会自动完成。

但是,当我查看triggerslambda 函数本身的选项卡时,它显示没有触发器。

我缺少什么?

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

0
推荐指数
1
解决办法
461
查看次数

为什么 Lambda 突然抛出“请求已过期”错误?

我的Lambda函数通过create_instancesboto3模块创建EC2服务器。

我从早上就开始触发这个 Lambda,它创建实例的效果很好。但突然间,我不断收到这个奇怪的错误:

{
  "stackTrace": [
    [
      "/var/task/processing.py",
      54,
      "lambda_handler",
      "KeyName=keyname, SubnetId='subnet-<>', SecurityGroupIds=['sg-<>'])"
    ],
    [
      "/var/runtime/boto3/resources/factory.py",
      520,
      "do_action",
      "response = action(self, *args, **kwargs)"
    ],
    [
      "/var/runtime/boto3/resources/action.py",
      83,
      "__call__",
      "response = getattr(parent.meta.client, operation_name)(**params)"
    ],
    [
      "/var/task/botocore/client.py",
      251,
      "_api_call",
      "return self._make_api_call(operation_name, kwargs)"
    ],
    [
      "/var/task/botocore/client.py",
      537,
      "_make_api_call",
      "raise ClientError(parsed_response, operation_name)"
    ]
  ],
  "errorType": "ClientError",
  "errorMessage": "An error occurred (RequestExpired) when calling the RunInstances operation: Request has expired."
}
Run Code Online (Sandbox Code Playgroud)

发生了什么事?很确定这不是代码错误,因为从早上起就一直在运行相同的代码。

python amazon-web-services boto3 aws-lambda

0
推荐指数
1
解决办法
5144
查看次数

从 lambda 访问 s3 存储桶时出错 - InvalidBucketName

使用 Java AWS SDK,我创建了一个 lambda 函数来从 s3 存储桶读取 csv 文件。我已将存储桶公开,并且可以从任何浏览器轻松访问它和文件。为了测试它,我使用 lambda 控制台上的测试按钮。我只是使用 hello world 测试配置输入模板。
它失败了:

错误消息:指定的存储桶无效。(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketName;请求 ID:XXXXXXXXXXXXXXX)

Lambda 函数和 s3 存储桶位于同一区域 (us-east-1)。

我已将 AmazonS3FullAccess 添加到 lambda_basic_execution 角色。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();
Run Code Online (Sandbox Code Playgroud)

也尝试过

AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
Run Code Online (Sandbox Code Playgroud)

然后打电话

S3Object s3object = s3Client.getObject(new GetObjectRequest(
                bucketName, keyName));
Run Code Online (Sandbox Code Playgroud)

存储桶名称是:

https://s3.amazonaws.com/<allAlphaLowerCaseBucketName>
Run Code Online (Sandbox Code Playgroud)

键名是:

<allAlphaLowerCaseKeyName>.csv
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

amazon-s3 aws-sdk aws-lambda

0
推荐指数
1
解决办法
6640
查看次数

是否可以从另一个 lambda 设置环境变量

我有一个场景,我需要从另一个 lambda 设置一个环境变量。第一个 lambda 是 s3 触发器,它将处理上传到 s3 的 csv。然后,它将通过生成附加时间戳的表名称在 Dynamo 中创建一个表。我希望能够使这个 lambda 设置另一个将使用新创建的表的 lambda 的环境变量。是否可以做到这一点?如果可以,我们如何在 NodeJs 中做到这一点?

amazon-web-services node.js aws-lambda

0
推荐指数
1
解决办法
5163
查看次数

使用 Singleton 进行 Sequelize

我正在与Sequelizein合作node.js,想法是使用该Singleton模式。

阅读有关如何node使用模块缓存和一些单例示例的信息

我此时的文件是:

const DBManager = (function () {

  // Instance stores a reference to the Singleton
  let instance: any;

  let db: string = null;
  let user: string;
  let password: string;
  let host: string;
  let sequelize: Sequelize.Sequelize;

  function init(bdName: string) {
    db = bdName;
    user = process.env.MYSQL_DB_USERNAME || 'root';
    password = process.env.MYSQL_DB_PASSWORD || 'root';
    host = process.env.MYSQL_DB_HOST || 'localhost';

    return {
      open: () => {
        sequelize = new Sequelize(db, user, …
Run Code Online (Sandbox Code Playgroud)

singleton node.js sequelize.js aws-lambda serverless-framework

0
推荐指数
1
解决办法
4784
查看次数

AWS 计划的事件可能会重叠吗?

我想创建一个计划事件来运行 Lambda,每1 分钟执行一次 api 调用(cron 行行为)。

此设置的警告是;外部 api 不可靠/缓慢,并且 api 调用有时可能持续超过1 分钟。

所以,我的问题是;给定设置和场景 - AWS 会运行另一个计划事件并在上一个执行完成之前执行 lambda 吗?即重叠?

如果是的话;有没有办法将计划的事件配置为不“重叠”?

我对此做了一些初步研究并发现了这篇文章: https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html

看起来可以在函数级别设置并发限制?这是实现不重叠的预定 lambda 执行的方法吗?即设置函数的并发限制为1?

amazon-web-services amazon-cloudwatch aws-lambda

0
推荐指数
1
解决办法
1182
查看次数

无服务器框架 - AWS Lambda 依赖项超出限制

我正在使用 AWS(一种呼叫中心,使用 Twilio)参与一个无服务器项目。我之前还建过另外 2-3 个小项目。不过,我现在正在使用无服务器框架。到目前为止我还没用过。所以我在 AWS 和 Serverless 方面都是新手。

我以某种方式关注下一个链接: https://serverless.com/blog/flask-python-rest-api-serverless-lambda-dynamodb/

所以我基本上使用这个Python依赖项:Flask、Twilio、boto3(用于AWS)。请参阅下面的requirements.txt。我卸载了一些软件包,但是可能有一些我可以清理的软件包:

boto3==1.9.84
botocore==1.12.84
certifi==2018.11.29
chardet==3.0.4
Click==7.0
docutils==0.14
Flask==1.0.2
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10
jmespath==0.9.3
lazy-object-proxy==1.3.1
MarkupSafe==1.1.0
pipdeptree==0.13.2
PyJWT==1.7.1
PySocks==1.6.8
python-dateutil==2.7.5
pytz==2018.9
requests==2.21.0
s3transfer==0.1.13
six==1.12.0
twilio==6.23.1
urllib3==1.24.1
Run Code Online (Sandbox Code Playgroud)

使用无服务器框架,我能够毫无问题地部署(无服务器部署)项目,直到安装了 boto3。但是,现在我超出了允许的依赖项大小并收到此错误:

An error occurred: AppLambdaFunction - Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Run Code Online (Sandbox Code Playgroud)

我被困在这个问题上。我想我可以用旧的方式解决它,而不使用无服务器框架(直接在AWS中),但我非常希望解决这个问题。

是否可以部分安装boto3?我的意思是,一种只安装我需要的模块的方法。

还有其他想法吗?

提前致谢。

python pip amazon-web-services aws-lambda serverless-framework

0
推荐指数
1
解决办法
1485
查看次数

通过 Greengrass 发送 UID/设备 ID

我正在运行多个 Greengrass 核心,它们将数据发送到 MQTT 流。我在 GGC 上部署了 Lambda,读取传入的 SerialPort 并将其推送到 Stream。

但现在我想检查哪个设备正在发送数据 - 我尝试用这个来检查主机名

import socket
host = socket.gethostname()
Run Code Online (Sandbox Code Playgroud)

但核心发送值“沙箱”,所以我认为 lambda 无权读取主机名。

SDK没有这方面的文档: https://github.com/aws/aws-greengrass-core-sdk-python

我想将数据推送到 mqqt 流,如下所示:

response = client.publish(
    topic='customer/events/{DEVICE-ID or UID or ARN}/',
    payload=jsonData.encode())
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-iot aws-iot-greengrass

0
推荐指数
1
解决办法
407
查看次数

无法将文件下载到 AWS Lambda

我有一个下载文件的 AWS Lambda 函数。我已经读到我可以写入的唯一目录是/tmp目录,但是我仍然收到此错误。

[ERROR] OSError: [Errno 30] Read-only file system: '/home/sbx_user1051'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/lambda_function.py", line 9, in <module>
    from kaggle.api.kaggle_api_extended import KaggleApi
  File "/var/task/kaggle/__init__.py", line 19, …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services aws-lambda kaggle

0
推荐指数
1
解决办法
125
查看次数

如何防止机器人在我的 AWS Lambda 函数中产生成本

我正在为我的移动游戏计划一个概念,并使用 AWS Lambda(或相同的 Firebase 函数)。机器人不能永久地向我的 Lambda 函数发出请求并仅通过向我的终端发送垃圾邮件来产生巨额成本吗?

亚马逊/谷歌是否有任何保护措施,或者你们将如何保护您的端点免受此类攻击?

security bots amazon-web-services firebase aws-lambda

0
推荐指数
1
解决办法
35
查看次数