📝

CDK Lambdaでロググループが存在しませんとなるとき

2023/09/03に公開

CDKでLambdaをdeployしていたところエラー発生。コンソール画面でテストしたときはログが出るが、Cloud Watchにロググループが存在しない問題が発生。検索したところ、こちらがヒット。

https://blog.nightonly.com/2022/05/17/cloudwatchにログが出力されなくなったので調べてみた/#lambda

どうやら2つのfunctionで共通のroleを設定すると駄目なようです。以下のようにlog groupのpolicyを追加することでロググループが作成されるようになりました。

const iamRoleForLambdaReader = new iam.Role(this, "iamRoleForLambdaReader", {
  assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
});
// これを追加する
iamRoleForLambdaReader.addToPolicy(
  new iam.PolicyStatement({
    effect: iam.Effect.ALLOW,
    actions: [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:PutLogEvents",
    ],
    resources: [
      `arn:aws:logs:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:log-group:/aws/lambda/*`,
    ],
  }),
);

new lambda.Function(this, "Function1", {
  codeSigningConfig,
  runtime: lambda.Runtime.NODEJS_18_X,
  handler: "index.handler1",
  code: lambda.Code.fromAsset(path.join(__dirname, "lambda-handler")),
  role,
});

new lambda.Function(this, "Function2", {
  codeSigningConfig,
  runtime: lambda.Runtime.NODEJS_18_X,
  handler: "index.handler2",
  code: lambda.Code.fromAsset(path.join(__dirname, "lambda-handler")),
  role,
});

Discussion