首页 > 解决方案 > 从 AWS CDK 中的 Fargate 集群获取所有服务

问题描述

我需要能够获得所有服务,仅给定 AWS CDK 中的 Cluster 构造(本示例中为 TypeScript,但任何语言都可以)。

类似于以下内容。

import { Cluster, FargateService } from '@aws-cdk/aws-ecs';

private updateClusterServices(cluster: Cluster): void {
  for (const service of cluster.getServices()) {
    // do something with service
  }
}

但是ClustergetServices()上没有这种方法。

是否有另一种方法可以做到这一点,或者由于某种原因,CDK 从根本上不可能做到这一点?

标签: typescriptamazon-ecsaws-cdk

解决方案


事实证明,如果您至少也有服务名称,那么有一种方法可以做这样的事情。

import { Cluster, FargateService } from '@aws-cdk/aws-ecs';

private updateClusterServices(scope: Construct, cluster: Cluster, serviceName: string): void {
  const service = FargateService.fromFargateServiceAttributes(scope, 'FindFargateServices', {
    cluster: cluster,
    serviceName: serviceName,
  });

  console.log(service.serviceArn);

  // do something with service
}

结果似乎是TaskSet serviceArn。

arn:aws:ecs:ap-southeast-2:1234567890:service/backend

通过将其与 CLI 输出进行比较。

$ aws ecs describe-services --cluster blue-green-cluster --services backend
{
    "services": [
        {
            "serviceArn": "arn:aws:ecs:ap-southeast-2:1234567890:service/blue-green-cluster/backend",
            "serviceName": "backend",
            "clusterArn": "arn:aws:ecs:ap-southeast-2:1234567890:cluster/blue-green-cluster",
...
            "taskSets": [
                {
                    "taskSetArn": "arn:aws:ecs:ap-southeast-2:1234567890:task-set/blue-green-cluster/backend/ecs-svc/2091139980078414071",
                    "serviceArn": "arn:aws:ecs:ap-southeast-2:1234567890:service/backend",
                    "clusterArn": "arn:aws:ecs:ap-southeast-2:1234567890:cluster/blue-green-cluster",
...
}

推荐阅读