スタックを消すとLambda は消えるけど、Lambda が勝手に作った LogGroup が残り続ける。鬱陶しい。
【小ネタ】AWS SAMでLambda関数を作成する場合はCloudWatch LogsのLog Groupも同時に作った方がいいという話 に乗ってる方法で解決したと思ったら、まれに LogGroup の残骸があってなんだこりゃ。
どうも CloudFormation が LogGroup を消した直後に Lambda が起動してしまうとこうなってしまうようだ?
なら Lambda の Role から logs:CreateLogGroup
をはく奪してしまえばいいのでは。
こんなかんじ?
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources" : {
"MyLambdaRole" : {
"Type" : "AWS::IAM::Role",
"Properties" : {
"AssumeRolePolicyDocument" : {
"Statement" : [
{
"Effect" : "Allow",
"Principal" : {
"Service" : "lambda.amazonaws.com"
},
"Action" : "sts:AssumeRole"
}
]
},
"Policies" : [
{
"PolicyName" : "lambdalogpolicy",
"PolicyDocument" : {
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource" : "arn:aws:logs:*:*:*"
}
]
}
}
]
}
},
"MyLambdaLogGroup" : {
"Type" : "AWS::Logs::LogGroup",
"Properties" : {
"LogGroupName" : {
"Fn::Join" : [
"",
[
"/aws/lambda/",
{
"Ref" : "MyLambda"
}
]
]
}
}
},
"MyLambda" : {
"Type" : "AWS::Lambda::Function",
"Properties" : {
"Handler" : "index.handler",
"Role" : {
"Fn::GetAtt" : [
"MyLambdaRole",
"Arn"
]
},
"Runtime" : "python3.6",
"Code" : {
"ZipFile" : {
"Fn::Join" : [
"\n",
[
"def handler(event, context):",
" print(\"hoge\")"
]
]
}
}
}
}
}
}
もし Lambda に logs:CreateLogGroup
が必要なら、LogGroup の RetentionInDays を設定してそのうち消えるようにしておくとか、Lambda と LogGroup の依存関係を逆転させるとか?