CDK での Lambda 関数作成時に LogRetention の関数が自動的に作成される挙動を確認してみた
Log Retention Lambda | AWS re:Post
When you specify logRetention in the Lambda function construct, CDK creates a custom resource, which is implemented using a Lambda function.
上記挙動を確認してみました
CDK コード
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as logs from 'aws-cdk-lib/aws-logs';
export class DevioStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const existingRole = iam.Role.fromRoleArn(
this,
'ExistingRole',
'arn:aws:iam::012345678901:role/LambdaBasicExecutionRole',
{ mutable: false }
);
new lambda.Function(this, 'MyLambdaFunction', {
runtime: lambda.Runtime.NODEJS_22_X,
handler: 'index.handler',
role: existingRole,
logRetention: logs.RetentionDays.ONE_WEEK,
code: lambda.Code.fromInline(`
exports.handler = async function (event) {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
`),
});
}
}
logRetention
パラメータを指定することで LogRetention の関数が作成されます。
ただし、logRetention パラメータはレガシー API であるため、logGroup
への移行が推奨されています。
class Function (construct) · AWS CDK
This is a legacy API and we strongly recommend you move away from it if you can.
デプロイ後
CDK コードで定義した関数に加えて、LogRetention という名称が含まれる関数も自動的に作成されていました。
なお、LogRetention の関数のランタイムについては CDK 側で自動的に定義されるようでした。
例えば、CDK コードで定義した関数のランタイムを Node.js 20.x に指定しても、LogRetention の関数のランタイムは Node.js 22.x で作成されました。
GitHub を確認したところ、カスタムリソースのランタイムを更新した旨の報告があったので、今後もランタイムの更新情報については GitHub を確認する必要がありそうです。
📊Tracking: [Lambda/Custom Resources] upgrade to Node 22 · Issue #33626 · aws/aws-cdk
Custom resource default node runtime is now upgraded to node22 for all regions except isolated regions. This is available from CDK v2.197.0.
まとめ
今回は CDK での Lambda 関数作成時に LogRetention の関数が自動的に作成される挙動を確認してみました。
どなたかの参考になれば幸いです。
Discussion