我正在使用无服务器管理应用程序的 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
我正在使用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吗?这样做的正确方法是什么?
是否可以在无服务器框架中使用 Lambda 函数别名 ( https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html )?如果是这样,有人有一个如何做到这一点的例子吗?
更新:
我在 SAM 中找到了它:
AutoPublishAlias:通过添加此属性并指定别名,AWS SAM:
根据 Lambda 函数的 Amazon S3 URI 的更改检测何时部署新代码。
使用最新代码创建并发布该函数的更新版本。
使用您提供的名称创建别名(除非别名已存在),并指向 Lambda 函数的更新版本。函数调用应使用别名限定符来利用这一点。如果您不熟悉 Lambda 函数版本控制和别名,请参阅 AWS Lambda 函数版本控制和别名 。
有没有办法在无服务器框架中做到这一点?
在 serverless.yml 中使用以下设置时
custom:
pythonRequirements:
dockerizePip: true
slim: true
zip: true
Run Code Online (Sandbox Code Playgroud)
slim:true并slim: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。 …
我的无服务器应用程序中有多个功能。其中两个用于 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
我正在尝试使用无服务器框架将 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) 错误:
\nRunning "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)\nRun Code Online (Sandbox Code Playgroud)\n我正在遵循这些说明(https://www.serverless.com/blog/flask-python-rest-api-serverless-lambda-dynamodb/),并且似乎无法弄清楚这一点,因为基本应用程序是在 python 而不是 javascript 中......大多数解决这个问题的人都使用 javascript 解决了它。
\npython node.js python-3.x serverless-framework aws-serverless
我有以下 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”源中找不到值
有人看到我做错了什么吗?
我正在尝试运行命令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
论坛里好像没有类似的问题。
我无法使用无服务器框架加载位于自定义路径中的环境文件。
env 文件保存在项目中的“config/environment”文件夹中,可用的文件是
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 文件没有被加载,任何帮助将不胜感激。
aws-lambda ×4
python ×3
serverless ×3
node.js ×2
typescript ×2
nestjs ×1
pip ×1
python-3.x ×1
websocket ×1