【问题标题】:Cannot use existing log group in ECS scheduled task (aws-cdk)无法在 ECS 计划任务 (aws-cdk) 中使用现有日志组
【发布时间】:2021-10-17 04:33:12
【问题描述】:

我正在尝试将现有日志组添加到我的 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,
    });

【问题讨论】:

    标签: typescript amazon-web-services amazon-ecs aws-cdk


    【解决方案1】:

    以下代码通过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
        });
      }
    }
    

    【讨论】:

    • 谢谢,这很好用。只需删除package-lock.jsonnode_modules 文件夹并运行npm i 即可让一切恢复正常。
    猜你喜欢
    • 2020-03-22
    • 2018-11-19
    • 2019-08-27
    • 2023-01-18
    • 2020-04-28
    • 2020-09-06
    • 2020-04-25
    • 2020-08-19
    • 2021-12-26
    相关资源
    最近更新 更多