标签: serverless-framework

是否可以在AWS Lambda环境中正确指向Python Shapely库的LIBGEOS_C?

我正在尝试编写一个 AWS python Lambda 函数,该函数利用 Shapely 进行简单的“多边形中的点”操作。我启动了一个 AWS linux EC2 实例,安装了 Shapely 并有一个工作脚本。然后,我从 EC2 实例下载了 Linux 特定的 libgeos_c.so.1 二进制文件,并将其(通过无服务器框架)捆绑到与 lambda 函数相同的目录中。但是,一旦我部署,脚本将不会执行,因为它会抛出“无法找到库或加载其任何变体...”错误。我什至尝试通过 GEOS_LIBRARY_PATH 环境变量显式指向 libgeos_c.so.1 路径,但没有效果。这是不可能的部署吗?

这是一个代码片段,它设置环境变量,然后调用实际导入和利用 shapely 的辅助脚本。

import sys
import os
import subprocess

here = os.path.dirname(os.path.realpath(__file__))

# Import installed packages (in site-packages)
site_pkgs = os.path.join(here, "venv", "lib", "python2.7", "site-packages") 
sys.path.append(site_pkgs)
import json

def hello(event, context):

    command = "GEOS_LIBRARY_PATH={} python test_geo_worker.py".format(here + "/libgeos_c.so.1")
    foo = subprocess.check_output(command, shell=True)
    print foo
Run Code Online (Sandbox Code Playgroud)

有人在 lambda 中成功部署过 shapely 吗?我的后备计划是回到旧的 postgres/postgis 而不是 shapely,但我肯定想尝试在 dynamo/lambda 堆栈中构建它。

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

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

无服务器部署错误 - 超出代码存储限制

我的无服务器项目的部署已开始返回以下错误

配置堆栈时发生错误...[lambda 名称][GUID] - 超出代码存储限制..

我尝试删除 zip 包,认为 S3 存储桶中可以存储的上传包数量有限制,但没有成功。

正如 Trent 下面提到的,我查看了部署限制,但对于 2.1MB 的压缩包(未压缩的 8MB),我看不出会超出什么限制。

关于可能导致此问题的任何建议。

(我的)解决方案:

我希望更好地了解根本问题,并希望将其作为最后的手段。但通过从 cloudformation 中删除堆栈并重新部署无服务器项目,问题似乎已自行解决。

serverless-framework

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

Serverless 获取本地函数列表

设想

我正在为本地 Lambda 输出编写单元测试。我不想手动输入所有不同 lambda 函数的名称,而是想要动态生成列表。

sls deploy list functions
Run Code Online (Sandbox Code Playgroud)

将返回部署到 aws 的函数列表,但不返回本地无服务器环境中的函数列表

问题

如何获取本地函数列表?

帮助菜单对于如何运行本地函数很有用,但对于组合本地函数列表却没有帮助。

$ sls --help

Commands
* You can run commands with "serverless" or the shortcut "sls"
* Pass "--verbose" to this command to get in-depth plugin info
* Pass "--no-color" to disable CLI colors
* Pass "--help" after any <command> for contextual help

Framework
* Documentation: https://serverless.com/framework/docs/

config ........................ Configure Serverless
config credentials ............ Configures a new provider profile for the Serverless Framework
create ........................ …
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework serverless serverless-framework-offline

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

如何在 serverless.yml 中设置响应头?

我有无服务器 API,它与无服务器框架版本 1.25 一起使用

\n\n

出于安全原因,我想添加响应标头。请帮助我如何通过 serverless.yml 文件设置以下标头。出于安全原因是否有必要添加此标头?

\n\n

\xe2\x80\xa2 内容安全策略:包括 default-src 'self'

\n\n

\xe2\x80\xa2 严格传输安全 max-age=31536000; 包括子域;预载

\n\n

\xe2\x80\xa2 X-内容类型选项:nosniff

\n\n

\xe2\x80\xa2 X-XSS 保护:1

\n\n

