我承认我还没有真正开始部署 AWS Lambda 函数,但本文是这样说的:
AWS CloudWatch 上的日志非常糟糕。我花了很长时间才找到简单应用程序的失败功能,想象一下大规模应用程序的恐怖。
在 AWS Cloudwatch 上过滤日志有什么特别困难的地方吗?例如,如果我们从 Servless 的节点模板部署 stock hello lambda,我想在日志中找到调用(错误或其他)是相当容易的?
如果有人有任何简单的最佳实践技巧,我们可以遵循这些技巧来使日志语句易于找到,那就太棒了!
amazon-web-services node.js amazon-cloudwatch serverless-framework aws-serverless
我的API(Python)部署在Amazon Lambda上。问题是当我请求我的API时,我收到内部服务器错误。我可以尾随Lambda日志,但看不到代码崩溃的实际错误或堆栈跟踪。当我拖尾日志时,我只会得到以下输出。
START RequestId: 62341bgd-6231-11e8-8c5b-25793532a32u Version: $LATEST
END RequestId: 62341b0d-6231-1128-8r5b-2b793032a3ed
REPORT RequestId: 6234te0b-6rte-aaa8-au5a-21t93132r3rt Duration: 0.46 ms
Run Code Online (Sandbox Code Playgroud)
如何查看用于调试的python api的实际堆栈跟踪?
python amazon-web-services aws-lambda serverless aws-serverless
我使用无服务器开发了一个AWS Lambda代理,以便调用私有API,处理其结果并返回它.
这很简单,但是一旦在HTTP请求中设置了"X-Forwarded-For",私有API就不会返回任何内容.
我还没有找到在CloudFront中将此标头列入黑名单的方法,也没有找到在CloudFormation或API Gateway中列出黑名单的方法.
我应该在哪里寻找?
供参考,serverless.yml我使用:
service: mylambda
provider:
name: aws
runtime: java8
memorySize: 1024
timeout: 240
package:
artifact: target/awslambda-1.0-SNAPSHOT.jar
functions:
leboncoinlist:
handler: com.example.awslambda.handler.HttpRequestHandler
events:
- http:
path: list
method: post
cors: true
Run Code Online (Sandbox Code Playgroud) amazon-cloudfront aws-lambda serverless-framework aws-serverless
因此,这似乎很容易,但一直很棘手。显然,无服务器与webpack捆绑在一起,然后上传到S3,然后再与Cloud Formation一起部署。
这里的问题是webpack的节点__dirname有一些问题,您可以在此处阅读:https : //github.com/webpack/webpack/issues/1599
基本上,这意味着您甚至需要考虑在使用__dirname来获取绝对路径之前(在之后target: node,),将以下内容添加到webpack配置中:
// assume target: 'node', is here
node: {
__dirname: false,
},:
Run Code Online (Sandbox Code Playgroud)
所以。大。我的问题是:
对于基于标准入门工具包的具有多个功能的无服务器项目,基本存储库中给定功能的根目录是什么?
我将上述代码添加到了webpack配置中,并且__dirname现在又可以使用了,但是我仍然无法找到存储在仓库中的文件。
仓库如下所示:
repo-root
——— src
——— ——— someFunction
——— ——— ——— some-sub-directory
——— ——— ——— ——— targetfile.json
Run Code Online (Sandbox Code Playgroud)
为了命中targetfile.json,我应在'__dirname'后面附加什么?
这个问题的纺出这一个。现在,我对那里的问题有了更好的了解,并且是一个可行的(如果不完美的话)解决方案,我正在提交一个更集中的后续措施(我仍然是StackOverflow的新手,请告诉我是否这违反了礼节,我应该对原文进行跟进)。
该页面建议“ 您使用AWS CodeBuild来构建,本地测试和打包无服务器应用程序 ”。但是,当我在中包含sam build命令时buildspec.yml,我得到以下日志输出,提示sam未在CodeBuild映像上安装:
[Container] 2018/12/31 11:41:49 Running command sam build --use-container
sh: 1: sam: not found
[Container] 2018/12/31 11:41:49 Command did not exit successfully sam build --use-container exit status 127
[Container] 2018/12/31 11:41:49 Phase complete: BUILD Success: false
[Container] 2018/12/31 11:41:49 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: sam build --use-container. Reason: exit status 127
Run Code Online (Sandbox Code Playgroud)
此外,如果我使用来安装SAM pip install aws-sam-cli,则sam build --use-container …
我想通过无服务器设置 API 网关的请求验证器。我为请求验证器尝试了两种不同的设置。但是,这两种方法都失败了。我已经总结了我所做的,所以如果有什么问题,请告诉我。
sls deploy使用下面的swagger.yaml和之后serverless.yml,没有将 中描述的验证模式x-amazon-apigateway-request-validators添加到请求验证器选项中。
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions-request-validator.htmlswagger.yaml 在下面:
openapi: 3.0.0
info:
description: xxx
version: '0.1'
title: xxx API
x-amazon-apigateway-request-validators:
body-only:
validateRequestBody: true,
validateRequestParameters: false
except-body:
validateRequestBody: false,
validateRequestParameters: true
all:
validateRequestBody: true,
validateRequestParameters: true
tags:
- name: auth
description: xxx
paths:
/login:
post:
tags:
- auth
summary: xxx
description: ''
x-amazon-apigateway-request-validator: all
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/AuthResponse'
'400':
description: fail
content:
application/json …Run Code Online (Sandbox Code Playgroud) swagger aws-api-gateway serverless-framework serverless aws-serverless
在学习无服务器框架时,我遇到了一些教程,展示了如何在Lambda中运行Express实例。在我看来,这似乎有点过分,违背了Lambda函数的目的。
该方法通常涉及在Lambda中运行Express实例,并将API网关请求代理到Express路由器以进行内部处理。
对我而言,简单的方法是仅在API网关中创建一个API,并将单个请求路由到Lambda进行处理。我想念什么吗?
考虑到Lambdas的执行时间为15分钟,就内存而言,仅分解Express实例不是很昂贵吗?此外,限制并发执行Lambda 100次会产生瓶颈,不是吗?在这种情况下,EC2实例是否会更合适?像这样使用Lambda似乎太过分了。
我在Lambda中运行Express实例的唯一两个好处是:
如果我丢失了某些东西,这种方法有什么好处?
一些促进这种方法的资源:
我正在尝试将 lambda 函数与serverless.yml文件一起部署到 AWS,但它抛出以下错误
以下是YAML文件中定义的函数
functions:
s3-thumbnail-generator:
handler:handler.s3_thumbnail_generator
events:
- s3:
bucket: ${self:custom.bucket}
event: s3.ObjectCreated:*
rules:
- suffix: .png
plugins:
- serverless-python-requirements
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
无法读取块映射条目;多行键可能不是 serverless.yml" 中第 45 行第 10 列的隐式键:
我需要了解如何在 YAML 文件中解决此问题才能将函数部署到 AWS?
我在 AWS 无服务器上有我的数据库,我只能通过 ssh 隧道在 VPC 外部连接到它,我需要从 Google Data Studio 连接,有人有任何解决方案吗?
postgresql amazon-web-services ssh-tunnel google-data-studio aws-serverless
我正在尝试使用 NodeJS、AWS Lambda、API Gateway、RDS 和 PostgreSQL 部署无服务器 REST API。
到目前为止,我已经成功设置了 PostgreSQL RDS,在开始编写函数来处理对数据库的请求之前,我认为最好先在本地测试一个小函数以检查请求是否得到正确处理。
所以在项目的根目录下,我安装了 serverless-offline:
npm install serverless-offline
它在安装类型时发出了几个警告:
npm WARN 已弃用 @hapi/pez@4.1.2:此版本已弃用,不再支持或维护
(如果这些信息无关紧要,我很抱歉,我是新手,不知道什么是重要的,什么不重要。)
然后我配置了我的serverless.yml:
service: serverless-node-postgres-rds-rest-api
app: serverless-app
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
lambdaHashingVersion: 20201221
plugins:
- serverless-offline
configValidationMode: error
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: hello
method: get
Run Code Online (Sandbox Code Playgroud)
这是handler.js:
'use strict';
module.exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Go Serverless v1.0! Your function executed …Run Code Online (Sandbox Code Playgroud) aws-serverless ×10
aws-lambda ×5
serverless ×4
node.js ×2
postgresql ×1
python ×1
ssh-tunnel ×1
swagger ×1
webpack ×1
yaml ×1