标签: serverless-framework

requestParameters 返回“指定的映射表达式无效:true”

我正在配置 lambda 函数的 API 网关与Serverless Framework 0.4.2 版的集成。

我的问题是定义端点的请求参数。API 网关条目的AWS 文档说:

请求参数

表示 Amazon API Gateway 可以接受的请求参数。请求参数表示为键/值映射,源作为键,布尔标志作为值。布尔标志用于指定是否需要该参数。源必须与模式 method.request.{location}.{name} 匹配,其中 location 是查询字符串、路径或标头。name 是有效的唯一参数名称。此处指定的源可用于集成以映射到集成请求参数或模板。

据我了解, 中的配置s-function.json直接提供给 AWS CLI,因此我以以下格式指定了请求参数: "method.request.querystring.startYear": true. 但是,我收到一个Invalid mapping expression specified: true错误。我也尝试将配置指定为"method.request.querystring.startYear": "true"相同的结果。

s-function.json

{
    "name": "myname",
    // etc...
    "endpoints": [
        {
            "path": "mypath",
            "method": "GET",
            "type": "AWS",
            "authorizationType": "none",
            "apiKeyRequired": false,
            "requestParameters": {
                "method.request.querystring.startYear": true,
                "method.request.querystring.startMonth": true,
                "method.request.querystring.startDay": true,
                "method.request.querystring.currentYear": true,
                "method.request.querystring.currentMonth": true,
                "method.request.querystring.currentDay": true, …
Run Code Online (Sandbox Code Playgroud)

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

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

使用 Azure Functions 的无服务器 Django

我一直在尝试寻找在 Azure Functions 上的无服务器环境中运行 Django 的方法。

\n\n

假设我只能使用 Azure 服务,我想确保我们将编写的 Django 代码应该是可移植的(可以部署在其他任何地方)。

\n\n

我一直在尝试几种方法,包括Azure 上的 Python:第 4 部分\xe2\x80\x94运行无服务器 Django无服务器框架,但我仍然无法使环境运行无错误。

\n\n

我想确定,即使有人有运行 Django 无服务器的工作想法以及一些关于良好资源的指导?

\n

python django azure serverless-framework serverless

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

如何使用 Cognito 访问私有 s3 存储桶

我有一个 cognito 用户池,它作为身份提供者连接到 google(以便我可以使用 gmail 帐户登录)。我还有一个带有文件 () 的私人存储桶 s3。如何使用我的 lambda 函数,使用 Cognito(AcessToken,IdToken)返回的令牌来访问我的非公开 s3 存储桶?

我只想使用我的认知来访问我在 s3 上的私人文件。

类似于仅用于 s3 存储桶的 lambda 函数的 Cognito 授权器。

amazon-s3 amazon-web-services amazon-cognito serverless-framework

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

如何绕过 AWS API 网关的 10MB 限制并将大文件发布到 AWS lambda?

我想要的是

使用 POST 获取文件和一些参数并返回 JSON 响应的 API。

curl -X POST www.endpoint.com \
   -F file=@/myfile.txt \
   -F foo=bar # other params
Run Code Online (Sandbox Code Playgroud)

我使用二进制数据与 Lambda + API 网关一起工作,但 10MB 限制是问题所在。

我考虑过将文件上传到 S3 的 POST API。然后由 Lambda 读取生成的事件。但为此我有几个问题-

  1. 我的其他参数会去哪里?
  2. Lambda 将如何返回响应?

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

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

如何在无服务器的 CloudFormation 中使用 json 文件作为 DashboardBody?

要在CloudFormation 中创建CloudWatch 仪表板,您必须以字符串化 JSON 而不是单独的 JSON 结构的形式提供仪表板的源代码

这很烦人,因为我的 JSON 必须在我的字符串文字内转义serverless.yml

...
resources:
  Resources:
    MyDashboard:
      Type: AWS::CloudWatch::Dashboard
      Properties:
      DashboardName: My-Dashboard
      DashboardBody: "{\"widgets\": [...]}"
Run Code Online (Sandbox Code Playgroud)

我尝试使用文件引用:

...
resources:
  Resources:
    MyDashboard:
      Type: AWS::CloudWatch::Dashboard
      Properties:
      DashboardName: My-Dashboard
      DashboardBody: ${file(my-dashboard.json)}
Run Code Online (Sandbox Code Playgroud)

serverless将内容作为 YAML 结构的一部分插入,而不是作为 JSON 字符串的一部分:

...
resources:
  Resources:
    MyDashboard:
      Type: AWS::CloudWatch::Dashboard
      Properties:
      DashboardName: My-Dashboard
      DashboardBody:
        Widgets:
          - ...
          - ...
Run Code Online (Sandbox Code Playgroud)

有没有办法stringify从 JSON 获取 JSON my-dashboard.json

amazon-web-services serverless-framework

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

无服务器框架:Chrome“错误:生成 ETXTBSY”,

我开始尝试用 node 和 puppeteer 编写一个 lambda 函数。我正在使用无服务器框架

我一直在尝试按照https://github.com/alixaxel/chrome-aws-lambda 上的说明进行操作。我的功能在本地按预期工作,具有:

$ sls invoke local -f hello
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时:

$ sls invoke -f hello
Run Code Online (Sandbox Code Playgroud)

我得到:

{
"errorType": "Error",
"errorMessage": "spawn ETXTBSY",
"trace": [
    "Error: spawn ETXTBSY",
    "    at ChildProcess.spawn (internal/child_process.js:407:11)",
    "    at Object.spawn (child_process.js:548:9)",
    "    at Launcher.launch (/opt/nodejs/node_modules/puppeteer-core/lib/Launcher.js:132:40)",
    "    at async Object.main (/var/task/index.js:50:15)",
    "    at async module.exports.hello (/var/task/handler.js:6:13)"
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它工作?

我的 handler.js 包含:

'use strict';
var index = require('./index.js');

module.exports.hello = async event => {
// var t = async event …
Run Code Online (Sandbox Code Playgroud)

google-chrome node.js aws-lambda serverless-framework puppeteer

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

如何将 Serverless 应用到现有的 Lambda

当我尝试部署到 serverless.yml 中配置的现有 lambda 函数时,如下所示,它说“发生错误:ApiLambdaFunction - an-existing-function-name-created-by-my-devops 已经存在。”

functions:
  api:
    name: an-existing-function-name-created-by-my-devops
Run Code Online (Sandbox Code Playgroud)

所以不允许部署到不是由无服务器创建的现有 lambda 吗?

aws-lambda serverless-framework

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

CloudFormation AWS::CertificateManager::Certificate 自动证书验证

根据此处此处的 AWS 文档,我应该能够使用 cloudformation自动创建和验证证书。显然,当您在 中指定 aHostedZoneIdDomainValidationOptions,它应该创建所需的 DNS 记录以完成验证(至少从非常模糊的文档中看起来是这样)。我的证书 CF 模板如下所示:

Resources:
  MyAPICert:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: xxxx.dev.mydomain.io
      DomainValidationOptions:
        - DomainName: mydomain.io
          HostedZoneId: /hostedzone/Z03XXXXXXXXXXXX
      ValidationMethod: DNS
Run Code Online (Sandbox Code Playgroud)

“mydomain.io”(当然已更改)是使用 AWS 作为注册商注册的,因为文件说必须是自动验证才能工作的情况。

上面的这个模板作为资源包含在 serverless.yml 中。然而,当我部署,堆栈创建只是卡住等待DNS记录-即我的理解是它不会添加所需的CNAME条目应该做的,因此堆栈被卡住。

有没有人让这个功能工作?

而且,是的,我知道尝试做同样事情的 3rd 方自定义资源,如果 CF 现在应该在本地执行此操作,我不想使用它们。

ssl amazon-web-services aws-cloudformation amazon-route53 serverless-framework

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

AWS HTTP 网关:相同路由的多种方法,不包括无服务器框架的选项

由于与 REST 网关相比价格大幅降低,我对 HTTP 网关感到非常兴奋,但我坚持创建不会完全破坏我的serverless.yml文件的路由。

Serverless 的 HTTP 网关文档描述了这一点来定义路由:

functions:
  params:
    handler: handler.params
    events:
      - httpApi:
          method: GET
          path: /get/for/any/{param}
Run Code Online (Sandbox Code Playgroud)

支持'*',但这会导致问题,OPTIONS因为这些会覆盖创建的 CORS 策略(因此 OPTIONS 请求实际上会到达应用程序,这没有任何意义,尤其是在路由通过授权者保护的情况下)。

此外,不可能定义多个方法。

# does not work
method: GET,POST,DELETE

# also not possible
method:
 - GET
 - POST
 - DELETE
Run Code Online (Sandbox Code Playgroud)

我发现的唯一配置是分别定义所有路由:

events:
  - httpApi:
      path: /someApi/{proxy+}
      method: GET
  - httpApi:
      path: /someApi/{proxy+}
      method: POST
  - httpApi:
      path: /someApi/{proxy+}
      method: DELETE
Run Code Online (Sandbox Code Playgroud)

这很好用,用户界面甚至捆绑了路由,因为它们位于相同的前缀路径上:

在此处输入图片说明

但是有了这个,我必须为我的所有主要资源分别定义所有 HTTP 方法,包括附加的授权方。

有没有办法把它结合起来?

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

6
推荐指数
0
解决办法
486
查看次数

在 CloudFormation 模板中,AWS API Gateway REST API 是否没有设置禁用 execute-api 端点?

我已经使用 CloudFormation 模板设置了一个 API 网关(v1,而不是 v2)REST API 资源。最近我注意到还创建了默认的 execute-api 端点,我可以在设置中禁用它。

在此处输入图片说明 这个 API 的类型是AWS::ApiGateway::RestApi.

自然,我希望通过模板来完成,所以问题是:这个设置可以在 CloudFormation 模板中定义,而不是在 AWS 控制台中手动单击吗?此选项用于 CloudFormation 模板中的 APIGateway V2 API 资源 ( AWS::ApiGatewayV2::Api) 但不适用于 APIGateway V1 REST API 资源 ( AWS::ApiGateway::RestApi),即使可以在控制台中手动更改 APIGateway V1 REST API。

也有这样的CLI方式AWS::ApiGateway::RestApi

以下是我用来搜索此设置的一些链接:
AWS::ApiGatewayV2::API
AWS::ApiGateway::RestApi
Disabling default api-execute endpoint via CLI

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

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