我正在使用 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 属性来触发更新。单独更新源代码不会更新函数。
是否有额外的触发事件,我需要创建以更新代码?
在下面的代码中,参数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) 我有一个启动 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,将几个不同的值作为参数传递。
有人可以指出我正确的方向吗?
我希望为通过 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
我最近将我的 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.,我知道,但这不应该是这个神秘错误的原因。
我正在使用新的 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)
我已经尝试过这些并重新部署,但仍然只能获得标准标题
谢谢
将文件格式从 更改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) 嗨,有谁知道我怎样才能知道 AWS lambda 何时将他们的支持升级到 python 3.9?他们上一次升级到 3.8 是在 2019 年,距离 v3.9 发布已经有一段时间了。
我很想使用最新的 v3.9 语言功能,但遗憾的是无法在 AWS 中使用
我试图使用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) 我按照教程创建和调用步骤函数
我在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
aws-lambda ×10
node.js ×3
amazon-rds ×1
amazon-vpc ×1
api ×1
cold-start ×1
cors ×1
javascript ×1
python ×1
python-3.9 ×1
typescript ×1
webpack ×1