标签: serverless-framework

具有无服务器的 WebSockets API 的自定义域名

我正在使用无服务器管理应用程序的 REST API,并希望使用同一区域中的 WebSockets API 扩展此设置。一切都应该使用相同的证书,但不同的子域来处理。

起初,我创建了一个新的自定义域sls create_domain --stage=...。然后我尝试将它添加到新的 WebSockets 堆栈中,但以这个错误结束:

错误:无法为...找到 CloudFormation 资源

我在 Github 上发现 CloudFormation 现在似乎不支持它,因此 Serverless 不支持它。

所以我尝试在 UI 中手动将我的舞台附加到自定义域名:

REST API 和 HTTP API 在同一个域名上的混合只能通过 API Gateway 的 V2 DomainName 接口来完成。目前,WebSocket API 只能与其他 WebSocket API 一起附加到域名。这也必须通过 API Gateway 的 V2 DomainName 接口发生。

出现了更多混淆,因为在这种情况下它甚至不是相同的域名。新域名sockets.<DOMAIN>.com和现有域名是api.<DOMAIN>.com. 还是不同的子域落入“同一个域名”?

尽管如此,我还是尝试通过 apigatewayv2 CLI 再次创建自定义域:

aws apigatewayv2 create-domain-name --domain-name <DOMAIN> --domain-name-configurations file://domain-configuration.json --region eu-west-1
Run Code Online (Sandbox Code Playgroud)

域配置.json:

