是否可以使用AWS Lambda来处理HTTP响应而无需发出相应的HTTP请求?

时间:2019-05-30 08:22:24

标签: amazon-web-services http aws-lambda

我必须发出一个花费很长时间才能收到响应的HTTP请求。我不希望AWS Lambda发出此请求,因为我将为它等待响应的时间付费。有什么方法可以使用AWS Lambda处理响应而无需在等待时付费?

1 个答案:

答案 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