在执行具有依赖项的 NodeJS Lambda 函数时,我收到以下错误。在 MacOSX High Sierra v10.13.3 Beta 上运行 NodeJS v8.4.0 和 NPM v5.6.0。
"errorMessage": "/var/task/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: invalid ELF header",
"errorType": "Error",
"stackTrace": [
"Object.Module._extensions..node (module.js:597:18)",
"Module.load (module.js:487:32)",
"tryModuleLoad (module.js:446:12)",
"Function.Module._load (module.js:438:3)",
"Module.require (module.js:497:17)",
"require (internal/module.js:20:19)",
"bindings (/var/task/node_modules/bindings/bindings.js:81:44)",
"Object.<anonymous> (/var/task/node_modules/webworker-threads/index.js:1:105)",
"Module._compile (module.js:570:32)"
]
Run Code Online (Sandbox Code Playgroud)
我把它缩小到“自然”模块,它需要WebWorkerThreads模块触发错误。以下是我的依赖项。
"dependencies": {
"natural": "^0.5.6",
"path": "^0.12.7"
}
Run Code Online (Sandbox Code Playgroud)
我在AWS 论坛上提出了这个问题但没有答案,非常感谢堆栈溢出社区可以提供的任何帮助。我已经完成了大量的谷歌搜索,并找到了以下答案。不过,我没有使用自定义模块或 Docker。
我需要将AWS API网关自定义授权者添加到Lambda函数中。目前,我已经为每个端点添加了授权者。如下serverless.yml。
无服务器
service: test-service
provider:
name: aws
runtime: nodejs6.10
stage: dev
region: us-east-1
functions:
bff:
handler: app.handler
events:
- http:
path: /home
method: get
cors: true
authorizer :
arn: arn:aws:lambda:us-east-1:xxxxxx:function:token-verifier
resultTtlInSeconds: 0
identitySource: method.request.header.Authorization
identityValidationExpression: '.*'
Run Code Online (Sandbox Code Playgroud)
如何将自定义授权者添加到整个lambda函数,而不是分别添加到每个端点?
amazon-web-services aws-lambda aws-api-gateway serverless-framework
在无服务器环境中,我的功能具有以下目录结构:
serverless.yml
functions -
stories -
create.js
get.js
Run Code Online (Sandbox Code Playgroud)
serverless.yml然后我的样子是这样的:
functions:
stories:
create:
handler: functions/stories/create.main
events:
- http:
path: stories/create
method: post
cors: true
authorizer: aws_iam
get:
handler: functions/stories/get.main
events:
- http:
path: stories/{id}
method: get
cors: true
authorizer: aws_iam
Run Code Online (Sandbox Code Playgroud)
但是,当我运行测试以检查创建时:serverless invoke local --function create --path mocks/create-event.json我得到以下错误:
Serverless Error ---------------------------------------
Function "create" doesn't exist in this Service
Run Code Online (Sandbox Code Playgroud)
我设法使一个函数看起来像这样:
functions:
stories:
handler: functions/stories/create.main
events:
- http:
path: stories/create
method: post
cors: true
authorizer: aws_iam
Run Code Online (Sandbox Code Playgroud)
由于我添加了get函数,因此我决定需要添加create和故事后的部件,但是无论我如何更改处理程序,这些函数似乎都不存在。
我尝试将路径更改为functions/stories/create/create.main无差异,是否有明显的缺失,我不允许在同一位置使用多个处理程序?
我正在看下面的 …
我是DynamoDB的新手,任何人都可以帮我在DynamoDB中使用JOIN吗?我使用无服务器框架和映射模板.我有POST和USER表. POST有userId字段.如何获得有关用户信息的所有帖子?在MYSQL中,我可以使用JOIN但它在DynamoDB中如何工作?我读了2年前创建的stackoverflow中的帖子.而且有人写道,它不可用.也许事情发生了变化......?
amazon-web-services amazon-dynamodb serverless-framework dynamodb-queries
我正在与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
我只想问一下serverless.yml中vpc部分中值的正确格式是什么,尤其是securityGroupIds字段和subnetIds字段。如果我在aws控制台中转到lambda服务,这会引起我的困惑,当我们在其中添加vpc设置时,securityGroupIds的字符串格式如下所示:
xx-xxxxxxxx(xx_xx_xxx_xxxxxx_xxxxxx)|xx_xx_xxx_xxxxx_xxxxxx
而如果我在AWS控制台中转到vpc服务并单击安全组,则安全组ID的字符串格式为:
xx-xxxxxxxx | xx_xx_xxx_xxxxxx_xxxxxx
对于子网ID,lambda页面中的一个具有如下格式:
subnet-xxxxxxxx(xx.xxx.xx.0/xx)|ap-southeast-1a subnet-public-1a
而在vpc页面中,格式为:
subnet-xxxxxxxx
我的问题是我应该在serverless.yml中输入哪种格式。在lambda页面上还是在vpc页面上?
我正在使用 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
我尝试使用无服务器将 lambda 函数部署到 AWS。一切正常,但该函数无法执行,因为找不到两个文件(就是这么fs.readFileSync说的)。我将它们包含在 serverless.yml 中,并包含以下几行:
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: eu-central-1
package:
exclude:
- .env
include:
- src/config/push-cert.pem
- src/config/push-key.pemRun Code Online (Sandbox Code Playgroud)
当我查看上传到 S3 的 .zip 文件时,两个 .pem 文件都不包含在内。我已经尝试使用__dirnamelambda 函数获取完整的文件路径。我的webpack.config.js样子如下:
const path = require("path");
const nodeExternals = require("webpack-node-externals");
const slsw = require("serverless-webpack");
module.exports = {
entry: slsw.lib.entries,
target: "node",
node: {
__dirname: true
},
mode: slsw.lib.webpack.isLocal?"development":"production",
externals: [nodeExternals()],
output: {
libraryTarget: "commonjs",
// pay attention to this
path: path.join(__dirname, ".webpack"),
filename: "[name].js" …Run Code Online (Sandbox Code Playgroud)amazon-web-services webpack serverless-framework serverless aws-serverless
我想编写一个 lambda 函数来更新 s3 存储桶中的对象文件。我正在使用相同的帐户和地区来实现这一点。根据政策,要使用的密钥和访问密钥会经常更改,这意味着我不能在 lambda 函数中使用相同的密钥和访问密钥来访问 s3 对象
那么无论如何我可以访问 s3 对象而无需在 lambda 函数中提供访问权限和密钥?
在无服务器项目中,我收到以下弃用警告:
无服务器:弃用警告:从“服务”属性的下一个主要对象符号开始将不再被识别。直接使用服务名称设置“服务”属性。更多信息:https ://www.serverless.com/framework/docs/deprecations/#SERVICE_OBJECT_NOTATION
我的 Yaml 是:
service:
name: nest
custom:
version: ${self:service.name}-redDragon
Run Code Online (Sandbox Code Playgroud)
如何修复此弃用警告?
aws-lambda ×5
node.js ×2
serverless ×2
amazon-s3 ×1
javascript ×1
lambda ×1
pip ×1
python ×1
python-3.x ×1
sequelize.js ×1
singleton ×1
web-worker ×1
webpack ×1