2017-02-14 1 views
0

내가 자바 스크립트 비교적 새로운 오전, 그래서 이것은 명백한 질문 만약 내가 사과의 AWS ec2.describeInstances. 그게 내가 그래서 여기에 다른 게시물을 검토 한 후 답을 찾아 간다하지 않은 말했다 : 나는 describeInstances를 사용하여 내 EC2 인스턴스에 대한 AWS에서 특정 정보를 추출하기 위해 노력하고추출 데이터 중첩 된 객체에서 - Node.js를

. "이름": 특히, 나는 InstanceIds의 목록을 제공하고 결과 객체에서 키를 사용하여 태그의 값을 추출 할 수 있어야합니다. 여기에 기본 코드는 다음과 같습니다

// Load the SDK for JavaScript 
 
var AWS = require('aws-sdk'); 
 

 
// Load credentials and set region from JSON file 
 
AWS.config.loadFromPath('./.aws/config.json'); 
 

 
// Create EC2 service object 
 
var ec2 = new AWS.EC2({apiVersion: '2016-11-15'}); 
 

 
var params = { 
 
    DryRun: false, 
 
    InstanceIds: ['i-0be50217a4028a044', 'i-08b83c1c428e9a1d2'] 
 
}; 
 

 
ec2.describeInstances(params, function(err, data) { 
 
    if (err) { 
 
    console.log("Error", err.stack); 
 
    } else { 
 
    console.log("Success", JSON.stringify(data)); 
 
    } 
 
});

이 코드를 실행하면, 대형, 털이, 중첩 된 객체가 돌려 주어집니다. 이것의 JSON.stringify() 버전은 여기에 표시됩니다 : 이것은 내가 필요로하거나 원하는 것보다 더 많은 방법 정보가

{ 
 
\t "Reservations": [{ 
 
\t \t "ReservationId": "r-04e32387e546387ba", 
 
\t \t "OwnerId": "543800113692", 
 
\t \t "Groups": [], 
 
\t \t "Instances": [{ 
 
\t \t \t "InstanceId": "i-08b83c1c428e9a1d2", 
 
\t \t \t "ImageId": "ami-8aa998ea", 
 
\t \t \t "State": { 
 
\t \t \t \t "Code": 16, 
 
\t \t \t \t "Name": "running" 
 
\t \t \t }, 
 
\t \t \t "PrivateDnsName": "ip-10-77-113-210.us-west-2.compute.internal", 
 
\t \t \t "PublicDnsName": "ec2-35-165-200-222.us-west-2.compute.amazonaws.com", 
 
\t \t \t "StateTransitionReason": "", 
 
\t \t \t "KeyName": "Security1", 
 
\t \t \t "AmiLaunchIndex": 0, 
 
\t \t \t "ProductCodes": [], 
 
\t \t \t "InstanceType": "t2.micro", 
 
\t \t \t "LaunchTime": "2017-02-14T14:59:11.000Z", 
 
\t \t \t "Placement": { 
 
\t \t \t \t "AvailabilityZone": "us-west-2b", 
 
\t \t \t \t "GroupName": "", 
 
\t \t \t \t "Tenancy": "default" 
 
\t \t \t }, 
 
\t \t \t "Monitoring": { 
 
\t \t \t \t "State": "disabled" 
 
\t \t \t }, 
 
\t \t \t "SubnetId": "subnet-228da755", 
 
\t \t \t "VpcId": "vpc-af0f0dca", 
 
\t \t \t "PrivateIpAddress": "10.77.113.210", 
 
\t \t \t "PublicIpAddress": "35.165.200.222", 
 
\t \t \t "Architecture": "x86_64", 
 
\t \t \t "RootDeviceType": "ebs", 
 
\t \t \t "RootDeviceName": "/dev/sda1", 
 
\t \t \t "BlockDeviceMappings": [{ 
 
\t \t \t \t "DeviceName": "/dev/sda1", 
 
\t \t \t \t "Ebs": { 
 
\t \t \t \t \t "VolumeId": "vol-00e55d6bf114bfcaa0", 
 
\t \t \t \t \t "Status": "attached", 
 
\t \t \t \t \t "AttachTime": "2017-02-09T15:37:34.000Z", 
 
\t \t \t \t \t "DeleteOnTermination": true 
 
\t \t \t \t } 
 
\t \t \t }], 
 
\t \t \t "VirtualizationType": "hvm", 
 
\t \t \t "ClientToken": "vOiiS1486654656072", 
 
\t \t \t "Tags": [{ 
 
\t \t \t \t "Key": "Name", 
 
\t \t \t \t "Value": "Fenris" 
 
\t \t \t }], 
 
\t \t \t "SecurityGroups": [{ 
 
\t \t \t \t "GroupName": "launch-wizard-2", 
 
\t \t \t \t "GroupId": "sg-2312072c" 
 
\t \t \t }], 
 
\t \t \t "SourceDestCheck": true, 
 
\t \t \t "Hypervisor": "xen", 
 
\t \t \t "EbsOptimized": false 
 
\t \t }] 
 
\t }, { 
 
\t \t "ReservationId": "r-0bbcb12e5c1162c23", 
 
\t \t "OwnerId": "543800113692", 
 
\t \t "Groups": [], 
 
\t \t "Instances": [{ 
 
\t \t \t "InstanceId": "i-0be50217a40028a044", 
 
\t \t \t "ImageId": "ami-8ba011ea", 
 
\t \t \t "State": { 
 
\t \t \t \t "Code": 80, 
 
\t \t \t \t "Name": "stopped" 
 
\t \t \t }, 
 
\t \t \t "PrivateDnsName": "ip-10-77-118-17.us-west-2.compute.internal", 
 
\t \t \t "PublicDnsName": "", 
 
\t \t \t "StateTransitionReason": "User initiated (2016-12-05 16:49:45 GMT)", 
 
\t \t \t "KeyName": "Security3", 
 
\t \t \t "AmiLaunchIndex": 0, 
 
\t \t \t "ProductCodes": [], 
 
\t \t \t "InstanceType": "t2.medium", 
 
\t \t \t "LaunchTime": "2016-12-02T15:50:08.000Z", 
 
\t \t \t "Placement": { 
 
\t \t \t \t "AvailabilityZone": "us-west-2b", 
 
\t \t \t \t "GroupName": "", 
 
\t \t \t \t "Tenancy": "default" 
 
\t \t \t }, 
 
\t \t \t "Monitoring": { 
 
\t \t \t \t "State": "disabled" 
 
\t \t \t }, 
 
\t \t \t "SubnetId": "subnet-228da700", 
 
\t \t \t "VpcId": "vpc-af0f1ccb", 
 
\t \t \t "PrivateIpAddress": "10.77.118.17", 
 
\t \t \t "StateReason": { 
 
\t \t \t \t "Code": "Client.UserInitiatedShutdown", 
 
\t \t \t \t "Message": "Client.UserInitiatedShutdown: User initiated shutdown" 
 
\t \t \t }, 
 
\t \t \t "Architecture": "x86_64", 
 
\t \t \t "RootDeviceType": "ebs", 
 
\t \t \t "RootDeviceName": "/dev/sda1", 
 
\t \t \t "BlockDeviceMappings": [{ 
 
\t \t \t \t "DeviceName": "/dev/sda1", 
 
\t \t \t \t "Ebs": { 
 
\t \t \t \t \t "VolumeId": "vol-1c211ac8", 
 
\t \t \t \t \t "Status": "attached", 
 
\t \t \t \t \t "AttachTime": "2016-11-22T01:54:52.000Z", 
 
\t \t \t \t \t "DeleteOnTermination": true 
 
\t \t \t \t } 
 
\t \t \t }], 
 
\t \t \t "VirtualizationType": "hvm", 
 
\t \t \t "ClientToken": "RQbhg1479762230132", 
 
\t \t \t "Tags": [{ 
 
\t \t \t \t "Key": "Name", 
 
\t \t \t \t "Value": "Heimdall" 
 
\t \t \t }, { 
 
\t \t \t \t "Key": "Type", 
 
\t \t \t \t "Value": "Product Dev" 
 
\t \t \t }], 
 
\t \t \t "SecurityGroups": [{ 
 
\t \t \t \t "GroupName": "LinuxAPIdev", 
 
\t \t \t \t "GroupId": "sg-5ea11777" 
 
\t \t \t }], 
 
\t \t \t "SourceDestCheck": true, 
 
\t \t \t "Hypervisor": "xen", 
 
\t \t \t "EbsOptimized": false 
 
\t \t }] 
 
\t }] 
 
}

