我正在使用 aws-cdk 来定义我的基础设施,它由 auora、elasticache、fargate 和调度 fargate 任务组成。其他组件按预期工作,但 Fargate 计划任务 除外。
我试图找出问题所在,但我找不到任何有用的日志来帮助我。我在 CloudTrail 中看到的只是调用了 RunTask,但我看不到失败或成功的原因。
这是我的 cdk 代码的样子。
export class CdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
const stage ='test'
const vpc = new ec2.Vpc(this, `project-${stage}-vpc`, {
vpcName: `project-${stage}-vpc`,
maxAzs: 3, // Default is all AZs in region
natGateways: 0,
subnetConfiguration: [
{
name: 'public-subnet',
subnetType: ec2.SubnetType.PUBLIC,
},
{
name: 'private-subnet',
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
},
{
name: 'egress-subnet',
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
},
]
});
const cluster = new ecs.Cluster(this, `project-${stage}-cluster`, {
clusterName: `project-${stage}-cluster`,
vpc: vpc,
containerInsights: true,
})
const redisSecurityGroup = new ec2.SecurityGroup(this, `redis-${stage}-security-group`, {
vpc: vpc,
allowAllOutbound: true
})
const dbPort = 5432
const redisPort = 6379
const db = new rds.DatabaseCluster(this, `project-database-${stage}-cluster`, {
....
});
// THIS HERE WORKS WITHOUT PROBLEM
const fargate = new ecs_patterns.ApplicationLoadBalancedFargateService(this, `project-fargate-service-${stage}`, {
....
})
// THIS HERE WON'T EVEN START
const scheduler = new ecs_patterns.ScheduledFargateTask(this, `scheduled-${stage}-task`, {
cluster: cluster,
enabled: true,
ruleName: `scheduled-${stage}-rule`,
schedule: events.Schedule.rate(cdk.Duration.minutes(props.cronTime)),
scheduledFargateTaskImageOptions: {
image: image,
memoryLimitMiB: 512,
cpu: 256,
environment: {
"AS_TASK": "true", /*IMPORTANT*/
},
},
})
fargate.service.connections.allowTo(db, ec2.Port.tcp(dbPort), "allow cluster connections")
fargate.service.connections.allowTo(redisSecurityGroup, ec2.Port.tcp(redisPort), "fargate to redis group")
scheduler.task?.securityGroups?.forEach(sg => db.connections.allowFrom(sg, ec2.Port.tcp(dbPort), "scheduler to db group"))
scheduler.task?.securityGroups?.forEach(sg => redisSecurityGroup.connections.allowFrom(sg, ec2.Port.tcp(redisPort), "scheduler to redis group"))
}
}
这里是我最近从CLoudTrail>Event History>RunTask>Event Details得到的事件记录
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "A.....",
"arn": ".......D-SQ3KPLIENXTB/6.....",
"accountId": "....",
"accessKeyId": ".....",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "..........",
"arn": "........",
"accountId": "...",
"userName": "ProjectTestStack-schedulertesttaskEventsRole4AA20D-......"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2023-05-17T15:58:28Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "events.amazonaws.com"
},
"eventTime": "2023-05-17T15:58:28Z",
"eventSource": "ecs.amazonaws.com",
"eventName": "RunTask",
"awsRegion": "eu-west-1",
"sourceIPAddress": "events.amazonaws.com",
"userAgent": "events.amazonaws.com",
"requestParameters": {
"placementConstraints": [],
"platformVersion": "LATEST",
"overrides": {},
"count": 1,
"launchType": "FARGATE",
"networkConfiguration": {
"awsvpcConfiguration": {
"assignPublicIp": "DISABLED",
"securityGroups": [
"sg-09e71b59d9a6dd6e7"
],
"subnets": [
"subnet-044...",
"subnet-07c....",
"subnet-0f7b...."
]
}
},
"tags": [],
"cluster": "arn:aws:ecs:eu-west-1:9.................",
"enableExecuteCommand": false,
"taskDefinition": "arn:aws:ecs:eu-west-1:....:task-definition/ProjectTestStackschedulertesttask.....:1",
"placementStrategy": [],
"startedBy": "events-rule/scheduled-test-rule",
"enableECSManagedTags": false,
"capacityProviderStrategy": []
},
"responseElements": {
"failures": [],
"tasks": [
{
"createdAt": "May 17, 2023, 3:58:28 PM",
"memory": "512",
"version": 1,
"ephemeralStorage": {
"sizeInGiB": 20
},
"desiredStatus": "RUNNING",
"lastStatus": "PROVISIONING",
"platformFamily": "Linux",
"startedBy": "events-rule/scheduled-test-rule",
"taskArn": "arn:aws:ecs:eu-west-1:.............:task/project-test-cluster/1e8a9a7c5a854de9ad77ac...",
"taskDefinitionArn": "arn:aws:ecs:eu-west-1:.............:task-definition/ProjectTestStackschedulertesttask.....:1",
"attachments": [
{
"status": "PRECREATED",
"type": "ElasticNetworkInterface",
"details": [
{
"name": "subnetId",
"value": "subnet-07c319129f9..."
}
],
"id": "3eb41c44-85af-4211-8a9e-12c1e8ad135a"
}
],
"clusterArn": "arn:aws:ecs:eu-west-1:.............:cluster/project-test-cluster",
"availabilityZone": "eu-west-1b",
"overrides": {
"containerOverrides": [
{
"name": "schedule-test-container"
}
],
"inferenceAcceleratorOverrides": []
},
"enableExecuteCommand": false,
"group": "family:ProjectTestStackschedulertesttask...",
"containers": [
{
"networkInterfaces": [],
"taskArn": "arn:aws:ecs:eu-west-1:.............:task/project-test-cluster/1e8a9a7c5a854de9ad77acb9850ba6fe",
"containerArn": "arn:aws:ecs:eu-west-1:.............:container/project-test-cluster/1e8a9a7c5a854de9ad77acb9850ba6fe/8c3c3d04-0590-4377-8395-fd2b8a6f88c4",
"image": "..............dkr.ecr.eu-west-1.amazonaws.com/cdk-hnb659fds-container-assets-.............-eu-west-1:8c53e0d51961cac102053b84875f88c56bed6ef1956e46799529f76580e6e426",
"cpu": "0",
"name": "schedule-test-container",
"lastStatus": "PENDING"
}
],
"cpu": "256",
"tags": [],
"launchType": "FARGATE",
"attributes": [
{
"value": "x86_64",
"name": "ecs.cpu-architecture"
}
],
"platformVersion": "1.4.0"
}
]
},
"requestID": "a43fc21d-579a-40dc-bd68-fd0fb00096d6",
"eventID": "9b02af5f-ee38-49cc-82b0-8a1a43d5ce8c",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": ".............",
"eventCategory": "Management"
}
为了让计划任务正常运行,我在这里缺少什么。在本地环境中它工作得很好吗?
这里有一些截图,对我来说他们似乎正在运行任务。