- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在 ELB(具体来说是 ALB)后面运行一个 ECS 集群。
我有一个过程可以让我通过查询 ALB 并通过目标组和实例追溯结果来找出与 ALB 关联的 ECS 集群:
这是 bash 脚本:
ELB_NAME=$(aws route53 list-resource-record-sets --hosted-zone-id <Zone-ID> | jq -r --arg URL "$URL"'.ResourceRecordSets[]|select(.Name==$URL)|.AliasTarget.DNSName')
ELB_NAME=$(echo $ELB_NAME | cut -f 2- -d "." | rev | cut -f 2- -d "." | rev)
ELB_ARN=$(aws elbv2 describe-load-balancers | jq -r --arg ELB_NAME "$ELB_NAME" '.LoadBalancers[]|select((.DNSName|ascii_downcase)==$ELB_NAME)|.LoadBalancerArn')
TG_ARNS=$(aws elbv2 describe-target-groups | jq -r --arg ELB_ARN "$ELB_ARN" '.TargetGroups[]|select(.LoadBalancerArns[]==$ELB_ARN)|.TG_ARN=$(echo $TG_ARNS | cut -f 1 -d " ")
INSTANCE_ID=$(aws elbv2 describe-target-health --target-group-arn $TG_ARN | jq -r '.TargetHealthDescriptions[].Target.Id' | head -n 1)
CLUSTER=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID | jq -r '.Reservations[].Instances[].Tags[]|select(.Key=="aws:cloudformation:stack-name")|.Value' | cut -f 2 -d "-")
我遇到的问题是,当没有与 ECS 集群关联的正在运行的实例时,我无法再向它们查询返回 Cloudformation 堆栈名称的标签,目标组的目标请求为空。
我如何使用 AWS API 来确定 ALB 在有正在运行的实例时将定位到哪个 ECS 集群?
最佳答案
您并不清楚您的要求,或者您试图达到的目的,但以下内容应该能让您走上正轨。
ECS“集群”实际上只是一项 Amazon 服务,当您创建集群时,实际上并没有提供任何东西。您可以将空集群视为 ECS 服务中的记录或占位符。
为了对集群做任何事情,它需要实例。当您从受支持的 AMI、适当的 IAM 角色和写入配置文件的集群名称启动 EC2 机器时,该实例将加入集群。 (如果您通过 AWS 控制台创建集群,则会创建一个 CloudFormation 模板来处理这些步骤的配置和编排。)ECS 集群管理随后可以按照您在 ECS 服务中定义的那样将任务和服务安排到该实例上。
没有任何实例,就没有监听容器,因此您的 ALB 中不可能有路由到任何内容的目标组。因此,不可能从 ELB 获取到集群...
正如您在没有运行实例时所询问的那样。
您可能会发现以下命令是确定您是否有正在运行的集群的更好方法。
首先,使用list-clusters
命令显示哪些集群可用:
aws ecs list-clusters
{
"clusterArns": [
"arn:aws:ecs:eu-west-1:XXXXXXXXX:cluster/your_cluster"
]
}
然后使用它的输出来显示是否有任何 EC2 实例注册到集群:
aws ecs describe-clusters --clusters your_cluster
{
"clusters": [
{
"status": "ACTIVE",
"statistics": [],
"clusterName": "your_cluster",
"registeredContainerInstancesCount": 1,
"pendingTasksCount": 0,
"runningTasksCount": 0,
"activeServicesCount": 0,
"clusterArn": "arn:aws:ecs:eu-west-1:XXXXXXXXX:cluster/your_cluster"
}
],
"failures": []
}
请注意 registeredContainerInstancesCount
属性显示正在运行的实例数。我假设您已将 ECS 服务设置为向 ALB 注册任务(容器),因此当计数大于 0
时,这是可能的。
因此,查询该属性应该会告诉您集群是否“开启”:
if [[ $(aws ecs describe-clusters --clusters your_cluster | jq -r '.clusters[].registeredContainerInstancesCount') -gt 0 ]] ; then
echo "cluster is on"
else
echo "cluster is off"
fi
关于bash - 如何找出哪个 ECS 集群与 ALB 相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657744/
我是一名优秀的程序员,十分优秀!