创建CloudFormation自定义资源关联Lambda出错,无法找到请求日志
自定义资源Lambda无响应且找不到对应日志的排查要点
问题场景
通过TS文件创建Java 11运行时的Lambda函数,配置如下:
description: 'Lambda request handler to automate the DDL commands', name: LAMBDA_NAME, timeout: Duration.minutes(10), memorySize: 512, componentName: 'DdlLambda', runtime: Runtime.JAVA_11, handler: 'handler.ddllambda', packageName: 'DDLManagementLambda-1.0', deadLetterQueueEnabled: false, tracing: Tracing.ACTIVE, profiling: false, logRetention: RetentionDays.FOUR_MONTHS
随后创建自定义资源:
import {CustomResource} from "monocdk"; const customResource = new CustomResource(this, 'CustomResource', { serviceToken: ddllambda.functionArn, properties: { version: "version_0" } });
出现错误:
CloudFormation did not receive a response from your Custom Resource.
Please check your logs for requestId [c634da01-9c4d-4f8e-a2fc-a28724aa8206].
If you are using the Python cfn-response module, you may need to update your
Lambda function code so that CloudFormation can attach the updated version.
且无法找到该requestId对应的日志,以下是可能遗漏的排查点:
排查要点
1. Lambda未被触发
如果Lambda根本没执行,自然不会生成对应日志,检查以下内容:
- 确认自定义资源的
serviceToken是否为正确的Lambda ARN,无拼写错误,且未使用未发布的版本/别名(CloudFormation需要调用Lambda的具体版本或$LATEST)。 - 检查IAM权限:确保CloudFormation服务角色有
lambda:InvokeFunction权限调用该Lambda;同时Lambda的执行角色需具备基础权限(比如写入CloudWatch Logs的权限,否则即使执行也无法生成日志)。 - 查看CloudFormation控制台的自定义资源事件记录,确认是否有触发Lambda的请求记录。
2. Lambda执行但日志无法写入/找不到
- 检查Lambda执行角色的权限:是否包含
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents权限,缺失这些权限会导致日志无法写入CloudWatch,自然找不到对应记录。 - 确认日志组路径:默认Lambda日志组为
/aws/lambda/${LAMBDA_NAME},检查是否找错了日志组(比如是否有额外的前缀/后缀)。 - 查看Lambda控制台的「监控」->「最近调用」,是否有失败的调用记录,即使日志未写入,这里可能会显示初始化错误或执行错误的基本信息。
3. Java Lambda的自定义资源实现不符合协议
自定义资源要求Lambda必须严格按照CloudFormation的协议返回响应,否则CloudFormation会一直等待直到超时:
- 必须处理事件中的
ResponseURL,无论执行成功或失败,都要向该URL发送POST请求,携带符合格式的响应数据(包含Status、Reason、PhysicalResourceId、StackId、RequestId等字段)。 - 确保代码处理了所有自定义资源事件类型(Create/Update/Delete),且在异常场景下也能发送失败响应,避免静默失败。
- 检查Lambda handler的正确性:配置的
handler.ddllambda对应Java类的包结构和方法签名是否正确(比如方法需接收Map<String, Object>事件和Context上下文,且返回正确格式的响应)。
4. CDK部署相关问题
- 确认自定义资源代码是否完整(用户提供的代码片段未闭合,需检查实际代码是否正确初始化
CustomResource)。 - 检查Lambda包是否正确部署:如果CDK部署时Lambda包未上传完成就触发了自定义资源,会导致无响应,可尝试重新部署并等待Lambda部署完成后再触发自定义资源。
内容的提问来源于stack exchange,提问作者Nitika
相关产品推荐
相关产品推荐

