Cách lấy danh sách các phiên bản Amazon EC2 khớp với một số bộ lọc bằng cách sử dụng AWS SDK for PHP 2?Làm thế nào để có được danh sách các phiên bản EC2 với Amazon PHP SDK 2?
Trả lời
Sử dụng phương pháp DescribeInstances cho việc này. Chúng ta hãy xem xét điều này với một số chi tiết.
Bạn cần nhận dụ Ec2Client trước. Cách đơn giản nhất để khởi tạo cho khách hàng:
$config = array();
$config['key'] = 'key';
$config['secret'] = 'secret';
$config['region'] = 'us-east-1';
$config['version'] = 'latest'; // Or Specified
$ec2Client = \Aws\Ec2\Ec2Client::factory($config);
Và sau đó chỉ cần gọi DescribeInstances
phương pháp.
$result = $ec2Client->DescribeInstances(array(
'Filters' => array(
array('Name' => 'instance-type', 'Values' => array('m1.small')),
)
));
Bạn có thể nhận danh sách các bộ lọc có sẵn trên trang phương thức API của Amazon DescribeInstances.
Nhưng chờ đợi, điều gì có thể khó khăn ở đây?
- Lưu ý tên thông số
Filters
. Trong API nó được gọi làFilter
- Parameter
Values
được gọi là khác nhau từ API và nó là một mảng
Vâng, đây là tất cả được mô tả trong tài liệu. Nhưng nếu bạn nhìn vào một số Old API usage samples bạn có thể thấy rằng cú pháp đã thay đổi và điều này có thể thực sự khó để nhận thấy những gì phải được cập nhật trong các ví dụ đó để làm cho mọi thứ hoạt động.
Và để hoàn thành ví dụ, hãy để tôi hiển thị một số kết quả đầu ra đơn giản.
$reservations = $result['Reservations'];
foreach ($reservations as $reservation) {
$instances = $reservation['Instances'];
foreach ($instances as $instance) {
$instanceName = '';
foreach ($instance['Tags'] as $tag) {
if ($tag['Key'] == 'Name') {
$instanceName = $tag['Value'];
}
}
echo 'Instance Name: ' . $instanceName . PHP_EOL;
echo '---> State: ' . $instance['State']['Name'] . PHP_EOL;
echo '---> Instance ID: ' . $instance['InstanceId'] . PHP_EOL;
echo '---> Image ID: ' . $instance['ImageId'] . PHP_EOL;
echo '---> Private Dns Name: ' . $instance['PrivateDnsName'] . PHP_EOL;
echo '---> Instance Type: ' . $instance['InstanceType'] . PHP_EOL;
echo '---> Security Group: ' . $instance['SecurityGroups'][0]['GroupName'] . PHP_EOL;
}
}
câu trả lời của Victor là rất tốt, nhưng nó đã không làm việc cho tôi vì tôi đã mất tích một dòng:
$reservations=$result->toArray();
Amazon PHP SDK 2 trả về đối tượng tật ham ăn mẫu cho nhiều thứ (bao gồm này) và chúng cần được chuyển đổi thành mảng trước khi foreach sẽ hoạt động. Xem thêm thông tin ở đây:
http://guzzlephp.org/api/class-Guzzle.Service.Resource.Model.html
Cảm ơn bạn đã bình luận. Tôi đã cập nhật câu trả lời của mình. Mô hình Guzzle có thể được truy cập dưới dạng mảng như thế này '$ reservation = $ result ['Reservations'];' hoặc với 'get()' method '$ reservations = $ result-> get ('Reservation');'. Trong cả hai trường hợp, bạn sẽ nhận được một mảng là kết quả. Cấu trúc của kết quả được mô tả trong API. Trân trọng, Victor –
đó là sự giúp đỡ tuyệt vời Victor, hey voidstin, mà không được yêu cầu trong trường hợp của tôi [$ đặt = $ result-> toArray();]
require "aws.phar";
use Aws\Ec2\Ec2Client;
use Aws\Common\Enum\Region;
$aws = Ec2Client::factory(array(
'key' => 'XXXXXX', //Your key and secret key are found at https://portal.aws.amazon.com/gp/aws/securityCredentials
'secret' => 'XXXXXX',
'region' => 'XXXXXX' //This is the server cluster we are connecting to. US_EAST_1 is Northern Virginia. US_WEST_1 is Northern California. US_WEST_2 is Oregon
));
$result = $aws->DescribeInstances();
$reservations = $result['Reservations'];
foreach ($reservations as $reservation) {
$instances = $reservation['Instances'];
foreach ($instances as $instance) {
$instanceName = '';
foreach ($instance['Tags'] as $tag) {
if ($tag['Key'] == 'Name') {
$instanceName = $tag['Value'];
}
}
echo 'Instance Name: ' . $instanceName . PHP_EOL;
echo '<br>';
echo '---> State: ' . $instance['State']['Name'] . PHP_EOL;
echo '<br>';
echo '---> Instance ID: ' . $instance['InstanceId'] . PHP_EOL;
echo '<br>';
echo '---> Image ID: ' . $instance['ImageId'] . PHP_EOL;
echo '<br>';
echo '---> Private Dns Name: ' . $instance['PrivateDnsName'] . PHP_EOL;
echo '<br>';
echo '---> Instance Type: ' . $instance['InstanceType'] . PHP_EOL;
echo '<br>';
echo '---> Security Group: ' . $instance['SecurityGroups'][0]['GroupName'] . PHP_EOL;
echo '<br>';
echo '-----------------------------------------------------------------------------------------------------';
echo '<br>';
echo '<br>';
}
}
với mục đích để có được danh sách các PublicDnsName
bạn có thể sử dụng mã này:
use Aws\Ec2\Ec2Client;
$ec2 = Ec2Client::factory($config);
$args = [
'Filters' => [
['Name' => 'tag:Name', 'Values' => ['*{{your-tag}}*']],
]
];
$data = $ec2->DescribeInstances($args)->toArray();
$instances = [];
array_walk_recursive($data, function ($value, $key) use (&$instances) {
if ($key === 'PublicDnsName') {
$instances[$value] = true;
}
});
var_export($instances);
bạn sẽ nhận được một cái gì đó như thế này:
array (
'ec2-*-*-*-*.eu-west-1.compute.amazonaws.com' => true,
'ec2-*-*-*-*.eu-west-1.compute.amazonaws.com' => true,
'ec2-*-*-*-*.eu-west-1.compute.amazonaws.com' => true,
'ec2-*-*-*-*.eu-west-1.compute.amazonaws.com' => true,
'ec2-*-*-*-*.eu-west-1.compute.amazonaws.com' => true,
'ec2-*-*-*-*.eu-west-1.compute.amazonaws.com' => true,
)
- 1. Mã hóa chữ ký của Amazon ec2 API phiên bản 2 với C#
- 2. Làm thế nào để tăng ulimit trên phiên bản Amazon EC2?
- 3. Làm thế nào để có được phiên bản PHP?
- 4. cách bắt đầu và dừng các phiên bản ec2 bằng cách sử dụng php aws sdk
- 5. Amazon EC2 autoscaling trường hợp với các IP đàn hồi
- 6. Ping các phiên bản EC2
- 7. Làm thế nào để cấu hình PHP + Apache trên Amazon EC2?
- 8. Dữ liệu nào được lưu trữ trong Bộ nhớ tạm thời của phiên bản Amazon EC2?
- 9. Làm thế nào tôi có thể nâng cấp phiên bản 32 bit của Amazon EC2 EBS của mình lên phiên bản 64 bit?
- 10. Làm cách nào để cài đặt bản cập nhật bảo mật trên phiên bản Amazon Linux AMI EC2?
- 11. Các phiên bản API EC2 và Windows của Amazon - bất kỳ cách nào để chuyển nhượng ký tự ổ đĩa?
- 12. Làm thế nào để thiết lập cụm ElasticSearch với tự động mở rộng trên Amazon EC2?
- 13. Amazon EC2 so với Amazon EMR
- 14. Amazon EC2 có hoặc không có EBS?
- 15. Làm cách nào để tải xuống tệp với php và sdk Amazon S3?
- 16. Làm thế nào để cài đặt GraphicsMagick với hỗ trợ PNG trên Amazon EC2?
- 17. làm thế nào để có được các mô hình điện thoại Android, phiên bản, chi tiết sdk?
- 18. Làm thế nào để Ứng dụng iPhone tương thích với nhiều phiên bản SDK (firmware)
- 19. Amazon EC2 vs PiCloud
- 20. Mở cổng HTTP trên Amazon EC2
- 21. python xóa các bản sao khỏi 2 danh sách
- 22. Làm thế nào tôi có thể kích hoạt quyền truy cập SSH gốc trong một bản sao EC2 của Amazon?
- 23. làm thế nào để có được danh sách các mã hóa được hỗ trợ bởi thư viện iconv trong php?
- 24. Làm thế nào để đạt được danh sách list.list để sao chép danh sách trong smooks
- 25. Làm thế nào để có các danh sách được sắp xếp theo thứ tự chính xác
- 26. Làm thế nào để tôi có được danh sách các Process Name đang chạy, trong VB.NET?
- 27. Kiến trúc của một ứng dụng PHP trên Amazon EC2
- 28. Làm thế nào để có được một danh sách tắt tất cả các phiên máy chủ trong laravel?
- 29. Cách kích hoạt các phiên bản EC2 và tải lên/chạy tập lệnh khởi động trên mỗi phiên bản?
- 30. Làm thế nào để lập trình được các dns công khai của một cá thể?
Tôi đã thử ở trên và nhận "Lỗi nghiêm trọng về PHP: Lớp 'Aws \\ Ec2 \\ Ec2Client' không tìm thấy trong /var/www/functions/ec2_instances.php trên dòng 9" .. Dòng 9 là nhà máy $ ec2Client = \ Aws \ Ec2 \ Ec2Client :: ($ config); bit. Tôi đã thực hiện: bao gồm "aws/sdk.class.php"; trên dòng đầu tiên, và sdk nằm trong thư mục con "aws". Tôi đã thử tiền tố với \ aws \ quá và không hoạt động. Lý tưởng nhất là thư mục sdk sẽ nằm ngoài dự án, nhưng tôi đã chuyển nó ở đó nghĩ rằng đó là một vấn đề đường dẫn. Bất kỳ suy nghĩ về những gì để thay đổi? Gist đầy đủ: https://gist.github.com/nodeGarden/db707771faf12f7db47a – mondo
@mondo Xin chào. Tôi nghĩ bạn đang sử dụng [AWS SDK phiên bản 1] (https: // github.com/amazonwebservices/aws-sdk-for-php) Ví dụ về câu hỏi và mã của tôi là dành cho [AWS SDK phiên bản 2] (https://github.com/aws/aws-sdk-php) Tôi đề nghị [cài đặt AWS bằng cách sử dụng nhà soạn nhạc ] (http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/installation.html). Trân trọng, Victor. –
Nó thực sự là v1. Tôi đã đi với Composer cài đặt, và hoạt động ngay bây giờ. Nó đã được in ra cho một tốt 5 phút bây giờ, và cuối cùng đã bị rơi Chrome. Câu trả lời có thực sự lớn đến thế không? Hay tôi có thể bị mắc kẹt trong một số vòng lặp vô hạn? ... [sửa] Có vẻ như print_r là thủ phạm. Took ra và nó hoạt động. Chỉ in một bản, nhưng tôi chắc rằng tôi có thể sửa nó. – mondo