标签: serverless-framework

在 Serverless 中使用 .env 文件设置 env

使用无服务器框架,我希望能够从环境变量更改 AWS 区域。

provider:
  name: aws
  region: ${env:AWS_REGION}
Run Code Online (Sandbox Code Playgroud)

然后,AWS_REGION可以设置为eu-west-2

但是,我想将其设置在.env文件中:

AWS_REGION=eu-west-2
Run Code Online (Sandbox Code Playgroud)

然后让.env无服务器读取。

有很多关于在serverless.yml文件中设置变量以及从该文件导出它们的主题,但我想将它们放入文件中。

serverless-framework

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

从 IBM Cloud Functions 调用时,PHP SDK 不会向 Sentry 发送错误

我正在使用无服务器框架将 PHP 代码部署为 IBM Cloud Function。

以下是操作 PHP 文件中的代码:

function main($args): array {

    Sentry\init(['dsn' => 'SENTRY_DSN' ]);

    try {
        throw new \Exception('Some error')
    } catch (\Throwable $exception) {
        Sentry\captureException($exception);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 serverless.yml 文件:

service: cloudfunc

provider:
  name: openwhisk
  runtime: php

package:
  individually: true
  exclude:
    - "**"
  include:
    - "vendor/**"

functions:
    test-sentry:
    handler: actions/test-sentry.main
    annotations:
        raw-http: true
    events:
        - http:
            path: /test-sentry
            method: post
            resp: http
    package:
        include:
        - actions/test-sentry.php

plugins:
  - serverless-openwhisk
Run Code Online (Sandbox Code Playgroud)

当我从本地环境(NGINX/PHP Docker 容器)测试操作处理程序时,错误将被发送到 Sentry。

但是,当我尝试从 IBM Cloud …

php sentry serverless-framework openwhisk ibm-cloud

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

id [现有堆栈] 的堆栈不存在

Stack XXX 的创建和部署没有问题。我更新了一个依赖项,现在想重新部署它,但是当我调用时sls deploy,它返回Stack with id YYY does not exist. 但是,堆栈 YYY 确实存在,并且与堆栈 XXX 位于同一区域。

我已经删除了堆栈 YYY 的 S3 文件并重新部署了它,这并没有解决问题。其他人已经讨论过sls remove导致这个问题,但我没有在任何一个堆栈上调用它。我还读到问题可能是 S3 中 100 个存储桶的软限制,但我没有接近那个。

这是在 XXX 中引用堆栈 YYY 的位置和方式:

functions:
  firstFunctionName:
    handler: ./handler.firstFunction
    environment:
      CONTENT_TABLE: ${cf:YYY.ContentTable}
Run Code Online (Sandbox Code Playgroud)

我希望sls deploy可以毫无问题地运行。这是带有环境信息的错误消息:

  Serverless Error ---------------------------------------

  Stack with id YYY does not exist

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information ---------------------------
     OS:                     win32
     Node Version:           10.15.3
     Serverless Version:     1.46.1
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation serverless-framework

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

为什么我的 Lambda 无法访问互联网?

我有一个可以从 API 网关或 ALB 请求触发的 Lambda 函数。我还有一个 RDS Aurora PostgreSQL 实例,它们都在 VPC 中运行。

我能够从 Lambda 连接到 RDS 实例就好了,但是我无法访问互联网,例如尝试向https://jsonplaceholder.typicode.com/todos/1发出请求将导致超时.

我也无法使用 DBeaver 等 SQL 客户端连接到远程数据库。

下面是一些详细信息,但如果您需要其他任何东西,请告诉我。我难住了。

Lambda 入站规则

Security group ID       Ports   Source
sg-0f2c4426c8fc85235    80      0.0.0.0/0
sg-0f2c4426c8fc85235    5432    0.0.0.0/0
sg-0f2c4426c8fc85235    All     sg-0f2c4426c8fc85235
sg-0f2c4426c8fc85235    22      0.0.0.0/0
sg-0f2c4426c8fc85235    443     0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

Lambda 出站规则

Security group ID       Ports   Destination
sg-0f2c4426c8fc85235    All     0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

RDS 连接

目录

专有网络 虚拟主机

公共子网 发布订阅

私有子网 优先级

编辑

Nat 网关(与公共子网关联) 纳特

路由表 rtables

路由表路由 路由表A

路由表B

路由表C

编辑 2

Lambda 子网

兰苏

amazon-web-services aws-lambda serverless-framework

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

无服务器框架 - 具有授权者 COGNITO_USER_POOLS 的 Lambda 函数始终返回“未经授权”

我不明白我的授权有什么问题。

我有一个 Hello 函数,它只返回一条简单的静态消息。如果我在没有设置“Authorizer”的情况下部署,它就可以工作。我已经在邮递员上进行了测试。当我尝试添加授权者时,问题就出现了。

我的 Cognito 已完全正常工作。在我的前端,我可以注册,然后登录,然后从此登录会话获取令牌。

当我去邮差测试时,我总是得到“未经授权”的答案。在 Postman 上,我测试了 GET 方法,在“标头”选项卡上,我添加了“授权”属性,并粘贴了我从登录会话中获得的令牌值。我还在一些地方推荐的前缀“bearer”的值字段上对此进行了测试。没有成功。

在此输入图像描述

过去一周我一直在努力解决这个问题。请,任何帮助都将非常有用。

serverless.yml

provider:
  name: aws
  runtime: nodejs10.x
  stage: dev
  region: eu-west-1
  environment: 
    MY_TABLE: ${self:custom.myStage}_${self:custom.settings.tb_items}
    MY_STAGE: ${self:custom.myStage}
    MY_DOMAIN: ${self:custom.myDomain}
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "dynamodb:GetItem"
        - "dynamodb:PutItem"
        - "dynamodb:UpdateItem"
        - "dynamodb:DeleteItem"
        - "dynamodb:Scan"
      Resource: "*"

functions:
  hello:
    handler: ${self:custom.pathFunc}/phraseOption.hello
    events:
      - http: 
          method: GET 
          path: hello
          cors: true
          integration: lambda-proxy
          authorizer:
            type: COGNITO_USER_POOLS
            authorizerId:
              Ref: ApiGatewayAuthorizer

resources:
  Resources:
    CognitoUserPool:
      Type: "AWS::Cognito::UserPool"
      DeletionPolicy: Retain
      Properties:
        MfaConfiguration: OFF
        UserPoolName: ${self:custom.myStage}_aePool …
Run Code Online (Sandbox Code Playgroud)

unauthorized amazon-cognito aws-lambda aws-api-gateway serverless-framework

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

使用无服务器框架时更改 API 网关名称

无服务器框架使开发人员可以非常轻松地创建连接到 lambda 函数的 API 网关。像这样

hello:
  name: hello-handler
  description: blablabla
  handler: /lambda-functions/hello-handler.handler
  role: HelloRole
  package:
    include:
      - lambda-functions/hello-handler.js
  events:
    - http: GET hello
Run Code Online (Sandbox Code Playgroud)

我的问题是如何更改将要创建的 API 网关的名称?

serverless-framework aws-serverless

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

在 YAML 中使用 Fn::GetAtt 时,流集合条目之间缺少逗号

我正在尝试在 YAML 中为 DynamoDB 添加事件流,DynamoDB 表是一个根据其部署到的环境而变化的变量,我用来Fn::GetAtt确定TABLE_NAME,但它给了我一个例外。

  1. 语法正确吗?
  2. 除了 YAML 之外,还有其他方法可以配置流吗Fn::GetAtt

例外:

missed comma between flow collection entries in "erverless.yml" at line 60, 
column28:Fn::GetAtt: [ ${self:custom.TABLE_NAME ...
Run Code Online (Sandbox Code Playgroud)

代码:

  custom:
      TABLE_NAME : mix of account + env + name
  events:
  - stream:
      type: dynamodb
      arn:
        Fn::GetAtt: [ ${self:custom.TABLE_NAME}, StreamArn ]
Run Code Online (Sandbox Code Playgroud)

yaml serverless-framework amazon-dynamodb-streams serverless

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

如何限制无服务器 lambda 函数的并行执行

我正在使用 AWS 并使用无服务器框架。我的无服务器 lambda 函数被事件触发。然后我与数据库交谈,我可以用数据库打开的连接数量有限制。

所以我只想一次运行 5 个 lambda 函数并将其他事件排入队列。我知道有:

    provisionedConcurrency: 3 # optional, Count of provisioned lambda instances
    reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,指定数量的长时间运行的作业将在那里,它们将为事件提供服务。

但我想要的不是事件排队,而是触发函数,以便一次最多运行 5 个函数。

我想知道 AWS 是否支持这种事件排队的概念?

aws-lambda serverless-framework serverless-architecture serverless aws-serverless

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

如何在“serverless.yml”的“Resources”中使用“If”条件?

我尝试!If在部分中使用条件resources但失败了。我想控制是否设置provisionedConcurrency我的 lambda。lambda 在function节 下定义。


functions:
  getTransactionsHandler:
    ...

resources:
  Conditions:
    CommonPCNotZero: !Not [!Equals [0, '${self:custom.commonPC}']]
  Resources:
    !If 
      - CommonPCNotZero
      - getTransactionsHandler:
        Type: AWS::Lambda::Alias
          Properties:
            FunctionName: !Ref GetTransactionsHandlerLambdaFunction
            FunctionVersion: !Join ['', [!Ref GetTransactionsHandlerLambdaFunction, ':$LATEST']]
            ProvisionedConcurrencyConfig:
              ProvisionedConcurrentExecutions: '${self:custom.commonPC}'
      - !Ref AWS::NoValue
Run Code Online (Sandbox Code Playgroud)

运行时出现以下错误sls deploy

Error: The CloudFormation template is invalid: Template format error: [/Resources/Fn::If] resource definition is malformed
Run Code Online (Sandbox Code Playgroud)

使用条件的正确方法是什么!if

amazon-web-services aws-cloudformation aws-lambda serverless-framework

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

Azure 提供商中的 AWS lambda 层相当于什么?

问题

\n

我有一个项目是独立的aws 无服务器后端,它利用 lambda 层概念来共享node_modules和其他custom dependencies

\n

在我的案例中,自定义依赖项的用例之一是将所有常见代码(例如HTTP_STATUS_CODE枚举)以及Api responses util状态代码和续集模型和服务放在一个文件夹中,稍后将其复制到node_modules并将其托管到s3 bucket

\n

文件夹结构

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 customDependencies\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 nodejs\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sequelizeORM\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 config\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 migrations\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 seeders\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 services\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 functions\n     \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 func1\n     \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 func2\n   \xc2\xa0    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 func3\n    \n\n
Run Code Online (Sandbox Code Playgroud)\n

在将函数部署到 AWS 提供商之前,我将所有文件从customDependenciesto复制node_modules并将其推node_modules送到 S3 并创建一个所有 lambda 函数引用的层资源node_modules

\n

使用通用代码的函数示例

\n
//func1\n\nimport {HTTP_STATUS_CODE, stringifyResponse} from …
Run Code Online (Sandbox Code Playgroud)

azure amazon-web-services webpack serverless-framework serverless

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