无法在 ECS 计划任务 (aws-cdk) 中使用现有日志组

Cannot use existing log group in ECS scheduled task (aws-cdk)

我正在尝试将现有日志组添加到我的 ECS 计划任务中,以避免创建具有随机名称的新日志组。但是 aws-cdk(打字稿)一直给我错误,类型不可分配。

const myLogGroup =  LogGroup.fromLogGroupArn(this, 'MyLogGroup', 'log-group-arn')

const logging = ecs.LogDrivers.awsLogs({
      streamPrefix: 'mylg',
      logGroup: myLogGroup
});

logGroup: myLogGroup 给出错误:

Type 'import("/Users/praveen/code/cron-cdk/node_modules/@aws-cdk/aws-logs/lib/log-group").ILogGroup' is not assignable to type 'import("/Users/praveen/code/cron-cdk/node_modules/@aws-cdk/aws-ec2/node_modules/@aws-cdk/aws-logs/lib/log-group").ILogGroup'.
  The types of 'addStream(...).stack.tags' are incompatible between these types.
    Type 'import("/Users/praveen/code/cron-cdk/node_modules/@aws-cdk/aws-logs/node_modules/@aws-cdk/core/lib/tag-manager").TagManager' is not assignable to type 'import("/Users/praveen/code/cron-cdk/node_modules/@aws-cdk/core/lib/tag-manager").TagManager'.
      Types have separate declarations of a private property 'tags'.ts(2322)
aws-log-driver.d.ts(51, 14): The expected type comes from property 'logGroup' which is declared here on type 'AwsLogDriverProps'
(property) AwsLogDriverProps.logGroup?: ILogGroup | undefined

有什么想法可以为此使用我现有的日志组吗? 我的定时任务定义是这样的-

new ScheduledFargateTask(this, 'cleanup', {
      cluster,
      scheduledFargateTaskImageOptions: {
        image: ecs.ContainerImage.fromAsset('scripts/cleanup'),
        memoryLimitMiB: 512,
        logDriver: logging,
      },
      schedule: events.Schedule.expression('rate(12 hours)'),
      platformVersion: ecs.FargatePlatformVersion.LATEST,
    });

下面的代码通过 cdk synth.

正确编译并创建了 CloudFormation

我使用 cdk init app --language typescript 从基本 CDK 项目创建了以下项目,然后将所需的依赖项添加到 package.json。我建议验证您所有的 CDK 依赖项都是同一版本并且您的导入是正确的。

依赖关系:

"@aws-cdk/aws-ec2": "^1.117.0",
"@aws-cdk/aws-ecs": "^1.117.0",
"@aws-cdk/aws-ecs-patterns": "^1.117.0",
"@aws-cdk/aws-events": "^1.117.0",
"@aws-cdk/aws-logs": "^1.118.0",
"@aws-cdk/core": "1.117.0"

代码:

import { ContainerImage, FargatePlatformVersion, LogDrivers, Cluster } from '@aws-cdk/aws-ecs';
import { ScheduledFargateTask } from '@aws-cdk/aws-ecs-patterns';
import { Schedule } from '@aws-cdk/aws-events';
import { LogGroup } from '@aws-cdk/aws-logs';

import * as cdk from '@aws-cdk/core';

export class LogGroupsStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const myLogGroup = LogGroup.fromLogGroupArn(this, 'MyLogGroup', 'arn:partition:service:region:account-id:resource-id')

    const logging = LogDrivers.awsLogs({
      streamPrefix: 'mylg',
      logGroup: myLogGroup
    });

    const cluster = new Cluster(this, "MyCluster")

    new ScheduledFargateTask(this, 'cleanup', {
      cluster,
      scheduledFargateTaskImageOptions: {
        image: ContainerImage.fromRegistry("amazon/amazon-ecs-sample"),
        memoryLimitMiB: 512,
        logDriver: logging,
      },
      schedule: Schedule.expression('rate(12 hours)'),
      platformVersion: FargatePlatformVersion.LATEST
    });
  }
}