标签: aws-lambda

S3 存储桶中的 AWS Lambda 代码未更新

我正在使用 cloudformation 在启用版本控制的 S3Bucket 中使用代码创建我的 lambda 函数。

"MYLAMBDA": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "FunctionName": {
          "Fn::Sub": "My-Lambda-${StageName}"
        },
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "${S3BucketName}"
          },
          "S3Key": {
            "Fn::Sub": "${artifact}.zip"
          },
          "S3ObjectVersion": "1e8Oasedk6sDZu6y01tioj8X._tAl3N"
        },
        "Handler": "streams.lambda_handler",
        "Runtime": "python3.6",
        "Timeout": "300",
        "MemorySize": "512",
        "Role": {
          "Fn::GetAtt": [
            "LambdaExecutionRole",
            "Arn"
          ]
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

lambda 函数创建成功。当我将新的工件 zip 文件复制到 s3bucket 时,会使用新版本的“S3ObjectVersion”字符串创建该文件的新版本。但是 lambda 函数代码仍然使用旧版本。

aws cloudformation 的文档清楚地说明了以下内容

要更新源代码位于 Amazon S3 存储桶中的 Lambda 函数,您必须通过更新 S3Bucket、S3Key 或 S3ObjectVersion 属性来触发更新。单独更新源代码不会更新函数。

是否有额外的触发事件,我需要创建以更新代码?

aws-cloudformation aws-lambda

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

AWS Lambda 函数调用中的事件和上下文是什么?

在下面的代码中,参数event和context指的是什么?

module.exports.convertTime = (event, context, callback) => {
  const response = {
    statusCode: statusCode,
    body: JSON.stringify({
      message: `${convertedTime}`
    })
  };

  callback(null, response);
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js aws-lambda

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

将输入(参数)从阶跃函数传递并使用到 lambda 任务

我有一个启动 lambda 的简单步骤函数,我正在寻找一种将参数(事件/上下文)传递给几个后续任务中的每一个的方法。我的步骤函数如下所示:

{
  "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
  "StartAt": "HelloWorld",
  "States": {
    "HelloWorld": {
      "Type": "Task",
      "Parameters": {
        "TableName": "table_example"
      },
      "Resource": "arn:aws:lambda:ap-southeast-2:XXXXXXX:function:fields_sync",
      "End": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在用 Python 编写的 lambda 中,我使用了一个简单的处理程序,它是:

def lambda_handler(event, context):
    #...
Run Code Online (Sandbox Code Playgroud)

事件和上下文如下所示(检查日志):

开始请求 ID:f58140b8-9f04-47d7-9285-510b0357b4c2 版本:$LATEST

我找不到将参数传递给此 lambda 并在脚本中使用它们的方法。本质上,我想要做的是运行相同的 lambda,将几个不同的值作为参数传递。

有人可以指出我正确的方向吗?

python amazon-web-services aws-lambda aws-step-functions

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

有没有办法在没有 VPC 的情况下将静态 IP 分配给 AWS Lambda?

我希望为通过 API 网关调用的 Lambda 分配一个静态 IP。这是必需的,因为我从此 lambda 调用的下游系统仅接受来自白名单 IP 的 Web 请求。

我通过与我的 lambda 关联的 VPC 成功地实现了这一点。但是 VPC 引入了一个糟糕的冷启动时间,有时范围为 12-16 秒。所以我正在寻找一种方法来防止这种从 VPC 冷启动,但同时为 lambda 分配一个静态 IP。

cold-start amazon-web-services amazon-vpc aws-lambda aws-api-gateway

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

AWS Lambda Cryptic Node.js 错误:发生未知应用程序错误

我最近将我的 lambda Node.js 运行时从 8.x 更新到 12.x。我升级了很多依赖项并优化了与 webpack 的捆绑和部署过程。但是,我开始注意到 Cloudwatch 中的零星错误,其中包含一条神秘消息“发生未知应用程序错误”,没有堆栈跟踪或任何其他日志,可以为我提供有关函数输入的一些上下文。我没有办法调试这段代码,而且它似乎是一个原生的 AWS 错误,由于某种原因甚至无法调用该函数,否则,日志中会附加一个 JS 堆栈跟踪......

我开始认为存在 Webpack 问题,但我什至禁用了缩小过程,所以我不知道去哪里找。

我的代码是 100% Typescript 使用 Webpack & Babel 编译的。我是否应该尝试从构建过程中删除 Webpack,然后使用普通的 node_modules 文件夹压缩 Typescript 编译器输出而不进行任何捆绑?

有人可以帮帮我吗?此功能正在生产中!

编辑:我看到一堆警告,比如DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.,我知道,但这不应该是这个神秘错误的原因。

node.js typescript webpack aws-lambda

13
推荐指数
1
解决办法
4144
查看次数

API 网关 HTTP API CORS

我正在使用新的 API Gateway HTTP,它可以在配置期间添加 CORS。因此,我已将 Access-Control-Allow-Origin 标头设置为 *.

但是,当我使用 Postman 发出请求时,我没有看到该标头,这导致我的 VueJS Axios 请求失败。

我之前使用了 Lambda 代理集成并在我的 Lambda 中执行了以下操作

"headers": { 
            "Access-Control-Allow-Origin": "*" 
        }
Run Code Online (Sandbox Code Playgroud)

然而,新的 HTTP API 似乎并没有实现 CORS。也许我错过了一些简单的东西。

--编辑--

所以我继续寻找答案,并看到了 Serverless 人员的一篇博客文章,他们设置了以下内容

It’ll ensure following headers:

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers:

Content-Type, X-Amz-Date, Authorization, X-Api-Key, X-Amz-Security-Token, X-Amz-User-Agent
Access-Control-Allow-Methods:

OPTIONS, and all the methods defined in your routes (GET, POST, etc.)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这些并重新部署,但仍然只能获得标准标题

谢谢

api amazon-web-services cors aws-lambda

13
推荐指数
2
解决办法
2068
查看次数

AWS Lambda“errorMessage”:任务在 3.00 秒后超时

将文件格式从 更改png为时,Lambda 函数在测试中显示以下错误text

"errorMessage": "2020-07-17T07:06:45.969Z b66dd037-ba01-4025-97db-6527b486eac8 Task timed out after 3.00 seconds"
Run Code Online (Sandbox Code Playgroud)

amazon-web-services image-resizing aws-lambda

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

AWS lambda 什么时候支持 python 3.9?

嗨,有谁知道我怎样才能知道 AWS lambda 何时将他们的支持升级到 python 3.9?他们上一次升级到 3.8 是在 2019 年,距离 v3.9 发布已经有一段时间了。

我很想使用最新的 v3.9 语言功能,但遗憾的是无法在 AWS 中使用

amazon-web-services aws-lambda python-3.9

13
推荐指数
2
解决办法
2211
查看次数

错误:连接ETIMEDOUT rds lambda

我试图使用Lambda函数连接到RDS,但我收到一个错误:

var mysql = require('mysql');
exports.handler = function(event, context) {   
           //Connect to RDS

var connection = mysql.createConnection({
host     : 'hostname',
user     : 'username',
password : 'password',
database : 'database'

});

connection.connect( function(err)
{
   if (err)
   { 
     throw err;
   }
else 
  {
    console.log('DB connection establish');
  }
  });

 };
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

START RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae Version: $LATEST

2016-03-08T23:08:06.737Z    9711e650-e582-11e5-af5f-97ba391a42ae    
Error: connect ETIMEDOUT  
  at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:412:13)       
      at Socket.g (events.js:180:16)   
    at Socket.emit (events.js:92:17)   
    at Socket._onTimeout (net.js:327:8)     
    at _makeTimerTimeout (timers.js:429:11)   
    at Timer.unrefTimeout [as ontimeout] (timers.js:493:5)    
    --------------------
    at …
Run Code Online (Sandbox Code Playgroud)

amazon-rds node.js aws-lambda

12
推荐指数
2
解决办法
9460
查看次数

Api网关从步进功能获得输出结果?

我按照教程创建和调用步骤函数

我在api的GET请求中得到了输出

 {
  "executionArn": "arn:aws:states:ap-northeast-1:123456789012:execution:HelloWorld:MyExecution",
  "startDate": 1.486772644911E9
}
Run Code Online (Sandbox Code Playgroud)

但是,而不是上面的响应,我想要我的步骤函数输出,由下面的结束状态给出.

{
   "name":"Hellow World"
}
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

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

12
推荐指数
4
解决办法
3886
查看次数