簡體   English   中英

如何找出與ALB關聯的ECS群集

[英]How to find out which ECS cluster is associated to an ALB

我們在ELB后面運行一個ECS集群(ALB,具體而言)。

我有一個流程允許我通過查詢ALB並通過目標組追溯結果然后實例來找出哪個ECS群集與ALB相關聯:


這是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“集群”實際上只是一個亞馬遜服務,當您創建集群時,實際上沒有配置任何內容。 您可以將空集群視為ECS服務中的記錄或占位符。

為了對集群做任何事情,它需要實例。 從受支持的AMI(適當的IAM角色和寫入配置文件的群集名稱)引導EC2計算機時,該實例將加入群集。 (如果通過AWS控制台創建集群,則會創建一個CloudFormation模板,用於處理這些步驟的配置和編排。)然后,ECS集群管理可以按照您在ECS服務中的定義將任務和服務調度到該實例上。

沒有任何實例,就沒有監聽容器,因此ALB中沒有可以路由到任何東西的目標組。 因此,無法get from the ELB to the cluster...因為您已經詢問何時沒有正在運行的實例。

您可能會發現以下命令是確定是否具有正在運行的集群的更好方法。

首先,使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM