Я пытаюсь написать Perl-скрипт, который будет работать на хосте Centos 6.Этот скрипт будет запускать команду оболочки, которая запрашивает наш интерфейс AWS следующим образом:
my $json = `aws ec2 describe-instances`;
Этот запрос вернет объект JSON, но я верю, что моя проблема в том, что он на самом деле хранится в виде строки в $ output ина самом деле не в объекте JSON.
Я пытаюсь следующий код:
# Get each instance
my $json = `aws ec2 describe-instances`;
# Decode AWS json result
my $decoded = decode_json $json;
# Find reference type
print "Reference type: " . ref $decoded,"\n";
# Loop through each EC2 instance
print $decoded -> {Reservations} . "\n";
Когда я выполняю этот код, я получаю следующее сообщение:
Reference type: HASH
ARRAY(0xa774b0)
Можеткто-нибудь поможет мне с этим?Я гуглил и возился с этим уже целый день: (
Ниже приведен пример строки, которая хранится в $ output, хотя в реальном выводе будет несколько экземпляров:
{
"Reservations": [
{
"OwnerId": "82XXXXXXX043",
"ReservationId": "r-0XXXXXXXXXXX",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "XXXXX"
},
"PublicDnsName": "XXX",
"RootDeviceType": "XXXXXXX",
"State": {
"Code": XXX,
"Name": "stopped"
},
"EbsOptimized": XXXX,
"LaunchTime": "XXXXXXXXXX",
"PrivateIpAddress": "XXXXXXXXXX",
"ProductCodes": [],
"VpcId": "XXXXXXXXXX",
"StateTransitionReason": "UXXXXXXXXXX",
"InstanceId": "XXXXXXXXXX",
"ImageId": "XXXXXXXXXX",
"PrivateDnsName": "XXXXXXXXXX",
"KeyName": "XXXXXXXXXX",
"SecurityGroups": [
{
"GroupName": "XXXXXXXXXX",
"GroupId": "XXXXXXXXXX"
},
{
"GroupName": "XXXXXXXXXX",
"GroupId": "XXXXXXXXXX"
},
{
"GroupName": "XXXXXXXXXX",
"GroupId": "XXXXXXXXXX"
}
],
"ClientToken": "XXXXXXXXXX",
"SubnetId": "XXXXXXXXXX",
"InstanceType": "XXXXXXXXXX",
"NetworkInterfaces": [
{
"Status": "XXXXXXXXXX",
"MacAddress": "XXXXXXXXXX",
"SourceDestCheck": XXXXXXXXXX,
"VpcId": "XXXXXXXXXX",
"Description": "XXXXXXXXXX",
"NetworkInterfaceId": "XXXXXXXXXX",
"PrivateIpAddresses": [
{
"Primary": XXXXXXXXXX,
"PrivateIpAddress": "XXXXXXXXXX"
}
],
"Ipv6Addresses": [],
"Attachment": {
"Status": "XXXXXXXXXX",
"DeviceIndex": 01234,
"DeleteOnTermination": XXXXXXXXXX,
"AttachmentId": "XXXXXXXXXX",
"AttachTime": "XXXXXXXXXX"
},
"Groups": [
{
"GroupName": "XXXXXXXXXX",
"GroupId": "XXXXXXXXXX"
},
{
"GroupName": "XXXXXXXXXX",
"GroupId": "XXXXXXXXXX"
},
{
"GroupName": "XXXXXXXXXX",
"GroupId": "XXXXXXXXXX"
}
],
"SubnetId": "XXXXXXXXXX",
"OwnerId": "XXXXXXXXXX",
"PrivateIpAddress": "XXXXXXXXXX"
}
],
"SourceDestCheck": XXXXXXXXXX,
"Placement": {
"Tenancy": "XXXXXXXXXX",
"GroupName": "XXXXXXXXXX",
"AvailabilityZone": "XXXXXXXXXX"
},
"Hypervisor": "XXXXXXXXXX",
"BlockDeviceMappings": [
{
"DeviceName": "XXXXXXXXXX",
"Ebs": {
"Status": "XXXXXXXXXX",
"DeleteOnTermination": XXXXXXXXXX,
"VolumeId": "XXXXXXXXXX",
"AttachTime": "XXXXXXXXXX"
}
}
],
"Architecture": "XXXXXXXXXX",
"StateReason": {
"Message": "XXXXXXXXXX",
"Code": "XXXXXXXXXX"
},
"IamInstanceProfile": {
"Id": "XXXXXXXXXX",
"Arn": "XXXXXXXXXX"
},
"RootDeviceName": "XXXXXXXXXX",
"VirtualizationType": "XXXXXXXXXX",
"Tags": [
{
"Value": "XXXXXXXXXX",
"Key": "XXXXXXXXXX"
},
{
"Value": "XXXXXXXXXX",
"Key": "XXXXXXXXXX"
},
{
"Value": "XXXXXXXXXX",
"Key": "XXXXXXXXXX"
},
{
"Value": "XXXXXXXXXX",
"Key": "XXXXXXXXXX"
},
{
"Value": "XXXXXXXXXX",
"Key": "XXXXXXXXXX"
},
{
"Value": "XXXXXXXXXX",
"Key": "XXXXXXXXXX"
}
],
"AmiLaunchIndex": XXXXXXXXXX
}
]
}
]
}