为何通过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资源、无跨区域问题。

从截图可见,CloudFront请求耗时超1秒,而Lambda Function URL的请求耗时仅为其三分之一。
为何Lambda Function URL的性能优于CloudFront分发?
内容的提问来源于stack exchange,提问作者Mridang Agarwalla
相关产品推荐
相关产品推荐

