AWS

[aws cli] Classic LB - 인스턴스 등록/해제

비번변경 2022. 12. 19. 21:20

개요

AWS CLI를 사용해 이미 사용 중인 Classic LB에 target instance를 등록하거나 해제하려고 한다.

사용한 명령어를 정리해둔다.

 

💡 Application LB, Network LB은 이 글에서 다루지 않는다.

 

 

CLB 정보 확인

describe-load-balancers 명령으로 classic LB의 현재 정보를 확인할 수 있다. 로드밸런서 이름을 지정하지 않으면 모든 로드밸런서 정보를 확인한다.

특정 로드밸런서 정보를 확인하고 싶을 때는 --load-balancer-name 옵션으로 확인할 로드밸런서의 이름을 전달한다.

aws elb describe-load-balancers
# --load-balancer-names : 로드밸런서 이름

# 예시
aws elb describe-load-balancers \
    --load-balancer-names <LB_NAME>

 

실행 결과

{
  "LoadBalancerDescriptions": [
    {
      "Subnets": [
          "subnet-15aaab61"
      ],
      "CanonicalHostedZoneNameID": "Z3DZXE0EXAMPLE",
      "CanonicalHostedZoneName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com",
      "ListenerDescriptions": [
          {
              "Listener": {
                  "InstancePort": 80,
                  "LoadBalancerPort": 80,
                  "Protocol": "HTTP",
                  "InstanceProtocol": "HTTP"
              },
              "PolicyNames": []
          },
          {
              "Listener": {
                  "InstancePort": 443,
                  "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-cert",
                  "LoadBalancerPort": 443,
                  "Protocol": "HTTPS",
                  "InstanceProtocol": "HTTPS"
              },
              "PolicyNames": [
                  "ELBSecurityPolicy-2015-03"
              ]
          }
      ],
      "HealthCheck": {
          "HealthyThreshold": 2,
          "Interval": 30,
          "Target": "HTTP:80/png",
          "Timeout": 3,
          "UnhealthyThreshold": 2
      },
      "VPCId": "vpc-a01106c2",
      "BackendServerDescriptions": [
          {
              "InstancePort": 80,
              "PolicyNames": [
                  "my-ProxyProtocol-policy"
              ]
          }
      ],
      "Instances": [
          {
              "InstanceId": "i-207d9717"
          },
          {
              "InstanceId": "i-afefb49b"
          }
      ],
      "DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com",
      "SecurityGroups": [
          "sg-a61988c3"
      ],
      "Policies": {
          "LBCookieStickinessPolicies": [
              {
                  "PolicyName": "my-duration-cookie-policy",
                  "CookieExpirationPeriod": 60
              }
          ],
          "AppCookieStickinessPolicies": [],
          "OtherPolicies": [
              "my-PublicKey-policy",
              "my-authentication-policy",
              "my-SSLNegotiation-policy",
              "my-ProxyProtocol-policy",
              "ELBSecurityPolicy-2015-03"
          ]
      },
      "LoadBalancerName": "my-load-balancer",
      "CreatedTime": "2015-03-19T03:24:02.650Z",
      "AvailabilityZones": [
          "us-west-2a"
      ],
      "Scheme": "internet-facing",
      "SourceSecurityGroup": {
          "OwnerAlias": "123456789012",
          "GroupName": "my-elb-sg"
      }
    }
  ]
}

 

--query 옵션을 지원하기 때문에 특정 컬럼만 조회할 수도 있다. 예로 들어, LoadBalancerName, InstanceId 컬럼 필터링은 아래와 같은 명령어로 할 수 있다.

aws elb describe-load-balancers \
    --load-balancer-names <LB_NAME> \ 
    --query LoadBalancerDescriptions[].[LoadBalancerName,Instances[].InstanceId]
    
# 실행 결과
[
    [
        "ielb-an2",
        [
            "i-0fd7598415a000000",
            "i-00d529bed50000000"
        ]
    ]
]

 

 

target intance 등록

특정 CLB에 target instance를 연결할 때는 register-instances-with-load-balancer 명령을 사용한다. 옵션으로 로드밸런서의 이름과 연결할 EC2 인스턴스의 ID를 전달해야 한다.

aws elb register-instances-with-load-balancer \
    --load-balancer-name my-load-balancer \
    --instances i-d6f6fae3

# 실행 결과
{
   "Instances": [
       {
           "InstanceId": "i-d6f6fae3"
       },
       {
           "InstanceId": "i-207d9717"
       },
       {
           "InstanceId": "i-afefb49b"
       }
   ]
}

 

인스턴스 ID는 공백으로 구분하여 여러 개를 전달할 수 있다.

aws elb register-instances-with-load-balancer \
    --load-balancer-name my-load-balancer \
    --instances InstanceId1 InstanceId2 InstanceId3

 

 

target instance 등록 해제

특정 CLB에 연결된 target instance를 해제할 때는 deregister-instances-from-load-balancer 명령을 사용한다. 옵션으로 로드밸런서의 이름과 연결을 해제할 EC2 인스턴스의 ID를 전달해야 한다.

aws elb deregister-instances-from-load-balancer \
    --load-balancer-name my-load-balancer \
    --instances i-d6f6fae3
    
# 실행 결과
{
    "Instances": [
        {
            "InstanceId": "i-207d9717"
        },
        {
            "InstanceId": "i-afefb49b"
        }
    ]
}

 

register와 마찬가지로 인스턴스 ID는 공백으로 구분하여 여러 개를 전달할 수 있다.

 

 

참고 문서

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/elb/index.html

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/elb/describe-load-balancers.html

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/elb/register-instances-with-load-balancer.html