标签: serverless-framework

如何从 YAML 调用 .env 文件?

我想从我的yaml中隐藏我的秘密凭证,我需要使用.env,那么如何从我的yaml中调用.env文件,以便每次我调用这个YAML,YAML都会自动调用.env文件。请帮我。谢谢

yaml pyyaml serverless-framework

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

我们可以使用 Helmet.js 和 body-parser 等插件来保护无服务器功能吗?如果没有,还有其他选择吗?

我们可以使用 Helmet.js 和 body-parser 等插件来保护无服务器功能吗?如果我们不能,我们如何将这些功能实现到我们的无服务器功能中?

lambda aws-lambda serverless-framework

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

API网关排序查询字符串

我目前正在尝试使用 API Gateway + Lambda 上的无服务器框架来实现 Express 应用程序。一切都按预期进行,直到我开始在我们这边引入请求签名。签名的工作方式是使用秘密令牌对包含查询字符串的完整 URL 进行签名。不幸的是,API Gateway 或 Cloudfront 似乎都按字母顺序重新排序查询字符串,这导致我们这边生成的校验和与客户端生成的校验和不同。

我们的 Express 服务器看到的内容:

https://example.com/endpoint?build_number=1&platform=ios

客户发送的内容:

https://example.com/endpoint?platform=ios &build_number=1

正如您所看到的,查询参数按字母顺序重新排序,这不是我所期望的行为。

任何想法?

node.js express aws-lambda aws-api-gateway serverless-framework

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

尝试让我的 lambda putObject 通过无服务器访问现有 S3 存储桶

使用无服务器框架时,我在尝试为 lambda 的 S3 存储桶分配权限时遇到困难。

我有一个 lamba 函数,最终将 JSON 配置文件写入 S3 存储桶,我希望通过网络将其提供给应用程序。我最初单独设置了一个 S3 存储桶(不在 中serverless.yml),并且我的amba成功地在正确的 S3 存储桶中创建了文件,但当我将其部署到 AWS 时,出现“内部服务器错误”。我认为这是因为部署时设置的权限未授予它对存储桶的写入权限。

我有点不同意如何做到这一点。我已阅读此主题,例如,并尝试用serverless.yml以下内容补充我的内容:

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: eu-west-1
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: arn:aws:s3:::com.joostschuur.quizdata
Run Code Online (Sandbox Code Playgroud)

在本例中,arn:aws:s3:::com.joostschuur.quizdata是我设置的手动创建的 S3 存储桶,并且希望我部署的 lambda 具有写入权限。但是,这会导致部署错误:

CloudFormation 模板无效:模板格式错误:模板的资源块中未解析的资源依赖项 [arn:aws:s3:::com.joostschuur.quizdata]

如果有一种方法可以将所有 S3 设置放入 serverless.yml 中(即指定存储桶,指定其中的文件应可通过网络访问等),我也很乐意这样做。

建议?

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

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

Fn::GetAtt 的无服务器 CloudFormation 模板错误实例引用未定义的资源

我正在尝试设置一个新的存储库,但不断收到错误消息

The CloudFormation template is invalid: Template error: instance of Fn::GetAtt 
references undefined resource uatLambdaRole
Run Code Online (Sandbox Code Playgroud)

在我的 uat 阶段,但是具有完全相同格式的开发阶段工作正常。

我为每个环境都有一个资源文件。

开发者

devLambdaRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: dev-lambda-role # The name of the role to be created in aws
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service:
              - lambda.amazonaws.com
          Action: sts:AssumeRole
    ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AWSLambdaFullAccess
      #Documentation states the below policy is included automatically when you add VPC configuration but it is currently bugged.
      - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
Run Code Online (Sandbox Code Playgroud)

乌特

uatLambdaRole:
  Type: AWS::IAM::Role
  Properties:
    RoleName: uat-lambda-role …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation serverless-framework

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

如何使用无服务器框架将环境变量传递给 AWS Lambda 函数?

我正在使用 aws-node 模板。我想做这样的事情:

sls deploy URL='https://postman-echo.com/post'
Run Code Online (Sandbox Code Playgroud)

其中URL是环境变量。我正在尝试将此环境变量传递给我的serverless.yml

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: us-west-2
  environment:
    URL: ${env:URL}
Run Code Online (Sandbox Code Playgroud)

然后在我的handler.js中访问它

const axios = require('axios');

