标签: serverless-framework

AWS Lambda 因 NodeJS 依赖项而失败

在执行具有依赖项的 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。

lambda web-worker node.js aws-lambda serverless-framework

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

在无服务器框架中设置AWS API网关自定义授权者

我需要将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

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

无服务器:此服务中不存在该功能

在无服务器环境中,我的功能具有以下目录结构:

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无差异,是否有明显的缺失,我不允许在同一位置使用多个处理程序?

我正在看下面的 …

javascript serverless-framework serverless aws-serverless

0
推荐指数
2
解决办法
1187
查看次数

我如何在DynamoDb中加入两个表?

我是DynamoDB的新手,任何人都可以帮我在DynamoDB中使用JOIN吗?我使用无服务器框架和映射模板.我有POSTUSER表. POSTuserId字段.如何获得有关用户信息的所有帖子?在MYSQL中,我可以使用JOIN但它在DynamoDB中如何工作?我读了2年前创建的stackoverflow中的帖子.而且有人写道,它不可用.也许事情发生了变化......?

amazon-web-services amazon-dynamodb serverless-framework dynamodb-queries

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

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

Serverless.yml VPC参数

我只想问一下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页面上?

serverless-framework

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

无服务器框架 - 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
查看次数

Serverless+Webpack:在 ZIP 中包含 .pem 文件

我尝试使用无服务器将 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.pem
Run 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

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

是否需要提供 access_key 和 secret_key 才能在 lambda 函数中从 s3 访问对象?

我想编写一个 lambda 函数来更新 s3 存储桶中的对象文件。我正在使用相同的帐户和地区来实现这一点。根据政策,要使用的密钥和访问密钥会经常更改,这意味着我不能在 lambda 函数中使用相同的密钥和访问密钥来访问 s3 对象

那么无论如何我可以访问 s3 对象而无需在 lambda 函数中提供访问权限和密钥?

amazon-s3 python-3.x aws-lambda serverless-framework

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

从下一个主要对象符号开始,“服务”属性将不再被识别。直接使用服务名称设置“service”属性

在无服务器项目中,我收到以下弃用警告:

无服务器:弃用警告:从“服务”属性的下一个主要对象符号开始将不再被识别。直接使用服务名称设置“服务”属性。更多信息: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)

如何修复此弃用警告?

serverless-framework

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