AWS CLIでELB配下のEC2インスタンスの一覧を取得する


ELB名からインスタンス一覧を取得する

aws elb describe-instance-health --load-balancer-name={ELB_NAME} --query "InstanceStates[*].InstanceId" --output table --profile {CLI_PROFILE}
実行例
------------------------
|DescribeInstanceHealth|
+----------------------+
|  i-00000000          |
|  i-11111111          |
|  i-22222222          |
|  i-33333333          |
|  i-44444444          |
+----------------------+

インスタンスIDから接続情報を取得する

aws ec2 describe-instances --instance-ids {INSTANCE_ID} --query "Reservations[*].Instances[*].{PublicDnsName:PublicDnsName,PublicIpAddress:PublicIpAddress,PrivateIpAddress:PrivateIpAddress}" --output table  --profile {CLI_PROFILE}
実行例
----------------------------------------------------------------------------------------------------
|                                         DescribeInstances                                        |
+------------------+-----------------------------------------------------------+-------------------+
| PrivateIpAddress |                       PublicDnsName                       |  PublicIpAddress  |
+------------------+-----------------------------------------------------------+-------------------+
|  172.30.xx.xxx   |  ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com  |  xx.xxx.xxx.xxx   |
+------------------+-----------------------------------------------------------+-------------------+

ELB配下のEC2インスタンスの接続情報を取得する

outputをtextにしてインスタンスID一覧を取得すればそのまま--instance-idsに指定できる

#!/bin/bash

ELB_NAME=elb-xxx
CLI_PROFILE=cliprofile

INSTANCE_IDS=`aws elb describe-instance-health --load-balancer-name=${ELB_NAME} --query "InstanceStates[*].InstanceId" --output text --profile ${CLI_PROFILE}`
aws ec2 describe-instances --instance-ids ${INSTANCE_IDS} --query "Reservations[*].Instances[*].{PublicDnsName:PublicDnsName,PublicIpAddress:PublicIpAddress,PrivateIpAddress:PrivateIpAddress}" --output table  --profile ${CLI_PROFILE}

ELB配下のEC2にsshでシェルを叩く

EC2群に一括で簡易的な処理をしたい時などに

#!/bin/bash

ELB_NAME=elb-xxx
CLI_PROFILE=cliprofile
SSH_KEYFILE=/home/ec2-user/.ssh/hoge.pem

INSTANCE_IDS=`aws elb describe-instance-health --load-balancer-name=${ELB_NAME} --query "InstanceStates[*].InstanceId" --output text --profile ${CLI_PROFILE}`
ENDPOINTS=`aws ec2 describe-instances --instance-ids ${INSTANCE_IDS} --query "Reservations[*].Instances[*].PublicDnsName" --output text  --profile ${CLI_PROFILE}`

for ENDPOINT in ${ENDPOINTS}
do
        ssh -i ${SSH_KEYFILE} ec2-user@${ENDPOINT} cmd
done