部署Lambda@Edge函数时出现Cannot read properties of undefined错误排查
问题原因分析:Lambda@Edge函数报错 "Cannot read properties of undefined (reading 'startsWith')"
以下是几种常见的触发原因:
请求对象缺失预期字段
官方示例代码默认request.origin.s3或request.headers这类嵌套字段存在,但如果CloudFront的源配置未正确关联S3,或者触发逻辑不符合预期,这些字段会变成undefined。比如代码里写了request.origin.s3.domainName.startsWith('xxx'),一旦request.origin.s3不存在,就会直接抛出这个错误。触发阶段配置错误
针对S3 CMK加密场景的Lambda@Edge函数,必须配置在Origin Request触发阶段。如果误选了Viewer Request/Response或Origin Response阶段,请求对象的结构会和示例代码假设的完全不同,S3源相关的字段自然找不到,调用startsWith时就会报错。S3源使用自定义域名
若你的S3源用了自定义域名(而非S3默认的bucket.s3.region.amazonaws.com格式),request.origin.s3的字段结构会和示例代码的假设不一致,比如domainName字段可能不存在或者被其他字段替代,导致读取时出现undefined。代码缺少空值校验逻辑
部分官方示例代码会省略空值判断步骤,直接访问嵌套字段。比如没有先检查request.origin?.s3?.domainName是否存在,就直接调用startsWith方法,一旦某个层级的字段为空,就会触发这个错误。
内容的提问来源于stack exchange,提问作者LP13
相关产品推荐
相关产品推荐

