0

我是使用打字稿的 AWS CDK 的新手。我想知道我可以在同一个 CDK 部署代码中创建 2 个或更多 ECS 任务,还是需要为每个代码创建单独的应用程序代码和不同的 ECS 任务?

此外,关于 Loki 和 Grafana 的任何想法应该在同一个 ecs 任务中还是不同的,或者我是否为每个任务创建 2 个单独的 ecs 任务并不重要?因为我将使用通用 ALB,它分别在端口 3100 和 3000 上对 Loki 和 Grafana 具有不同的侦听器规则。

我的 CDK.json

我的 CDK.json

我收到以下错误:

Parse error on line 192:
... }      }    }  }],[ {  "appGrafan
--------------------^
Expecting '}', ',', got ']'

试过这个: 试过这个

但仍然出现错误:

Parse error on line 190:
...     }    }  }, {"appGrafana": "npx 
-------------------^
Expecting 'STRING', got '{'

另外,在IDE中试过: IDE 中的错误

ashishkarpe in ~/code/docker-loki/deploy/cdk on branch pre > cdk ls
cdk.json: Unexpected token ; in JSON at position 5660
ashishkarpe in ~/code/docker-loki/deploy/cdk on branch pre > cdk diff
cdk.json: Unexpected token ; in JSON at position 5660
ashishkarpe in ~/code/docker-loki/deploy/cdk on branch pre > 
4

1 回答 1

1

我不确定你为什么要修改 cdk.json。你不应该修改它。

我认为你混合了几个概念。让我们首先从 CDK 开始。CDK 可分为 3 个主要组件(Apps、Stacks 和 Constructs)。

应用程序是主要组件,可以将其视为 java 类的主要组件。这是应用程序的入口点,将处理应用程序内所有堆栈的创建。

接下来我们有一个堆栈,这被认为是一个范围内的一组元素。堆栈中的所有内容都被视为一个单元。一个很好的例子是管道的可视化。您可以在带有 Beta 堆栈和 Prod 堆栈的管道中使用。这可能会变得更加复杂,具体取决于您的配置方式。您可以将 Alpha、Beta、Gamma、Prod 作为不同阶段的一部分,但也可以将 NA、EU、CN 和 FE 作为您所在区域的一部分,并在此基础上创建很多组合。

最后但并非最不重要的一点是,我们有 Construct,construct 应该包含作为应用程序一部分所需的 aws 资源。有些可以像创建 S3 存储桶一样简单,而另一些可以像创建和 S3 存储桶一样复杂,它向主题发布通知,并且只允许某些人读取和写入存储桶(S3 策略)。

import { App, Stack, StackProps } from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

class HelloCdkStack extends Stack {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyFirstBucket', {
      versioned: true
    });
  }
}

const app = new App();
new HelloCdkStack(app, "HelloCdkStack");

使用上面的例子。我们正在创建一个只有 1 个堆栈的应用程序,在这种情况下,S3 是一个构造。

我没有关于 grafana-loki 的上下文,所以我假设它们是您想要单独使用的 2 个组件。在您的示例中,您想要创建一个具有 2 个不同服务/结构的应用程序(我不建议这样做,因为每次您需要部署这两个服务时都会同时部署,如果您配置不正确,两者都将无法部署) . 一种结构是 Grafana,另一种是 Loki,每个结构都有一个使用不同端口的 ecs 组件。

那么您将如何应用程序来处理上述内容。您将需要创建 2 个构造。一个给 Grafana,另一个给 Loki。此构造将由您的堆栈调用,因此它可以创建每个构造的资源,然后合成它们。

class GrafanaConstruct extends Construct {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);
    // Create Fargate component
  }
}

class LokiConstruct extends Construct {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);
    // Create Fargate component    
  }
}

class GrafranaAndLokiCdkStack extends Stack {
  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);

    new LokiConstruct(this, "LokiConstruct", props);
    new GrafanaConstruct(this, "GrafanaConstruct", props);
  }
}

const app = new App();
new GrafranaAndLokiCdkStack(app, "GrafranaAndLokiCdkStack");
app.synth();
于 2021-09-07T23:52:19.110 回答