Amazon AWS ELB コマンド ライン ツールを使用しています。特定の Elastic Load Balancer (ELB) に接続されているインスタンスを見つける方法はありますか?
11 に答える
2013/12/18:これを更新し、リンクが切れているので!
新しいAWSCLIツールをインストールしました。
$ pip install awscli
次に実行しました:
$ aws configure
AWS Access Key ID [None]: my-key
AWS Secret Access Key [None]: my-secret
Default region name [None]: us-east-1
Default output format [None]:
このデータはに保存され~/.aws/config
ます。
次に、次のようにロードバランサーに接続されているインスタンスを見つけることができます。
$ aws elb describe-load-balancers --load-balancer-name "my-name"
{
"LoadBalancerDescriptions": [
{
"Subnets": [],
"CanonicalHostedZoneNameID": "ID",
"CanonicalHostedZoneName": "my-name-foo.us-east-1.elb.amazonaws.com",
"ListenerDescriptions": [
{
"Listener": {
"InstancePort": 80,
"LoadBalancerPort": 80,
"Protocol": "HTTP",
"InstanceProtocol": "HTTP"
},
"PolicyNames": []
},
{
"Listener": {
"InstancePort": 80,
"SSLCertificateId": "arn:aws:iam::x:server-certificate/x-ssl-prod",
"LoadBalancerPort": 443,
"Protocol": "HTTPS",
"InstanceProtocol": "HTTP"
},
"PolicyNames": [
"AWSConsole-SSLNegotiationPolicy-api-production"
]
}
],
"HealthCheck": {
"HealthyThreshold": 10,
"Interval": 30,
"Target": "HTTP:80/healthy.php",
"Timeout": 5,
"UnhealthyThreshold": 2
},
"BackendServerDescriptions": [],
"Instances": [
{
"InstanceId": "i-FIRST-INSTANCEID"
},
{
"InstanceId": "i-SECOND-INSTANCEID"
}
],
"DNSName": "my-name-foo.us-east-1.elb.amazonaws.com",
"SecurityGroups": [],
"Policies": {
"LBCookieStickinessPolicies": [],
"AppCookieStickinessPolicies": [],
"OtherPolicies": [
"AWSConsole-SSLNegotiationPolicy-my-name"
]
},
"LoadBalancerName": "my-name",
"CreatedTime": "2013-08-05T16:55:22.630Z",
"AvailabilityZones": [
"us-east-1d"
],
"Scheme": "internet-facing",
"SourceSecurityGroup": {
"OwnerAlias": "amazon-elb",
"GroupName": "amazon-elb-sg"
}
}
]
}
データはにありLoadBalancerDescriptions.Instances
ます。
私のロードバランサーは呼び出されmy-name
ます—これは作成時に選択した名前です。
以下の古い答え!
私はCLIツールに精通していませんが、APIを使用しました。
これらの2つのリクエストを確認します。
CLIツールにはおそらくこれらに似たものがありますか?
HTH!
すべての ELB とアタッチされたインスタンスを確認したい場合は、次のよう にJMESPathを使用します。
aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[*].InstanceId}[*]. {ELB:ID,InstanceId:InstanceId[*]}" --output=json
結果
[
{
"ELB": "my_name",
"InstanceId": [
"i-0cc72"
]
},
{
"ELB": "my_name2",
"InstanceId": [
"i-02ff5f",
"i-09e467"
]
}
]
ELB の名前を知っていて、何が添付されているかを確認したい場合は、次のように JMESPath を使用します。
aws elb describe-load-balancers --load-balancer-name "my_name" --query "LoadBalancerDescriptions[].{ID:LoadBalancerName,InstanceId:Instances[].InstanceId}[].{ELB:ID,InstanceId:InstanceId[]}" --output=json
結果:
[
{
"ELB": "my_name",
"InstanceId": [
"i-02ff5f72",
"i-09e46743"
]
}
]
INSTANCEID を実際のインスタンス ID に置き換えます
aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[?InstanceId=='INSTANCEID'].InstanceId}[*].{ID:ID,InstanceId:InstanceId[0]}" --output=text | grep INSTANCEID | awk '{print $1}'
node.js では、 を使用してこれを行うことができますaws-sdk
。
var AWS = require('aws-sdk')
var options = {
accessKeyId: 'accessKeyId',
secretAccessKey: 'secretAccessKey',
region: 'region'
}
var elb = new AWS.ELB(options)
elb.describeLoadBalancers({LoadBalancerNames: ['elbName']}, function(err, data) {
if (err) {
console.log('err: ', err)
}
else {
console.log('data: ', data.LoadBalancerDescriptions)
}
})
data.LoadBalancerDescriptions
は配列であり、配列内の各要素はInstances
、インスタンス ID を持つプロパティを持つオブジェクトです。
最初elb-describe-lbs
に、ロード バランサーとその名前のリストを取得します。
次にelb-describe-instance-health <LB_NAME>
、そのロード バランサーの背後にあるインスタンスのリストを取得します。LB_NAME は、 の出力の 2 列目の値ですelb-describe-lbs
。
いくつかの bash パイプで AWS コマンドライン ツールを使用できます。
elb-describe-instance-health loadbalancer_name --region eu-west-1 | awk '{ print $2 }' | xargs ec2-describe-instances --region eu-west-1 | grep ^INSTANCE | awk '{ print $4 }'
これにより、ELB にアタッチされたすべてのインスタンスのパブリック DNS 名が得られます。awk 列をそれぞれ変更して、他の詳細を取得できます。