You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何通过CloudFront访问Lambda的响应速度慢于Lambda Function URL?

为何Lambda Function URL性能优于前置的CloudFront分发?

我有一个以CloudFront作为前置的简单Lambda函数,同时为该Lambda配置了Function URL。直接通过Function URL调用Lambda的速度远快于通过CloudFront调用——根据我对CloudFront的理解,原本预期CloudFront的速度会更快。

我创建了一个小型CloudFormation模板来复现该现象:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  LambdaExecutionRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: 'lambda.amazonaws.com'
            Action: 'sts:AssumeRole'
      Policies:
        - PolicyName: 'LambdaExecutionPolicy'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: 'logs:*'
                Resource: '*'

  HelloWorldFunction:
    Type: 'AWS::Lambda::Function'
    Properties:
      FunctionName: 'HelloWorldFunction'
      Runtime: 'nodejs18.x'
      Architectures: ['arm64']
      Handler: 'index.handler'
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        ZipFile: |
          exports.handler = async (event) => {
            return {
              statusCode: 200,
              body: 'Hello, World!',
            };
          };

  FunctionUrl:
    Type: 'AWS::Lambda::Url'
    Properties:
      AuthType: NONE
      TargetFunctionArn: !GetAtt HelloWorldFunction.Arn

  LambdaPermission:
    Type: 'AWS::Lambda::Permission'
    Properties:
      Action: 'lambda:InvokeFunctionUrl'
      FunctionName: !GetAtt HelloWorldFunction.Arn
      Principal: '*'
      FunctionUrlAuthType: 'NONE'

  CloudFrontDistribution:
    Type: 'AWS::CloudFront::Distribution'
    Properties:
      DistributionConfig:
        Enabled: true
        DefaultRootObject: ''
        Origins:
          - Id: 'LambdaOrigin'
            DomainName: !Select [2, !Split ['/', !GetAtt FunctionUrl.FunctionUrl]]
            CustomOriginConfig:
              HTTPPort: 443
              HTTPSPort: 443
              OriginProtocolPolicy: 'https-only'
        DefaultCacheBehavior:
          TargetOriginId: 'LambdaOrigin'
          ViewerProtocolPolicy: 'redirect-to-https'
          AllowedMethods:
            - GET
            - HEAD
          CachedMethods:
            - GET
            - HEAD
          ForwardedValues:
            QueryString: false
            Cookies:
              Forward: none
          CachePolicyId: '4135ea2d-6df8-44a3-9df3-4b5a84be39ad' # Managed policy for caching disabled
          OriginRequestPolicyId: 'b689b0a8-53d0-40ab-baf2-68738e2966ac' # Managed policy for all viewer except host header
        ViewerCertificate:
          CloudFrontDefaultCertificate: true

Outputs:
  FunctionUrl:
    Description: 'URL of the Lambda function'
    Value: !GetAtt FunctionUrl.FunctionUrl
    Export:
      Name: 'FunctionUrl'

  CloudFrontUrl:
    Description: 'URL of the CloudFront distribution'
    Value: !Sub 'https://${CloudFrontDistribution.DomainName}'
    Export:
      Name: 'CloudFrontUrl'

当前为最简配置,无缓存、无VPC资源、无跨区域问题。

Chrome浏览器请求耗时对比

从截图可见,CloudFront请求耗时超1秒,而Lambda Function URL的请求耗时仅为其三分之一。

为何Lambda Function URL的性能优于CloudFront分发?


内容的提问来源于stack exchange,提问作者Mridang Agarwalla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:02:32