我必须发出一个花费很长时间才能收到响应的HTTP请求。我不希望AWS Lambda发出此请求,因为我将为它等待响应的时间付费。有什么方法可以使用AWS Lambda处理响应而无需在等待时付费?
答案 0 :(得分:1)
根据我的评论,我建议经常使用长时间轮询的端点,而不是长时间保持连接。您可以使用CloudWatch规则每隔5分钟(或您选择的任何间隔)触发lambda函数。您可以给Lambda一个短暂的超时时间,例如5到10秒,这样可以防止Lambda运行太长时间。我假设长轮询端点将保证至少发送一次。
以下是一些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