标签: serverless-framework

如何在模板之间共享授权人而不达到每个 API 的授权人限制

我有十几个服务,每个服务都有自己的无服务器模板文件,在 API Gateway 上共享相同的根 API。我的根serverless.yml文件定义了 API 和授权者:

...
resources:
  Resources:
    ApiGatewayRestApi:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: ${self:service.name}-${self:provider.stage}
        Description: Medimap API Gateway
    GatewayResponseDefault4XX:
      Type: "AWS::ApiGateway::GatewayResponse"
      Properties:
        ResponseParameters:
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
        ResponseType: DEFAULT_4XX
        RestApiId:
          Ref: "ApiGatewayRestApi"

  Outputs:
    RestApiId:
      Value:
        Ref: ApiGatewayRestApi
      Export:
        Name: ${self:service.name}-${self:provider.stage}-RestApiId
    RootResourceId:
      Value:
        Fn::GetAtt: ApiGatewayRestApi.RootResourceId
      Export:
        Name: ${self:service.name}-${self:provider.stage}-ApiGatewayRestApiRootResourceId
    AuthenticationService:
      Value:
        Fn::GetAtt: AuthenticationServiceLambdaFunction.Arn
      Export:
        Name: ${self:service.name}-${self:provider.stage}-AuthenticationService

functions:
  authenticationService:
    handler: src/api/common/authenticationService.handler
    environment:
      JWT_SECRET: ${env:JWT_SECRET}
    events:
      - http:
          path: authenticationService
          method: post
          cors: true
Run Code Online (Sandbox Code Playgroud)

在我的每项服务的模板中,我都有如下代码:

provider:
  ...
  apiGateway:
    restApiId:
      "Fn::ImportValue": …
Run Code Online (Sandbox Code Playgroud)

aws-api-gateway serverless-framework

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

在 AWS 中删除对象后出现无服务器部署问题

我有一个无服务器项目,已成功部署到 AWS,其中包含多个 Lambda 函数和一个带有 API 网关事件的 Step Function 状态机。我手动删除了 AWS 中的 Step Function,现在sls deploy不部署 Step Function。

如何让事情恢复同步?

谢谢!

amazon-web-services serverless-framework serverless

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

在无服务器框架中使用路径参数

 functions:
  update:
    handler: todos/update.update
    events:
      - http:
          path: /update/{title}
          method: put
Run Code Online (Sandbox Code Playgroud)

我必须如何定义路径参数才能使用无服务器框架将其传递给我的 AWS Lambda 函数?

我想用于 lambda 的语言是 Python3。

amazon-web-services python-3.x aws-lambda serverless-framework

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

AWS SAM 所需的查询字符串参数

我在SAM 项目文件requred query string params中指定时遇到问题。template.yml到目前为止,我没有找到这样的方法,只发现我们可以通过标头访问 lambda 函数中的查询字符串参数event.queryStringParameters

那么我应该检查 lambda 层是否需要参数吗?或者有没有办法在 API 层本身做到这一点。因为我知道在serverless框架中我们可以指定是否需要查询字符串参数,如下所示:

functions:
  create:
  handler: posts.create
  events:
    - http:
      path: posts
      method: get
      request:
        parameters:
          querystrings:
            type: true
Run Code Online (Sandbox Code Playgroud)

sam amazon-web-services serverless-framework serverless aws-sam

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

如何授予向不同 AWS 账户中的 SQS 队列发送消息的权限?

我正在编写一个 Python 应用程序,该应用程序从帐户 A 中提取数据并将其发送到帐户 B 中的 SQS 队列。执行 lambda 函数时,它返回以下错误:

"errorMessage": "调用 SendMessage 操作时发生错误 (AccessDenied):访问资源https://eu-central-1.queue.amazonaws.com/被拒绝。",

如果我在同一帐户中使用 SQS 队列,它就可以工作。

我正在使用无服务器框架,我需要在跨账户角色中使用ExternalId 。

我做了什么:

在账户 A(执行 Lambda 函数的地方)

以下功能是使用Serverless框架部署的:

  TotalCollectorWeekToDate:
    handler: environment.total_wtd_summary_handler
    module: collectors
    memorySize: 128
    role: arn:aws:iam::<ACCOUNT_A>:role/FunctionsLambdaRole
    timeout: 30
    events:
      - schedule:
          rate: cron(0 7 * * ? *)
          enabled: true
    environment:
      COST_DATA_SQS_QUEUE_URL: https://sqs.eu-central-1.amazonaws.com/<ACCOUNT_B>/prod-analyser-queue
Run Code Online (Sandbox Code Playgroud)

角色

Resources:
  FunctionsLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: FunctionsLambdaRole
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action: "sts:AssumeRole"
      Path: /
      ManagedPolicyArns: …
Run Code Online (Sandbox Code Playgroud)

python amazon-sqs amazon-iam serverless-framework

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

无服务器框架 WarmUp 插件未被调用

我尝试将 WarmUp 无服务器插件集成到我的项目中。但是,我相信它不起作用。我在 lambda\xe2\x80\x99s CloudWatch 日志组中没有看到 WarmUp 的调用,并且 lambda 在空闲一段时间后确实需要预热时间。

