标签: serverless-framework

无服务器 AWS Lambda Edge:格式错误的HandlerName

我按照下面的示例设置 Lambda Edge 函数:
https://www.serverless.com/blog/lambda-at-edge-support-linked

代码:./handler.js

// SAME CODE STRUCTURE AS ORIGINAL, JUST ADDING A HEADER TO TEST
'use strict';

exports.handler = (event, context, callback) => {    
    const response = event.Records[0].cf.response;
    const headers = response.headers;
    headers['test-lambda-edge'] = [{ key: 'test-lambda-edge', value: 'working' }]
    callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)

配置:./serverless.yml

# SAME CONFIG AS ORIGINAL, JUST CHANGING eventType and origin
service: mylambda
provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221
functions:
  cfLambda:
    handler: functions/handler.cloudfront
    events:
      - cloudFront:
          eventType: origin-response
          origin: https://example.org
Run Code Online (Sandbox Code Playgroud)

该功能正确部署: …

handler amazon-web-services node.js aws-lambda serverless-framework

3
推荐指数
1
解决办法
9462
查看次数

通过 npm 安装无服务器所需的权限

我尝试通过 npm ( npm install -g serverless) 安装无服务器,但出现以下错误:

npm ERR! code EACCES
npm ERR! syscall rename
npm ERR! path /usr/local/lib/node_modules/serverless
npm ERR! dest /usr/local/lib/node_modules/.serverless-Ls3sFIzE
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/serverless' -> '/usr/local/lib/node_modules/.serverless-Ls3sFIzE'
npm ERR!  [Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/serverless' -> '/usr/local/lib/node_modules/.serverless-Ls3sFIzE'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'rename',
npm ERR!   path: '/usr/local/lib/node_modules/serverless',
npm ERR!   dest: '/usr/local/lib/node_modules/.serverless-Ls3sFIzE'
npm ERR! }
npm ERR! 
npm ERR! The operation was …
Run Code Online (Sandbox Code Playgroud)

serverless-framework serverless serverless-offline

3
推荐指数
1
解决办法
3869
查看次数

无服务器框架:为 AWS Lambda 函数指定临时存储大小

AWS Lambda 最近添加了一个选项来指定更多临时存储(映射到/tmpLambda 容器中的目录的文件系统),从默认的 512 MB 到最大 10GB。

链接: https: //aws.amazon.com/blogs/aws/aws-lambda-now-supports-up-to-10-gb-ephemeral-storage/

在 AWS 控制台中,可通过控制台 > Lambda >(函数)> 配置 > 临时存储(位于已存在的“内存”选项旁边)访问此设置。

但到目前为止我还没有弄清楚如何通过配置非默认的临时存储大小serverless.yml。内存是通过键分配的memorySize(在provider节中或按函数重写)。

是否有类似的方法来配置更多临时存储?

aws-lambda serverless-framework

3
推荐指数
1
解决办法
3495
查看次数

通过无服务器框架部署到 AWS Lambda 时,将文件打包到应用程序包的特定文件夹中

语境

\n

我正在使用无服务器框架aws-node-typescript的示例。我的目标是将Prisma集成到其中。

\n

到目前为止,我有:

\n
    \n
  1. 使用本地创建项目serverless create
  2. \n
  3. 在 Railway 上设置 PostgreSQL 数据库
  4. \n
  5. 安装prisma、运行prisma init、创建基本模型并成功User运行prisma migrate dev
  6. \n
  7. users通过复制现有hello函数创建第二个函数
  8. \n
  9. 使用部署该功能serverless deploy
  10. \n
  11. 现在在我的函数中,当我实例化 时PrismaClient,我收到内部服务器错误,并且该函数记录此错误:"ENOENT: no such file or directory, open \'/var/task/src/functions/users/schema.prisma\'"
  12. \n
\n

我的项目结构如下:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package-lock.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prisma\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 migrations\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 20221006113352_init\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 migration.sql\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 migration_lock.toml\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 schema.prisma\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 serverless.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82 …
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework serverless prisma

3
推荐指数
1
解决办法
3478
查看次数

我收到警告:发现函数“rs-ms-v1”不受支持的运行时“nodejs18.x”× 不受支持的运行时

我尝试将我的应用程序从节点 16 更新到节点 18,完成更改版本后,我启动了我的应用程序并发送了 api 调用,并收到了以下输出。

\n
Warning: found unsupported runtime 'nodejs18.x' for function 'rs-ms-v1'\n\xc3\x97 Unsupported runtime\n
Run Code Online (Sandbox Code Playgroud)\n

我们正在使用 serverless.yml 文件

\n

我的无服务器库版本是3.33.0\ni检查了aws文档lambda函数开始支持nodejs18.x

\n

请在下面附上您的解决方案。

\n

node.js aws-lambda serverless-framework serverless-architecture serverless

3
推荐指数
1
解决办法
3583
查看次数

在serverless.yml文件中引用AWS API Gateway的主机名以获取其他CloudFormation资源吗?

我正在使用无服务器框架使用S3,Lambda和API网关创建图像大小调整服务。这与此处的概念相似,但是将使用Serverless来设置和配置整个堆栈。

现在,我需要找到一种体面的方法来引用serverless.yml文件中生成的API网关的主机名。这就是我所拥有的资源。(只是一个片段)

imageBucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: ${env:IMAGE_BUCKET}
    WebsiteConfiguration:
      RoutingRules:
        -
          RedirectRule:
            Hostname: ${HOSTNAME HERE}
            HttpRedirectCode: 302
          RoutingRuleCondition:
            HttpErrorCodeReturnedEquals: 404
Run Code Online (Sandbox Code Playgroud)

$ {HOSTNAME HERE}的显示位置,我需要为无服务器框架生成的API Gateway API的主机名。

现在,我能想到的最好的方法是在某个地方创建一个CNAME别名,并在我的API前面使用它。然后,我将该CNAME作为环境变量传递,然后在此文件中引用它。不过这对我来说并不理想。我希望有人能够将这个项目拉下来,并能够仅使用存储桶名称来运行它。反正有做到这一点吗?

amazon-web-services aws-cloudformation aws-api-gateway serverless-framework serverless-architecture

2
推荐指数
1
解决办法
299
查看次数

域名已与"现有"CloudFront分配相关联

当我尝试通过serverless-domain-manager设置域时sls create_domain,它失败了:

BadRequestException:您提供的域名已与现有CloudFront分配相关联.从现有CloudFront分配中删除域名或使用其他域名.如果您拥有此域名且未在现有CloudFront分配中使用该域名,请与支持部门联系.没有创建api.example.com.

找到了库失败.

请注意,我的帐户在CloudFront中没有任何内容.这是我打开它时看到的:

在此输入图像描述

同样有趣的是,在证书管理器中,它表示证书正在使用中: 在此输入图像描述

在Associated Resources下我可以看到cloudfront的条目: arn:aws:cloudfront:: ...

amazon-web-services amazon-cloudfront amazon-route53 serverless-framework

2
推荐指数
1
解决办法
1935
查看次数

在无服务器框架中的多个文件中声明资源

有没有办法将无服务器框架中的资源定义拆分为多个文件?就像是:

resources:
  - ${resources/base.yml}
  - ${resources/foo.yml}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试多种组合,但是我不断遇到关于找不到引用的错误。

serverless-framework

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

Lambda /预先签名的URL访问被拒绝

我编写了一个lambda函数,它返回S3 Buckets中文档的预签名URL.

代码非常简单:

            const url = s3.getSignedUrl('getObject', {
                Bucket: BUCKET_NAME,
                Key: myFile.Key,
                Expires: 20
            })

            const response = {
                statusCode: 200,
                headers: {
                    "Access-Control-Allow-Origin": "*"
                },
                body: JSON.stringify({
                    "url": url
                }),
            };
Run Code Online (Sandbox Code Playgroud)

有趣的是当我在本地调用此函数(使用无服务器框架)时,如下所示:

sls invoke local -f getEconomyFile -d '{ "queryStringParameters": { "key": "myfile.pdf" } }'
Run Code Online (Sandbox Code Playgroud)

它的工作原理!我有一个网址给我文件.

但是当我部署到AWS Lambda时,该函数返回一个URL,该URL总是在文件上显示"access denied":

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>93778EA364B3506B</RequestId>
    <HostId>
        yqnPC0SeIVE3/Pl7/d+xHDJ78=
    </HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

为什么它在本地工作而未部署?

谢谢 !

amazon-web-services aws-lambda serverless-framework

2
推荐指数
1
解决办法
2714
查看次数

DynamoDB查询二级索引,如何定义索引

我一直在四处走动,但不清楚该怎么做。

我有一个简单的表,我想在其中对几列进行查询。据我了解,这意味着为要查询的每一列创建二级索引。我已经使用Serverless框架定义了表,serverless.yml并且收到了各种奇怪的错误消息。

当前的serverless.yml定义是:

resources:
  Resources:
    MessagesDynamoDBTable:
      Type: 'AWS::DynamoDB::Table'
      Properties:
        AttributeDefinitions:
          - AttributeName: messageId
            AttributeType: S
          - AttributeName: room
            AttributeType: S
          - AttributeName: userId
            AttributeType: S
        KeySchema:
          - AttributeName: messageId
            KeyType: HASH
          - AttributeName: userId
            KeyType: RANGE
        LocalSecondaryIndexes:
          - IndexName: roomIndex
            KeySchema: 
              - AttributeName: room
                KeyType: HASH
            Projection: 
              ProjectionType: "KEYS_ONLY"
          - IndexName: userId
            KeySchema: 
              - AttributeName: userId
                KeyType: HASH
            Projection: 
              ProjectionType: "KEYS_ONLY"
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:custom.tableName}
Run Code Online (Sandbox Code Playgroud)

它的意思是类似于Slack服务-因此我想查询房间,用户等的条目。

根据我已经找到的文档,此定义很有意义。一个应该为索引中使用的列声明属性,而我已经这样做了。KeySchema-我确实只需要messageId字段,但是一条错误消息表明它需要RANGE索引,因此我将userId字段添加到KeySchema中只是为了关闭它。根据我已经找到的文档,二级索引字段看起来正确。

有了这个定义,当尝试使用 serverless deploy

An error occurred: …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb serverless-framework dynamodb-queries amazon-dynamodb-index

2
推荐指数
1
解决办法
3928
查看次数