目前,我正试图从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属性,它会创建一个自定义资源来自动为您生成一个相关的日志组。所以上面的工作正常。