【问题标题】:Can I create 2 or more ECS task in the same CDK deploy code for Loki and Grafana?我可以在 Loki 和 Grafana 的同一个 CDK 部署代码中创建 2 个或更多 ECS 任务吗?
【发布时间】:2021-09-06 18:25:49
【问题描述】:

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

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

我的 CDK.json

我收到以下错误:

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

试过这个:

但仍然出现错误:

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

另外,在 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 > 

【问题讨论】:

    标签: json typescript aws-cdk grafana-loki


    【解决方案1】:

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

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

    Apps 是主要组件,可以将其视为 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多