. 나는 Reservations.Instances.Tags.Name 키에서 Reservations.Instances.Tags.Value의 값을 얻을 수있는 방법을 찾고 싶어요.

난 그냥 그런 식으로 작성하는 일 것이라고 생각했다.

Success undefined

무엇 오전 :

// Load the SDK for JavaScript 
 
var AWS = require('aws-sdk'); 
 

 
// Load credentials and set region from JSON file 
 
AWS.config.loadFromPath('./.aws/config.json'); 
 

 
// Create EC2 service object 
 
var ec2 = new AWS.EC2({apiVersion: '2016-11-15'}); 
 

 
var params = { 
 
    DryRun: false, 
 
    InstanceIds: ['i-0be5987a41191a044', 'i-08b83c3fc28e9a1d2'] 
 
}; 
 

 
// call EC2 to retrieve policy for selected bucket 
 
ec2.describeInstances(params, function(err, data) { 
 
    if (err) { 
 
    console.log("Error", err.stack); 
 
    } else { 
 
    console.log("Success", JSON.stringify(data.Reservations.Instances)); 
 
    } 
 
});

이 결과 :하지만 이상하게도, 나는 Reservations.Instances는 모든 객체에 액세스 할 수없는 것 내가 잘못하고있어? 인스턴스 내에서 낮은 수준의 데이터에 액세스하려면 어떻게합니까? 그것은 분명히 거기에 ... 그것은 JSON.stringify()에서 나타나지만 분명히 그것을 추출하는 올바른 프로토콜을 가지고 있지 않습니다.

미리 도움을 주셔서 감사합니다.

(때문에 AWS 자격 증명 PS, 당신은 약간의 변경없이 내 코드를 실행할 수 없습니다. 당신은 당신의 자신의 자격 증명을 참조해야하고, 자신의 EC2 인스턴스에서 InstanceIds 수 있습니다.)

답변

2

Reservations , InstancesTags 모든 어레이의 '있다는 이유 :

Reservations[0].Instances[0].Tags[0].Value 
// value of 1ˢᵗ tag of 1ˢᵗ instance of 1ˢᵗ reservation 

과 내에 있지

Reservations.Instances.Tags.Value 
+0

Whaddaya 알고있다. 완벽하게 작동합니다. 고맙습니다. – rucker

+0

당신은 환영합니다. –

1

당신의 describeInstances() 메소드, 당신은 단순히 당신은 어쨌든, 필요한 경우, 함수를 만들 수있는 객체 구조가 알려진 경우 태그 값을 반환

// for InstanceId : "i-08b83c1c428e9a1d2" 
data.Reservations[0].Instances[0].Tags[0].Value; 
// and for InstanceId : "i-0be50217a40028a044" 
data.Reservations[1].Instances[0].Tags[0].Value; 

를 사용할 수 있습니다.

관련 문제