AWS CDK中DockerImageFunction添加自定义CloudWatch日志组参数报错
问题:AWS CDK中DockerImageFunction添加log_group参数报错
使用AWS CDK 2.66.0(也曾尝试2.133.0版本),为DockerImageFunction创建的Lambda资源添加log_group=self.lambda_log_group属性时,触发以下错误:
TypeError: __init__() got an unexpected keyword argument 'log_group'.
需求是将Lambda日志从自动创建的CloudWatch日志组切换到自定义日志组,此前仅配置log_retention=logs.RetentionDays.ONE_MONTH时日志可正常输出到默认组。目前自定义日志组能正常创建,但添加log_group参数就报错,不添加则Lambda仍使用默认日志组。
原因
log_group并非DockerImageFunction构造函数的直接顶级参数,它属于LambdaFunctionProps中的logging_config配置项,直接作为顶级参数传入会被识别为未知参数。
解决方案
将log_group嵌套在logging_config字典中传入,修改DockerImageFunction的初始化代码:
修改前的错误代码片段
ec2_launch_fn = DockerImageFunction( self, "{}-EC2LifeCycleLaunch-{}".format(self._res_name, self._instance), # 其他参数... log_group=self.lambda_log_group, # 其他参数... )
修改后的正确代码
ec2_launch_fn = DockerImageFunction( self, "{}-EC2LifeCycleLaunch-{}".format(self._res_name, self._instance), function_name=f'EC2LifeCycleLaunch-{self._instance}', code=DockerImageCode.from_image_asset( directory=lambda_path, network_mode=ecra.NetworkMode.HOST ), description="Lambda to update Oracle database when an auto scaling group launches an EC2", environment={ "REGION": self.region, "SECRET_NAME": f"{self._instance}/db/gbcust", "FO_ENVIRONMENT": self._instance, }, vpc=auto_scaling_vpc, vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_ISOLATED), security_groups=[security_group], logging_config={ "log_group": self.lambda_log_group }, memory_size=128, timeout=Duration.seconds(30), retry_attempts=2 )
同时保留已配置的Lambda角色权限(确保能写入自定义日志组):
ec2_launch_fn.add_to_role_policy( iam.PolicyStatement( effect=iam.Effect.ALLOW, actions=["logs:CreateLogStream", "logs:PutLogEvents"], resources=[f"arn:aws:logs:{self.region}:{self.account}:log-group:{self.lambda_log_group.log_group_name}:*"] ) )
内容的提问来源于stack exchange,提问作者Rafiq
相关产品推荐
相关产品推荐

