如何删除lambda函数日志组上的CDK破坏使用CDK?



目前,我正试图从AWS CDK创建的lambda函数中删除日志组

这是我的堆栈当前的样子:

from aws_cdk import (
core,
aws_lambda
)
from aws_cdk.aws_logs import CfnLogGroup, LogGroup
from datetime import datetime
f = """
import json
from datetime import datetime
def handler(event, context):
print(f'test {datetime.now()}')
return {
'statusCode': 200,
'body': json.dumps(f'test {datetime.now()}')
}
"""
class CdktestStack(core.Stack):
def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
fn = aws_lambda.Function(self, f"AndyTest-{datetime.now()}",
runtime=aws_lambda.Runtime.PYTHON_3_8,
handler="index.handler",
code=aws_lambda.InlineCode(f)
)
lg = LogGroup.from_log_group_name(self, f"lambda_log_group-{datetime.now()}", fn.log_group.log_group_name)
lg.apply_removal_policy(core.RemovalPolicy.DESTROY)

默认情况下,lambda日志组在CDK销毁完成后保留。

我已经尝试通过使用LogGroups来管理日志组。

我已经看到了销毁日志组的答案,但它不会像这一行那样:

lg = LogGroup.from_log_group_name(self, f"lambda_log_group-{datetime.now()}", fn.log_group.log_group_name)

返回一个ILogGroup,当我尝试调用

时抛出这个错误
lg.apply_removal_policy(core.RemovalPolicy.DESTROY)

出现错误:

jsii.errors.JSIIError: Cannot apply RemovalPolicy: no child or not a CfnResource. Apply the removal policy on the CfnResource directly.

我的目标是使用CDK来管理日志组,以便可以在销毁时删除资源,而无需使用boto3。

下面的代码可以很好地根据名称单独创建一个日志组,而不是从名称加载它。详细实现见下文:

from aws_cdk import core, aws_lambda
from aws_cdk.aws_logs import CfnLogGroup, LogGroup, RetentionDays
from datetime import datetime
f = """
import json
from datetime import datetime
def handler(event, context):
print(f'test {datetime.now()}')
return {
'statusCode': 200,
'body': json.dumps(f'test {datetime.now()}')
}
"""

class CdktestStack(core.Stack):
def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
fn = aws_lambda.Function(
self,
f"AndyTest-{datetime.now()}",
runtime=aws_lambda.Runtime.PYTHON_3_8,
handler="index.handler",
code=aws_lambda.InlineCode(f),
)
LogGroup(
self,
f"lambda_log_group-{datetime.now()}",
log_group_name=f"/aws/lambda/{fn.function_name}",
removal_policy=core.RemovalPolicy.DESTROY,
retention=RetentionDays.ONE_DAY,
)

一个警告,如果您使用log_retention属性,它会创建一个自定义资源来自动为您生成一个相关的日志组。所以上面的工作正常。

最新更新