typescript - 从 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 从根本上不可能做到这一点?
解决方案
事实证明,如果您至少也有服务名称,那么有一种方法可以做这样的事情。
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",
...
}
推荐阅读
- javascript - 在vue js的新页面中,路由更改视图滚动到顶部
- python - 在 python 中初始化 libevdev 以便设备可以有多个工具工作
- node.js - 护照.js谷歌oauth策略的cors问题
- php - WordPress 核心版本升级的权限问题
- excel - 每个语句的 UCase
- sass - 在 Sass/Scss 中使用 @use 规则覆盖大量 !default 值
- apache-kafka - 为什么 ksql 不能识别 min 函数
- batch-rename - 如何从多个文本文件中重命名多个文件?
- javascript - 如何在 Vue 组件的数据上添加多个过滤器?
- c# - 更新数据库期间用户登录失败