EC2 NameTag에서 ELB 조작하기
개요
이 페이지에서는 ELB (여기서는 ClassicLoadBalancer)의 연결 분리를 EC2 tag:Name
에서 수행 할 수있는 방법에 대해 설명합니다.
목표
ELB명에 이어 인스턴스명을 복수 지정함으로써 복수대의 어태치·데터치를 가능하게 한다.
$ aws-register.sh ${elb-name} [${EC2 tag:Name} ..... ]
준비
ELB명에 이어 인스턴스명을 복수 지정함으로써 복수대의 어태치·데터치를 가능하게 한다.
$ aws-register.sh ${elb-name} [${EC2 tag:Name} ..... ]
준비
t3.micro
준비 사용할 AWS CLI
이번에는 EC2의 인스턴스 ID가 필요하기 때문에 인스턴스 정보를 표시하는
clom-classic-lb
를 사용한다.또한 EC2를 ELB에 부착/분리하기 위해
describe-instances
및 register-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에서 인스턴스를 분리하는 데 사용됩니다. aws elb register-instances-with-load-balancer \
--load-balancer-name ${ELB名} \
--instances ${INSTANCE_ID}
여기서
deregister-instances-from-load-balancer
는 INSTANCE_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의 어태치·데터치 이외에도 여러가지 액션을 취할 수 있는 것은 아닐까 생각한다.
Reference
이 문제에 관하여(EC2 NameTag에서 ELB 조작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/clom/items/e7e9f885f3e430f37f8b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(EC2 NameTag에서 ELB 조작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/clom/items/e7e9f885f3e430f37f8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)