module.exports.hello = async (event, context) => {

  console.log("Lambda invoked\n")

  await axios.post(
    process.env.URL // Accessing the environment variable.
  ).then(function (response) {
      console.log(`Status: ${response.status}`)
    })
    .catch(function (error) {
      console.log(`Error`)
      console.error(error);
    });


  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Function executed successfully!',
      input: event
    }),
  };

};
Run Code Online (Sandbox Code Playgroud)

我怀疑问题在于我如何将环境变量传递给程序,但我的研究没有结果。

environment-variables node.js aws-lambda serverless-framework

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

使用无服务器框架,如何替换 cognito 用户池而不是更新?

我正在使用无服务器框架来管理我的 AWS 资源。现在我想替换我的 cognito 用户池以更新别名、用户名属性等的配置。

我有: - 在 .yml 中更改了 cognito 用户池资源的配置 - 更改了 cognito 用户池名称和客户端名称

但是在部署时,我收到了错误: Updates are not allowed for property - UserPoolName.

我预计这应该导致替换,而不是更新。

我错过了什么?谢谢。

serverless-framework

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

AWS:无法导入模块“处理程序”:没有名为“numpy”的模块

AWS 新手在这里

我必须通过 gitlab CI 作为 lambda 托管我的 python 脚本,并通过 AWS 上的 cloudwatch 触发它。

我正在学习以下教程:

  1. https://docs.gitlab.com/ee/user/project/clusters/serverless/aws.html
  2. https://serverless.com/blog/serverless-python-packaging/

在第一个教程中,我只获取该.gitlab-ci.yml文件并将其添加到第二个教程中显示的教程中(但我选择 3.7 作为运行时而不是 python 3.6)

我有以下serverless.yml文件

service: numpy-test

provider:
  name: aws
  runtime: python3.7

functions:
  numpy:
    handler: handler.main

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

package:
  exclude:
    - venv/**
Run Code Online (Sandbox Code Playgroud)

和以下.gitlab-ci.yml文件:

service: numpy-test

provider:
  name: aws
  runtime: python3.7

functions:
  numpy:
    handler: handler.main

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

package:
  exclude:
    - venv/**
Run Code Online (Sandbox Code Playgroud)

当我推送.gitlab-ci.yml文件时,它运行没有任何错误。

在此处输入图片说明

我可以看到在我的 AWS lambda …

python amazon-web-services gitlab serverless-framework serverless

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

如何在无服务器中为一个处理程序定义多个路径?

我一直在尝试和在线搜索,但无法找到回复。是否可以使用无服务器框架实现以下目标:

我想使用get.handler具有以下定义的代码来获取一个项目和获取所有项目。所以:

  • 如果我点击api.example.com/items/我检索所有项目
  • 如果我打api.example.com/items/1234我检索项目id = 1234
 - get_items:
    handler: project/items/get.handler
    events:
      - http:
          path: items/{itemId}
          method: get
Run Code Online (Sandbox Code Playgroud)

到目前为止get.handler我检查event.pathParameters? event.pathParameters.itemId : null特定项目是否存在并调用某个getItem(itemdId)函数,如果它不存在,则调用一个getAll()函数。

如果我在它工作的路径中传递项目 id,但是当我发出请求时,api.example.com/items/我收到以下错误: not a valid key=value pair (missing equal-sign) in Authorization header. 这意味着我的路径有问题,我必须将项目 ID 传递给路径参数。

我的问题是:有没有办法可以在该- http:区域使用多条路径,或者有什么推荐的方法可以解决这个问题(只需创建两个单独的处理程序)?

amazon-web-services serverless-framework serverless

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

无需资源即可创建 CloudFormation 堆栈

我的大部分基础设施都使用 Terraform,但同时我使用无服务器框架来定义一些 Lambda 函数。无服务器在幕后使用 CloudFormation,我需要访问 Terraform 创建的资源的一些 ARN。

我的想法是在 Terraform 中创建一个 CloudFormation 堆栈并导出我需要的所有值,但它抱怨说它无法在没有任何资源的情况下创建堆栈。我不想在 CloudFormation 中定义任何资源,只想定义输出,所以我虽然可能有一种方法可以定义一些虚拟资源,但我找不到任何资源。

有没有办法解决这个问题?如果没有,我也愿意接受将参数从 Terraform 传递到 CloudFormation 的其他建议。

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

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