EC2 NameTag에서 ELB 조작하기

8560 단어 EC2elbAWS

개요



이 페이지에서는 ELB (여기서는 ClassicLoadBalancer)의 연결 분리를 EC2 tag:Name에서 수행 할 수있는 방법에 대해 설명합니다.

목표



ELB명에 이어 인스턴스명을 복수 지정함으로써 복수대의 어태치·데터치를 가능하게 한다.
$ aws-register.sh ${elb-name} [${EC2 tag:Name} ..... ]

준비


  • EC2 인스턴스 준비
  • clom-spot-t3{01-03} 준비



  • ELB는 Classic Load Balancer 준비
  • t3.micro 준비




  • 사용할 AWS CLI



    이번에는 EC2의 인스턴스 ID가 필요하기 때문에 인스턴스 정보를 표시하는 clom-classic-lb를 사용한다.
    또한 EC2를 ELB에 부착/분리하기 위해 describe-instancesregister-instances-with-load-balancer를 사용한다.

    구현



    describe-instances


  • deregister-instances-from-load-balancer를 사용하여 filter에서 해당 인스턴스의 정보를 볼 수 있습니다. tag:Name 로 OR 조건이 되므로, 복수 있는 경우는 , 와 같이 지정을 한다.
  • 취득할 수 있는 정보로서는 여러가지 것이 있지만, 이번은 clom-spot-t301, clom-spot-t302만 필요하기 때문에, InstanceId를 jq 등으로 필터링하면 이하의 커멘드로 다음의 정보를 취득할 수 있다.
  • aws ec2 describe-instances --filter "Name=tag:Name,Values=${INSTANCES}" | jq -r ".Reservations[].Instances[].InstanceId"
    
    i-xxxxxxxxxxxx
    i-xxxxxxxxxxxx
    

    그 외에 취득할 수 있는 정보로서는
    htps : // / cs. 아 ws. 아마존. 이 m/cぃ/ぁてst/れふぇれせ/에c2/에서 sc리베인 s단세 s. HTML
    확인하고 싶습니다.

    register-instances-with-load-balancer, deregister-instances-from-load-balancer


  • Reservations[].Instances[].InstanceId는 CLB에 인스턴스를 연결하는 데 사용되며 register-instances-with-load-balancer는 CLB에서 인스턴스를 분리하는 데 사용됩니다.
  • CLI의 기법으로서는 둘 다 마찬가지로 다음과 같은 형태가 된다. 예는 부착시입니다.
  • aws elb register-instances-with-load-balancer \
     --load-balancer-name ${ELB} \
     --instances ${INSTANCE_ID}
    

    여기서 deregister-instances-from-load-balancerINSTANCE_ID 와 같이, 공백 단락으로 지정할 필요가 있다. 이렇게하면 지정된 인스턴스를 ELB에 연결 해제 할 수 있습니다.

    쉘 스크립트 작성



    2종의 커멘드를 이용해, Name으로 지정한 인스턴스명을 CLB에 첨부하는 스크립트를 기재한다.
    (Detach는 Attach의 항목을 Detach로 변경하는 것만으로 실현하기 때문에 여기에서는 생략한다.)
    #!/bin/sh
    # AWS ELB attach
    
    ARG=("$@")
    ELB=${ARG[0]}
    
    unset -v ARG[0]
    
    IFS=,
    INSTANCES=${ARG[*]}
    INSTANCE_ID=(`aws ec2 describe-instances --filter "Name=tag:Name,Values=${INSTANCES}" | jq -r ".Reservations[].Instances[].InstanceId "`)
    
    IFS=$'\n'
    # AWS register ELB
    aws elb register-instances-with-load-balancer --load-balancer-name ${ELB} \
     --instances ${INSTANCE_ID}
    
    if [ $? -eq 0 ]; then
        echo "${ELB} is attached ${INSTANCES}"
    else
       echo "${ELB} is not attached ${INSTANCES}"
    fi
    

    앞의 절에서 출력 예를 나타내었지만 i-xxxxxxxxxxxx i-xxxxxxxxxxxx의 결과를 그대로 ELB의 인수에는 가져올 수 없다. 또, shell 실행시의 인수의 형식( describe-instances )에서는, LB명이 clom-classic-lb clom-spot-t301 clom-spot-t302에 들어가거나, 공백 단락이 되어 있기 때문에 Name으로 OR의 필터를 쓸 수 없게 된다.

    그래서 인수나 반환값을 배열로 해 describe-instances 에 다음에 사용하는 커멘드에 맞춘 단락 문자로 변경해 이용하고 있다.
    이렇게하면 인수의 형식이 다른 경우에도 대응할 수 있습니다.

    실행 결과



    어태치한 경우의 실행 결과는 이와 같은 형태가 된다.
    A). nonoca@chihaya:~$ bash aws-register.sh clom-classic-lb clom-spot-t301 clom-spot-t302
    {
        "Instances": [
            {
                "InstanceId": "i-xxxxxxxxxxxxxxxxx"
            },
            {
                "InstanceId": "i-xxxxxxxxxxxxxxxxx"
            }
        ]
    }
    clom-classic-lb is attached clom-spot-t301,clom-spot-t302
    
    
    B). nonoca@chihaya:~$ bash aws-register.sh clom-classic-lb clom-spot-t303
    {
        "Instances": [
            {
                "InstanceId": "i-xxxxxxxxxxxxxxxxx"
            },
            {
                "InstanceId": "i-xxxxxxxxxxxxxxxxx"
            },
            {
                "InstanceId": "i-xxxxxxxxxxxxxxxxx"
            }
        ]
    }
    clom-classic-lb is attached clom-spot-t303
    
    

    A 실행 결과의 관리 콘솔은 다음과 같습니다.


    B 실행 결과의 관리 콘솔은 다음과 같습니다.


    요약



    이상으로부터, ShellScript 로 인스턴스명(tag:Name)으로부터 ELB에 첨부하는 것이 가능하게 되었다.
    이것을 조합하는 것으로 인스턴스명으로부터 ELB의 어태치·데터치 이외에도 여러가지 액션을 취할 수 있는 것은 아닐까 생각한다.

    좋은 웹페이지 즐겨찾기