我必须发出一个需要很长时间才能收到响应的 HTTP 请求。我不希望 AWS Lambda 发出此请求,因为我需要为它等待响应的时间付费。有什么方法可以使用 AWS Lambda 来处理响应而不在等待时收费吗?
最佳答案
根据我的评论,我建议经常访问长轮询端点,而不是长时间保持连接。您可以使用 CloudWatch 规则每 5 分钟(或您选择的任何时间间隔)触发一次 lambda 函数。你可以给 Lambda 一个短的超时时间,比如 5-10 秒,这应该可以防止它运行太久。我假设长轮询端点将保证至少传递一次。
这是一些 CloudFormation YAML,可帮助您开始设置。远未完成,但应该能让您走上正轨。
Description: Automatically hit long poll endpoint
Resources:
#################################################
# IAM Role for Lambda
#################################################
ROLELAMBDADEFAULT:
Type: AWS::IAM::Role
Properties:
RoleName: your-lambda-default
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- edgelambda.amazonaws.com
- lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
- arn:aws:iam::aws:policy/service-role/AWSLambdaRole
Policies: []
#################################################
# Lambda function
#################################################
LFUNC:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: bucket-with-code
S3Key: code.zip
Description: Some function name
FunctionName: my-function-name
Handler: index.handler
MemorySize: 256
Role: !GetAtt ROLELAMBDADEFAULT.Arn
#choose your runtime here
Runtime: nodejs8.10
Timeout: 6
#################################################
# Rule to trigger the lambda
#################################################
RULE1:
Type: AWS::Events::Rule
Properties:
Name: custom-trigger
Description: Trigger my lambda
ScheduleExpression: rate(5 minutes)
State: ENABLED
Targets:
- Arn: !GetAtt LFUNC.Arn
Id: uniqueid1
关于amazon-web-services - 是否可以在不发出相应的 HTTP 请求的情况下使用 AWS Lambda 来处理 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374391/