我正在尝试编写一个 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
我的无服务器项目的部署已开始返回以下错误
配置堆栈时发生错误...[lambda 名称][GUID] - 超出代码存储限制..
我尝试删除 zip 包,认为 S3 存储桶中可以存储的上传包数量有限制,但没有成功。
正如 Trent 下面提到的,我查看了部署限制,但对于 2.1MB 的压缩包(未压缩的 8MB),我看不出会超出什么限制。
关于可能导致此问题的任何建议。
(我的)解决方案:
我希望更好地了解根本问题,并希望将其作为最后的手段。但通过从 cloudformation 中删除堆栈并重新部署无服务器项目,问题似乎已自行解决。
设想
我正在为本地 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
我有无服务器 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\nservice: 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
成功后sls remove所有sls命令都会失败
id为X的堆栈不存在
检查堆栈、附加堆栈和 S3 部署存储桶是否已删除。尝试删除.serverless/,但没有帮助。
我正在尝试从本地计算机在 AWS 上部署无服务器应用程序。该计算机位于公司防火墙后面。
最初,我收到连接错误,因此我在终端上添加了 http_proxy 和 https_proxy 设置。
现在,当我尝试部署时,我不断在证书链中收到错误的自签名证书。
我还从 puttygen 创建了一个证书并将 npm ca 文件路径设置为它,但一切都是徒劳的。
我的 npm 安装有效,唯一的问题是无服务器部署。
不知道下一步该怎么做。
已经感谢您的帮助了。

如果有帮助的话,我已经添加了图像的屏幕截图。
node.js aws-sdk aws-lambda serverless-framework aws-serverless
我正在尝试通过无服务器框架设置我的 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)
如果我在响应中包含架构,它将被忽略......
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) 由于与 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 方法,包括附加的授权方。
有没有办法把它结合起来?
我已经使用 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
aws-lambda ×3
node.js ×2
aws-sdk ×1
http-headers ×1
httpresponse ×1
javascript ×1
puppeteer ×1
python ×1
rest ×1
serverless ×1
serverless-framework-offline ×1
shapely ×1