Amazon web services AWS Lambda帐户并发,限制
出于性能原因,我正在考虑不使用API网关。相反,我想直接向web公开lambda函数。需要未经验证的IAM凭据,并由AWS JavaScript SDK提供。我意识到,如果一个坏演员试图以天文数字般的速度调用我的函数,并导致重大的计费问题,这可能会引起关注。我不认为这是可能的,因为有人会专门针对我的应用程序,请求IAM凭据,然后调用请求。。。做了很多工作,收获很少,但是 为了保护Lambda函数不受攻击,我考虑了帐户并发特性。默认情况下,帐户并发功能限制为帐户上的1000个并发请求。我能够指定特定于Lambda函数的保留并发性,该函数可以减少剩余的总体帐户并发限制(帐户其余部分的并发限制) 这是否可行:创建一个虚拟lambda函数(不可公开访问),将虚拟lambda函数保留的并发性设置得非常高,例如950。。。这将为我的“真实”lambda函数留下50个并发lambda请求。。。这似乎是在不使用API网关等的情况下限制lambda的简单方法 想法?您可以简单地将Lambda函数的值设置为50 不确定“未经验证的凭据”是什么意思?如果希望客户端直接调用Lambda函数,则客户端需要凭据和允许Lambda调用的相关策略。您只需将Lambda函数设置为50即可Amazon web services AWS Lambda帐户并发,限制,amazon-web-services,aws-lambda,aws-api-gateway,Amazon Web Services,Aws Lambda,Aws Api Gateway,出于性能原因,我正在考虑不使用API网关。相反,我想直接向web公开lambda函数。需要未经验证的IAM凭据,并由AWS JavaScript SDK提供。我意识到,如果一个坏演员试图以天文数字般的速度调用我的函数,并导致重大的计费问题,这可能会引起关注。我不认为这是可能的,因为有人会专门针对我的应用程序,请求IAM凭据,然后调用请求。。。做了很多工作,收获很少,但是 为了保护Lambda函数不受攻击,我考虑了帐户并发特性。默认情况下,帐户并发功能限制为帐户上的1000个并发请求。我能够指定特
不确定“未经验证的凭据”是什么意思?如果希望客户端直接调用Lambda函数,则客户端需要凭据和允许Lambda调用的相关策略。如您所述,作为一种保护形式的节流是完全可行的:) 并且不需要像您描述的那样创建第二个伪函数 lambda附带一个保留的并发限制,允许您设置最大数量的并发接受lambda。如果请求数超过该限制,溢出请求将收到错误500响应 要设置并发限制,您有几个选项: 控制台 在AWS控制台内,导航至lambda,在配置页面中向下滚动至并发框,并选择保留并发(输入所需的数字50) 命令行 要通过命令行修改保留并发,请使用以下命令: 无服务器框架文件 如果使用无服务器框架部署函数,则可以修改文件
函数
部分中任何lambda的保留并发性
service: stackoverflow # NOTE: update this with your service name
provider:
name: aws
runtime: python3.7
stage: ${opt:stage, 'dev'}
region: ${opt:region, 'us-east-1'}
profile: ${opt:profile, 'default'}
environment:
region: ${self:provider.region}
stage: ${self:provider.stage}
stackTags:
Owner : krapes
Project : concurrencyLimits
Service : concurrencyLimits
Team : brokenLeg
stackPolicy: # This policy allows updates to all resources
- Effect: Allow
Principal: "*"
Action: "Update:*"
Resource: "*"
iamRoleStatements:
functions:
dummy:
handler: dummy.main
timeout: 10
## This parameter sets the reserved concurrency for the lambda 'dummy'
reservedConcurrency: 50
# events:
# - http:
# method: GET
# path: /dummy
# resp: json
#plugins:
# - serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
现在,当您使用lambda时,您将看到使用保留并发设置时,多余的请求返回了一个错误代码500,从而保护了系统
无保留并发限制:
具有保留的并发限制:
上面的输出是使用工具生成的,没有reservedConcurrency,并且设置为25 您所描述的节流作为一种保护形式是完全可行的:) 并且不需要像您描述的那样创建第二个伪函数 lambda附带一个保留的并发限制,允许您设置最大数量的并发接受lambda。如果请求数超过该限制,溢出请求将收到错误500响应 要设置并发限制,您有几个选项: 控制台 在AWS控制台内,导航至lambda,在配置页面中向下滚动至并发框,并选择保留并发(输入所需的数字50) 命令行 要通过命令行修改保留并发,请使用以下命令: 无服务器框架文件 如果使用无服务器框架部署函数,则可以修改文件
函数
部分中任何lambda的保留并发性
service: stackoverflow # NOTE: update this with your service name
provider:
name: aws
runtime: python3.7
stage: ${opt:stage, 'dev'}
region: ${opt:region, 'us-east-1'}
profile: ${opt:profile, 'default'}
environment:
region: ${self:provider.region}
stage: ${self:provider.stage}
stackTags:
Owner : krapes
Project : concurrencyLimits
Service : concurrencyLimits
Team : brokenLeg
stackPolicy: # This policy allows updates to all resources
- Effect: Allow
Principal: "*"
Action: "Update:*"
Resource: "*"
iamRoleStatements:
functions:
dummy:
handler: dummy.main
timeout: 10
## This parameter sets the reserved concurrency for the lambda 'dummy'
reservedConcurrency: 50
# events:
# - http:
# method: GET
# path: /dummy
# resp: json
#plugins:
# - serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
现在,当您使用lambda时,您将看到使用保留并发设置时,多余的请求返回了一个错误代码500,从而保护了系统
无保留并发限制:
具有保留的并发限制:
上面的输出是使用工具生成的,没有reservedConcurrency,并且设置为25 谢谢。您知道由于保留并发而被阻止的lambda请求是否仍在计费吗?我想不会,但我可能误解了账单。我不这么认为,lambda是根据调用和持续时间收费的。在这个lambda上运行测试之后,调用度量在被reserved concurrency参数限制时显示了一个较低的计数。这500个错误似乎从未“启动”过lambda。@Cliff你的问题激发了我在github上发布(经过一点清理)的灵感。。。如果你有时间,我很想听听你的意见。谢谢。您知道由于保留并发而被阻止的lambda请求是否仍在计费吗?我想不会,但我可能误解了账单。我不这么认为,lambda是根据调用和持续时间收费的。在这个lambda上运行测试之后,调用度量在被reserved concurrency参数限制时显示了一个较低的计数。这500个错误似乎从未“启动”过lambda。@Cliff你的问题激发了我在github上发布(经过一点清理)的灵感。。。如果您有时间的话,我很想听听您的意见。“出于性能原因,我正在考虑不使用API网关。”问题的其余部分是以这一点为前提的。您认为API网关中存在什么性能问题?这似乎是一个解决错误问题的潜在案例,而且很难做到。我也想了解您面临的性能问题是什么?API网关是一个ab层
Details (average, fastest, slowest):
DNS+dialup: 0.0009 secs, 2.0200 secs, 6.0415 secs
DNS-lookup: 0.0002 secs, 0.0000 secs, 0.0185 secs
req write: 0.0000 secs, 0.0000 secs, 0.0030 secs
resp wait: 3.5561 secs, 2.0199 secs, 6.0414 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0032 secs
Status code distribution:
[200] 5000 responses
Details (average, fastest, slowest):
DNS+dialup: 0.0007 secs, 0.0094 secs, 5.6580 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0119 secs
req write: 0.0000 secs, 0.0000 secs, 0.0033 secs
resp wait: 1.1845 secs, 0.0093 secs, 5.5826 secs
resp read: 0.0000 secs, 0.0000 secs, 0.0032 secs
Status code distribution:
[200] 1638 responses
[500] 3362 responses