\n

我的配置如下:

\n
service: ${file(./${env:DEPLOY_FILE_NAME}):service}\n\nprovider:\n  name: aws\n  custom:\n    roleName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):roleName}\n    profileName: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):profileName}\n    bundle:\n      ignorePackages:\n        - pg-native\n    warmup:\n      enabled: true\n      events:\n        - schedule: rate(5 minutes)\n      prewarm: true\n  plugins:\n    - pluginHandler\n    - serverless-plugin-warmup\n  runtime: nodejs12.x\n  iamRoleStatements:\n    - Effect: 'Allow'\n      Action:\n        - 'lambda:InvokeFunction'\n      Resource:\n      - Fn::Join:\n        - ':'\n        - - arn:aws:lambda\n          - Ref: AWS::Region\n          - Ref: AWS::AccountId\n          - function:${self:service}-${opt:stage, self:provider.stage}-*\n  cfLogs: true\n  stage: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):stage}\n  region: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):region}\n  memorySize: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):memorySize}\n  timeout: ${file(./${env:DEPLOY_FILE_NAME_STAGE}):timeout}\n  keepWarm: false\n  useApigateway: …
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework serverless

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

无服务器| 如何将 Lambda 授权者设置为 None(公共 API)

请考虑以下代码(serverless.yml):

functions:
  exportCvToPdf:
    handler: handler.exportCvToPdf
    timeout: 20
    events:
      - http:
          path: export
          method: post
Run Code Online (Sandbox Code Playgroud)

部署到 AWS 会返回指向 API 端点的链接。对端点进行 CURL 操作会返回:

{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)

如何使用无服务器框架创建公共端点?

我已经尝试过以下方法:

functions:
  exportCvToPdf:
    handler: handler.exportCvToPdf
    timeout: 20
    events:
      - http:
          path: export
          method: post
          authorizer: none # None NONE "none" "NONE" "None" has also been tried
Run Code Online (Sandbox Code Playgroud)

上面在部署时返回错误:

Function none doesn't exist in this Service
Run Code Online (Sandbox Code Playgroud)

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

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

我想将 Serverless 版本从 2.41.2 降级到 2.35.0

我错误地在我的电脑上安装了更高版本的无服务器。v2.41.2现在由于v2.35.0一些项目需求,我想将我的无服务器框架版本从 降级到。

我曾尝试做的事情:

我使用 卸载了当前的无服务器框架npm uninstall -g serverless

然后运行这个命令npm install -g serverless@2.35.0

但是当我运行此命令时,serverless --version它仍然在我的电脑上显示版本 2.41.2。

node.js serverless-framework serverless aws-serverless serverless-offline

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

ConflictException:无服务器 AWS 中该域名的基本路径已存在

我使用 AWS lambda 和 NodeJS 环境构建了应用程序。对于部署目的,我使用无服务器框架。现在,当我尝试使用带有 Nodejs 模板的无服务器框架将我的服务部署到 AWS 时。它已部署到服务器,但未将自定义域名映射到我的服务。之前我映射了它,之后自动映射了我的域名。现在,当我尝试重新部署服务时,它会抛出无法映射客户域的错误。我已附上下面的错误日志。你可以检查一下。您能帮我解决这个问题吗?

以下是我的命令的输出sls deploy -s local

Serverless: Running "serverless" installed locally (in service node_modules)
Serverless: Load command interactiveCli
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command config:tabcompletion
Serverless: Load command config:tabcompletion:install
Serverless: Load command config:tabcompletion:uninstall
Serverless: Load command create
Serverless: Load command install
Serverless: Load command package
Serverless: Load command deploy
Serverless: Load command deploy:function
Serverless: Load command deploy:list
Serverless: Load command deploy:list:functions
Serverless: Load command invoke …
Run Code Online (Sandbox Code Playgroud)

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

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

无服务器 lambda 全局环境变量

我正在使用无服务器,并且试图弄清楚如何重写此 serverless.yml 文件,这样我就不会重复每个函数的环境变量。有没有办法全局设置环境变量?

service: test-api
frameworkVersion: ">=1.2.0 <2.0.0"
provider:
  name: aws
  runtime: nodejs12.x
  timeout: 30
  stage: dev
  memorysize: 2048
  region: us-east-2
  logRetentionInDays: 21

functions:
  doCreate:
    handler: functions/do-create.handler
    environment:
      DB_PORT: ${ssm:/${self:custom.stage}/db_port}
      DB_URL: ${ssm:/${self:custom.stage}/db_url}
      API_KEY: ${ssm:/${self:custom.stage}/api_key}
      ENV: "${self:custom.stage}"
      SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
  doUpdate:
    handler: functions/do-update.handler
    environment:
      DB_PORT: ${ssm:/${self:custom.stage}/db_port}
      DB_URL: ${ssm:/${self:custom.stage}/db_url}
      API_KEY: ${ssm:/${self:custom.stage}/api_key}
      ENV: "${self:custom.stage}"
      SEARCH_ARN: ${ssm:/${self:custom.stage}/search_arn}
Run Code Online (Sandbox Code Playgroud)

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

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