标签: serverless-framework

Amazon API Gateway 500中的自定义授权程序错误

我使用Serverless-Authentication-boilerplate并希望映射自定义错误响应.但它总是返回500错误.

authorize.js

// Authorize
function authorize(event, callback) {
  let providerConfig = config(event);
  try {
    let data = utils.readToken(event.authorizationToken, providerConfig.token_secret);
    console.log("Decrypted data: " + JSON.stringify(data));

    let methodArn = event.methodArn.replace(/(GET|POST|PUT|DELETE)/g, '*').replace(/mgnt.+/g, 'mgnt/*');

    console.log(`Change methodArn to: ${methodArn}`);

    // TODO: handle expiration time validation
    callback(null, utils.generatePolicy(
      data.id, // which is $context.authorizer.principalId
      'Allow',
      methodArn));
  } catch (err) {
    console.log(err);
    callback('401 Unauthenticated');
  }
}
Run Code Online (Sandbox Code Playgroud)

S-function.json

responses:{ 
  "401 Unauthenticated.*": {
      "statusCode": "401"
  },
  "default": {
      "statusCode": "200",
      "responseModels": {
        "application/json;charset=UTF-8": "Empty"
      },
      "responseTemplates": {
        "application/json;charset=UTF-8": …
Run Code Online (Sandbox Code Playgroud)

aws-lambda aws-api-gateway serverless-framework

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

如何在Serverless v1.0中导入Python依赖项

语言:Python Framework:无服务器 v1.0

通常我会pip freeze > requirements.txt在项目根目录中运行

如何将这些依赖项打包到每个部署中?

python serverless-framework

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

调试无服务器框架调用本地函数

我正在尝试调试sls调用本地.

我的设置:在此输入图像描述

但是我一直在:

/Users/nikos/.nvm/versions/node/v6.9.1/bin/node --debug-brk=63417 --expose_debug_as=v8debug /Users/nikos/.nvm/versions/node/v6.9.1/bin/serverless invoke local -f createTodo
Debugger listening on [::]:63417

Process finished with exit code 130 (interrupted by signal 2: SIGINT)
Run Code Online (Sandbox Code Playgroud)

debugging node.js serverless-framework

6
推荐指数
3
解决办法
6614
查看次数

从serverless.yml中的外部文件设置环境变量

我正在使用无服务器和无服务器本地进行本地开发。

我有一个外部文件,其中包含对我node.env在应用程序中检索到的环境变量的引用。

据我了解,我应该能够设置环境变量,例如

dev:
   AWS_KEY: 'key',
   SECRET: 'secret
test:
   AWS_KEY: 'test-key',
   SECRET: 'test-secret',
etc:
   ...
Run Code Online (Sandbox Code Playgroud)

并通过serverless.yml中的以下行将这些环境变量包含在我的应用程序中

provider:
  name: aws
  runtime: nodejs4.3
  stage: ${opt:stage, self:custom.default_stage}
  deploymentBucket: serverless-deploy-packages/${opt:stage, self:custom.default_stage}
  environment: 
    ${file(./serverless-env.yml):${opt:stage, self:custom.default_stage}}
Run Code Online (Sandbox Code Playgroud)

然后在命令行中,我打电话

serverless offline --stage dev --port 9000

我以为这会在我的应用程序中包含正确的var,但是它不起作用。这不是应该的工作方式吗?我在这里做错什么了吗?

yaml environment-variables serverless-framework

6
推荐指数
3
解决办法
4558
查看次数

将Git Repo直接镜像到AWS CodeCommit

我想在我的Git Repository中创建一个备份并将其保存到AWS CodeCommit.我不想包括使用我的本地机器.任何人都可以告诉我如何直接或通过AWS Lambda进行此操作?

git aws-lambda aws-codecommit serverless-framework

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

需要配置无服务器资源输出以获取api网关api id

我有一个无服务器项目,正在创建API网关API等.项目中的一个功能需要为API端点生成URL.

我的计划是使用serverless.yml中的资源输出获取API ID,然后创建URL并将其作为env参数传递给lambda函数.

我的问题/问题是如何将API ID作为serverless.yml中的云形成输出?

我试过了:

resources:
  Outputs:
    RESTApiId:
      Description: The id of the API created in the API gateway
      Value:
        Ref: name-of-api
Run Code Online (Sandbox Code Playgroud)

但这会给出错误:

The CloudFormation template is invalid: Unresolved resource dependencies [name-of-api] in the Outputs block of the template
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-api-gateway serverless-framework

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

如何使用非主键字段查询DynamoDB?

我的dynamoDB表中有以下数据。

在此处输入图片说明

这是我的代码:

const userStatusParams = {
        TableName: process.env.USERSTATUS_TABLE,
        KeyConditionExpression: "loggedIn = :loggedIn",
        ExpressionAttributeValues: {
          ":loggedIn": true
        }
      };
      var usersResult;
      try {
        usersResult = await dynamoDbLib.call("query", userStatusParams);
        console.log(usersResult);
      }catch (e) {
        console.log("Error occurred querying for users belong to group.");
        console.log(e);
      }
Run Code Online (Sandbox Code Playgroud)

亚马逊返回此错误:

{ ValidationException: Query condition missed key schema element: userId
    at Request.extractError ...
Run Code Online (Sandbox Code Playgroud)

我如何让它返回所有登录记录== true的记录?

目前,我的数据库通过我的serverless.yml配置来构建。

phoneNumberTable: #This table is used to track phone numbers used in the system.
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.phoneNumberTable}
        AttributeDefinitions: #UserID in this case …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-dynamodb serverless-framework

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

如何在无服务器中允许CORS用于自定义标头?

这里的核心问题是:" 如何在使用无服务器框架处理的CORS GET请求中允许自定义标头? ".如果您知道答案,请通过Go,收取200美元并回答该问题.如果这不是一个直接答案的问题,这里有详细信息:

我正在使用AWS Lambda上的无服务器框架编写应用程序(API通过AWS API Gateway进行管理.坦率地说,我不完全确定这意味着什么或者提供了什么好处,但这就是无服务器为我自动配置的内容).我正在尝试创建一个开放的API,需要启用CORS.我正在使用Lambda代理集成.我遵循了这里的做法.他们给我带来了部分成功.如果我不包含我的自定义标题,我的应用程序当前已启用CORS.但是,它仍然不适用于自定义标头.

当我向API发送以下请求时:

var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = false;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://api.spongebobify.com/");
xhr.setRequestHeader("text", "hey");


xhr.send(data);
Run Code Online (Sandbox Code Playgroud)

...我收到此错误:

Failed to load https://api.spongebobify.com/: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://forum.serverless.com' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

如果我使用Chrome开发工具检查"响应标头",则会确认此错误消息:响应标头中没有Access-Control-Allow-Origin.

但是,如果我发送相同的请求与setRequestHeader()注释掉,它完美地工作(是的,我知道它返回403错误:这是故意行为).

这就是我认为正在发生的事情.我的服务有两个潜在的CORS问题:域相关(请求不来自原始域)和自定义头相关(CORS规范未安全列出的头,更多这里).不知何故,无服务器框架在第二个问题上绊倒,导致它甚至没有达到它发出适当的头以允许所有("*")域的程度.

这是我的serverless.yml配置文件:

# serverless.yml …
Run Code Online (Sandbox Code Playgroud)

lambda node.js cors serverless-framework serverless

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

即使在无服务器yaml中设置了params后,QueryString参数也未得到验证

我通过使用无服务器框架部署的lambda函数配置了API网关.我已经在yaml文件中定义了一些queryStringParameters为true.但是,即使在URL中未传递Required(强制)queryStringParams,请求也会通过该服务.PFB类似的配置.

functions: functionName: name: serviceName handler: handler.handle events: - http: path: /path method: get request: parameters: querystrings: param1: true param2: true

似乎无服务器无法验证param1和param2是否作为queryString传递.我们应该有一个明确的请求验证器吗?是否可以使用无服务器?

aws-lambda serverless-framework

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

AWS Lambda +无服务器框架-使网站可从中国访问

我试图了解我需要经历的各个步骤和要求,以便使我们的网站在法规方面(长防火墙)在中国可用,也在技术方面(技术限制和执行更改)从中国提供https://unly.org/

目前似乎不允许这样做:http : //www.chinafirewalltest.com/? siteurl= https%3A%2F%2Funly.org%2F

在此处输入图片说明

我不需要也不想拥有.ch网站,我只想通过https://unly.org/将我的网站提供中文版本。此外,该网站目前托管在AWS Lambda上(使用无服务器框架),并且仅部署在eu-west-1区域(爱尔兰)中。

该网站没有在线销售任何产品:这是一个信息网站,而不是电子商务。


我已经研究了这个问题几个小时,但是对于实现此目标所需的确切步骤,我有些迷失。

以下是一些我尚未找到答案的问题:

  • 是否需要将lambda部署到cn-north-1(中国北京),或者eu-west-1如果我获得ICP许可证,中国用户可以访问我的lambda吗?

无论部署区域在哪里,我似乎都需要ICP许可证,如AWS FAQ在 https://www.amazonaws.cn/en/about-aws/china/faqs/#new%20step上所述

问:如果要在AWS中国(北京)地区或AWS中国(宁夏)地区托管公共内容,是否需要提交ICP备案或ICP许可证?

是。根据中国法律法规,如果您使用任一AWS中国地区托管提供非商业互联网信息服务的网站,则必须通过相关政府机构对非商业网站(“ ICP备案”)进行备案程序。如果您使用任一AWS中国地区托管提供商业互联网信息服务的网站,则必须从相关政府机构获得商业网站的增值电信许可证(“ ICP许可证”)。在使用AWS中国地区之一托管公共内容之前,可能会要求您提供ICP记录或ICP许可证(如果适用)。

AWS中国(北京)地区由负责北京地区托管内容的Sinnet运营,而AWS中国(宁夏)地区由负责宁夏地区托管内容的NWCD运营。Sinnet和NWCD都为寻求ICP相关服务的客户提供免费支持,尽管客户需承担适用政府机构收取的任何费用。要了解有关存档程序的更多信息,请访问Sinnet(http://www.sinnet.com.cn/service.aspx?PartNodeId=35)和NWCD(http://nwcdcloud.cn/ICP.aspx)

至于实际获得许可证,这里有点话题了,但是我不明白第一个提供商的工作流程:

无论如何,该过程似乎需要大约4-6周的时间。因此,可能要花费更多的时间。


关于现在的技术细节,似乎中国地区(cn-north-1北京和cn-northwest-1宁夏)在AWS Lambda上表现得非常特殊。

  1. 它们仅支持REGIONAL端点
  2. 它们不支持本机无服务器environment变量

看到

此外,对网站本身也会产生技术影响:

  • Google服务被禁止或受到限制(Google Analytics(分析)(受限制),Google Tag Manager,Google Fonts(被禁止)),并且必须进行更改,转换为拥有的CDN等。

而且我可能已经错过了其他技术限制,因为那只是我在挖掘2小时内了解到的那些技术限制。

我还有其他步骤被忽略吗?(法规或技术)您是否对如何在中国启用AWS Lambda托管网站有任何建议或反馈?

amazon-web-services aws-lambda great-firewall-of-china serverless-framework aws-serverless

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