[
{
    "ApiGatewayDomainName": "<DOMAIN>",
    "CertificateArn": "arn:aws:acm:us-east-1:<ACCOUNT_ID>:certificate/<CERT_ID>",
    "CertificateName": "<DOMAIN>",
    "DomainNameStatus": "AVAILABLE",
    "EndpointType": …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services websocket aws-api-gateway serverless-framework

6
推荐指数
1
解决办法
1869
查看次数

当投影类型更改时,如何更新 dynamodb GSI?

我正在使用serverless框架来管理 AWS 基础设施,并且我已经使用 GSI 定义了 dynamodb 表。现在我需要更新 GSi 的投影类型,但我知道这是不允许的。因此,我手动从 dynamodb 表中删除 GSI,但运行时仍然出现以下错误sls deploy

An error occurred: DeviceTable - Cannot update GSI's properties other than Provisioned Throughput. You can create a new GSI with a different name..

我不明白的是,GSI 已被删除,但为什么它仍然抱怨 GSI 的属性。还有什么地方记得GIS吗?这样做的正确方法是什么?

amazon-dynamodb serverless-framework

6
推荐指数
2
解决办法
7230
查看次数

Lambda 函数与无服务器框架的别名?

是否可以在无服务器框架中使用 Lambda 函数别名 ( https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html )?如果是这样,有人有一个如何做到这一点的例子吗?

更新:

我在 SAM 中找到了它:

AutoPublishAlias:通过添加此属性并指定别名,AWS SAM:

根据 Lambda 函数的 Amazon S3 URI 的更改检测何时部署新代码。

使用最新代码创建并发布该函数的更新版本。

使用您提供的名称创建别名(除非别名已存在),并指向 Lambda 函数的更新版本。函数调用应使用别名限定符来利用这一点。如果您不熟悉 Lambda 函数版本控制和别名,请参阅 AWS Lambda 函数版本控制和别名 。

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html

有没有办法在无服务器框架中做到这一点?

amazon-web-services aws-lambda serverless-framework

6
推荐指数
1
解决办法
4219
查看次数

无服务器 python 要求 slim:true 对依赖项大小没有任何影响

简短的

在 serverless.yml 中使用以下设置时

custom:
  pythonRequirements:
    dockerizePip: true
    slim: true
    zip: true
Run Code Online (Sandbox Code Playgroud)

slim:trueslim:false产生相同的文件大小。我可以采取什么措施来减小 zip 文件的文件大小?

满的

我正在尝试获取 python 代码,它依赖于使用无服务器框架的 aws lambda 函数。按照此处提供的建议减少依赖项大小以符合 250MB lambda 限制。在我的 serverless.yml 文件中,我有以下内容:

provider:
  name: aws
  runtime: python3.6

plugins:
  - serverless-python-requierments

custom:
  pythonRequierments:
    dockerizePip: true
    slim: true
    zip: true

functions:
...
Run Code Online (Sandbox Code Playgroud)

我的requierments.txt如下:

xgboost==1.3.3
pandas==1.0.1
numpy == 1.18.5
...
Run Code Online (Sandbox Code Playgroud)

我不断收到以下错误:

Unzipped size must be smaller than 262144000 bytes..
Run Code Online (Sandbox Code Playgroud)

这让我相信我的 requierments.zip 文件太大;详细输出说明uploading service test.zip file to s3 271.17 MB。 …

python aws-lambda serverless-framework

6
推荐指数
1
解决办法
2872
查看次数

无法使用无服务器框架和 TypeScript 从 Lambda 层导入模块

我的无服务器应用程序中有多个功能。其中两个用于 REST 端点,一个是 SQS 处理程序。他们都使用相同的库。因此,我想将它们移至 Lambda Layer 并跨函数共享以减小大小。

我正在使用 Serverless Framework 2.46、TypeScript 4.3 和 NodeJS 14。我有以下项目结构:

/
 - layers/
   - nodejs/
     - node_modules/
     - package.json
 - src/
   - handlers/ - here are my handlers 
   - etc...
Run Code Online (Sandbox Code Playgroud)

我已将 TypeScript 配置为从图层文件夹导入库,如下所示import middy from '/opt/nodejs/@middy/core';。这是我的 tsconfig

{
  "compilerOptions": {
    "preserveConstEnums": true,
    "strictNullChecks": true,
    "sourceMap": true,
    "allowJs": false,
    "target": "ES2020",
    "module": "CommonJS",
    "outDir": ".build",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "lib": [
      "ES6",
      "ES2019",
      "ES2020"
    ],
    "baseUrl": ".", …
Run Code Online (Sandbox Code Playgroud)

node.js typescript aws-lambda serverless-framework aws-lambda-layers

6
推荐指数
1
解决办法
5878
查看次数

NestJS 和 Serverless - 处理程序“handler”不是一个函数

我正在尝试使用无服务器框架将 NestJS 实现为 AWS 无服务器功能。

我正在关注这个官方文档,我的代码与文档中的完全一样。但是,当我启动它时,我收到错误Failure: offline: handler 'handler' in [..] is not a function

如果我进入我编译的源代码main.js并将其更改exports.handler = handler;module.exports.handler = handler;它就开始工作。

我还尝试更改代码main.ts以适应这一点,但这没有帮助,因为 webpack 的编译方式不同。

// main.ts
const handler ...;
module.exports.handler = handler;
Run Code Online (Sandbox Code Playgroud)

这是我的main.ts

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { Callback, Context, Handler } from 'aws-lambda';
import serverlessExpress from '@vendia/serverless-express';
import { AppModule } from './app.module';

let server: Handler;

async function …
Run Code Online (Sandbox Code Playgroud)

typescript serverless-framework serverless nestjs

6
推荐指数
1
解决办法
2817
查看次数

无服务器框架中的 Python 错误指出 - 无服务器错误:spawn docker ENOENT

错误:

\n
Running "serverless" from node_modules\n\nDeploying serverless-flask to stage dev (us-east-1)\n\n\xe2\x9c\x96 Stack serverless-flask-dev failed to deploy (0s)\nEnvironment: darwin, node 16.0.0, framework 3.1.1 (local) 3.1.1v (global), plugin 6.0.0, SDK 4.3.1\nCredentials: Local, "default" profile\nDocs:        docs.serverless.com\nSupport:     forum.serverless.com\nBugs:        github.com/serverless/serverless/issues\n\nError:\nError: spawn docker ENOENT\n    at Process.ChildProcess._handle.onexit (node:internal/child_process:282:19)\n    at onErrorNT (node:internal/child_process:480:16)\n    at processTicksAndRejections (node:internal/process/task_queues:83:21)\n
Run Code Online (Sandbox Code Playgroud)\n

我正在遵循这些说明(https://www.serverless.com/blog/flask-python-rest-api-serverless-lambda-dynamodb/),并且似乎无法弄清楚这一点,因为基本应用程序是在 python 而不是 javascript 中......大多数解决这个问题的人都使用 javascript 解决了它。

\n

python node.js python-3.x serverless-framework aws-serverless

6
推荐指数
2
解决办法
5387
查看次数

无服务器框架 - 在“自我”源中找不到值

我有以下 serverless.yml 文件:

org: bizrob
app: flexipod-2-queue
service: flexipod-2-queue

frameworkVersion: "^2.72.2"

custom:
  region: eu-west-1

provider:
  name: aws
  runtime: nodejs14.x

plugins:
  - serverless-prune-plugin
  - serverless-offline
  - serverless-webpack
  - serverless-plugin-resource-tagging
  - serverless-step-functions

functions:
  cronHandler:
    handler: flexipod-2-queue/flexipodJob.dataFeedsJob
    events:
      # Invoke Lambda function every 2nd minute from Mon-Fri
      - schedule: cron(0/8 * ? * MON *)
    environment:
      REGION: ${self:custom.region}
      API_VERSION_S3: "2006-03-01"
      API_VERSION_SQS: "2012-11-05"
      SQS_QUEUE_URL: !Ref "MyQueue"

resources:
  Resources:
    MyQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: "flexipod"
Run Code Online (Sandbox Code Playgroud)

当我运行无服务器部署时,出现以下错误:

无法解析“functions.cronHandler.environment.REGION”处的变量:在“self”源中找不到值

有人看到我做错了什么吗?

amazon-web-services aws-lambda serverless-framework

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

Python 在尝试无服务器部署时出错

我正在尝试运行命令serverless deploy,但即使我有 python,我也会收到以下错误:

Stack xxxxxx failed to deploy (0s)
Environment: win32, node 14.16.1, framework 3.2.1, plugin 6.0.0, SDK 4.3.1
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Error: `python3 -m pip help install` Exited with code 9009
Run Code Online (Sandbox Code Playgroud)

我的python版本是Python 3.9.6,我的pip版本是pip 21.1.3

论坛里好像没有类似的问题。

python pip serverless-framework serverless

6
推荐指数
0
解决办法
605
查看次数

无法从无服务器框架中的自定义路径加载环境文件

我无法使用无服务器框架加载位于自定义路径中的环境文件。

env 文件保存在项目中的“config/environment”文件夹中,可用的文件是

  • .env
  • .env.dev
  • .env.qa
  • .env.prod

Serverless.yml内容如下

plugins:
   - serverless-dotenv-plugin
custom:
  stage: ${opt:stage, "dev"}
  dotenv:
    basePath: ./config/environment/
    logging: false
Run Code Online (Sandbox Code Playgroud)

触发“无服务器部署”时,出现如下错误

无法解析 serverless.yml:变量解析出错:

  • 无法解析“provider.xxxxxx”处的变量:在“env”源中找不到值,
  • 无法解析“provider.xxxxxx”处的变量:在“env”源中找不到值,
  • 无法解析“provider.xxxxxx”处的变量:在“env”源中找不到值,
  • 无法解析“provider.xxxxxx”处的变量:在“env”源中找不到值,
  • 无法解析“provider.xxxxxx”处的变量:在“env”源中找不到值,

似乎 .env 文件没有被加载,任何帮助将不胜感激。

serverless-framework serverless aws-serverless

6
推荐指数
1
解决办法
1939
查看次数