\xe2\x80\xa2 缓存控制:max-age=0;过期=-1 或过期:1990 年 1 月 1 日星期五 00:00:00 GMT;无缓存,必须重新验证

\n\n

下面是我的无服务器应用程序 serverless.yaml

\n\n
service: myService\nprovider:\n  name: aws\n  runtime: nodejs6.10\n  stage: dev\n  region: eu-west-1\n  environment:\n    REGION: ${self:provider.region}\n    PROJECT_NAME: ${self:custom.projectName}\n    SERVERLESS_STAGE: ${self:provider.stage}\n    SERVERLESS_SERVICE: ${self:service}\n    IP_ADDRESS: http://example.com\nfunctions:\n   getMyFunction:\n     handler: handler.getMyFunction\n     timeout: 30\n     events:\n      - http:\n          method: get\n          path: api/getMyFunction/v1\n          integration: lambda\n          cors: true\n          authorizer:\n            name: authorizerFunc\n …
Run Code Online (Sandbox Code Playgroud)

javascript httpresponse amazon-web-services http-headers serverless-framework

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

成功 sls 删除后,所有 sls 命令均显示“ID X 的堆栈不存在”

成功后sls remove所有sls命令都会失败

id为X的堆栈不存在

检查堆栈、附加堆栈和 S3 部署存储桶是否已删除。尝试删除.serverless/,但没有帮助。

amazon-web-services aws-cloudformation serverless-framework

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

无服务器部署中的自签名证书错误

我正在尝试从本地计算机在 AWS 上部署无服务器应用程序。该计算机位于公司防火墙后面。

最初,我收到连接错误,因此我在终端上添加了 http_proxy 和 https_proxy 设置。

现在,当我尝试部署时,我不断在证书链中收到错误的自签名证书。

我还从 puttygen 创建了一个证书并将 npm ca 文件路径设置为它,但一切都是徒劳的。

我的 npm 安装有效,唯一的问题是无服务器部署。

不知道下一步该怎么做。

已经感谢您的帮助了。

错误截图

如果有帮助的话,我已经添加了图像的屏幕截图。

node.js aws-sdk aws-lambda serverless-framework aws-serverless

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

通过 AWS API Gateway 的无服务器框架设置响应模型

我正在尝试通过无服务器框架设置我的 AWS API 网关。到目前为止,效果很好,但我正在努力将方法响应设置为模型。我让它适用于请求,但不适用于响应,并且我没有在文档中找到提示。

      ...
      request:
        passThrough: NEVER
        schema:
          application/json: ${file(requestModel.json)}
        template:
          application/json: ${file(requestMapping.template)}
      response:
        headers:
          Content-Type: "'application/json'"
        template: $input.body
      ...
Run Code Online (Sandbox Code Playgroud)

如果我在响应中包含架构,它将被忽略......

aws-api-gateway serverless-framework

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

NodeJS 和无服务器框架在调用 lambda 函数时找不到模块“chrome-aws-lambda”

npm install chrome-aws-lambda我的代码在本地运行时工作正常,我在部署之前安装了该模块,并尝试chmod -R +r node_modules/以防它是读取权限错误,但仍然没有运气。

我的 handler.js 代码:

'use strict';
const {getArrayOfPages} = require("./utils"); 
const creds = require("./creds.json"); 

module.exports.hello = async (event, context) => {
  try {
    var browserendpoint = await getArrayOfPages(creds.username, creds.password)
    console.log("DATA: " + browserendpoint)        
  }
  catch(error) {
    // Code that handles any potential errors
    console.log(error)
  }
}
Run Code Online (Sandbox Code Playgroud)

我的 getArrayOfPages.js 代码:


const sign_in = 'www.example.com/';
const chromium = require('chrome-aws-lambda')

module.exports = async function (username, password) {
  try {
    browser = await chromium.puppeteer.launch({
      args: chromium.args, …
Run Code Online (Sandbox Code Playgroud)

node.js serverless-framework puppeteer

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

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
查看次数