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