php - 带有 PHP SDK 的 AWS EC2 - 等到实例具有公共(public) DNS

我想创建一个 ec2 实例,并使用“Waiter”功能等待实例具有公共(public) DNS 名称 - 这可能吗?

这是我的代码:

$ec2 = new Aws\Ec2\Ec2Client([credentials]);

$result = $ec2->runInstances(array(
                'DryRun' => false,
                // ImageId is required
                'ImageId' => '[removed]',
                // MinCount is required
                'MinCount' => 1,
                // MaxCount is required
                'MaxCount' => 1,
                'KeyName' => '[removed]',
                'SecurityGroupIds' => array('[removed]'),

                'InstanceType' => 'r3.4xlarge',

                'Placement' => array(
                    'AvailabilityZone' => 'us-east-1a',

                ),
                'EbsOptimized' => false,
                'Monitoring' => array(
                    // Enabled is required
                    'Enabled' => true,
                ),

            ));

$arr = $result->toArray();

$instanceId = $arr['Instances'][0]['InstanceId'];

echo 'created instance '.$instanceId."\n";

$ec2->waitUntil('InstanceRunning', ['InstanceIds' => array($instanceId)]);          

$result = $ec2->describeInstances(array(
                'InstanceIds' => array($instanceId),
            ));
$dnsName = current($result->getPath('Reservations/*/Instances/*/PublicDnsName'));

实例创建得很好,但最后一行失败了,因为实例没有公共(public) dns 名称,因为实例在具有 dns 名称之前被视为“正在运行”。有没有我可以用来等待它有 dns 名称的服务员?

这是服务员: http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2015-04-15.html#waiters

最佳答案

没有获取公共(public) DNS 名称的等待函数。我能想到的 2 个选项:

1.) 使用sleep 或某种while 循环/sleep 方法,直到您可以获得PublicDnsName。这有点 hacky,会阻塞您的线程。

2.) 一种更优雅的方法是使用 Queuing 使整个过程异步, 或 PHP implementation of asynchronous .

关于php - 带有 PHP SDK 的 AWS EC2 - 等到实例具有公共(public) DNS 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565440/

相关文章:

hibernate - Spring-data/Hibernate 不能正确处理空值

php - 使用 Jsonb 绑定(bind)参数?|使用 Postgres 的 Doctrine2

sql - 如何克服 `PERCENTILE_CONT` 参数应为常量的限制?

r - 如何在 R 中分离数据集

c# - 在基于 Web 的架构上使用 POCO、DTO 和 ViewModel

c# - Visual Studio : how to use scripts to "build

python - 通过 Mininet 网络发送 "random"流量

algorithm - 生成填字游戏的高效算法(纽约时报的风格)

asp.net-mvc-4 - ModelState.IsValid == false,尽管插入了所

python - 在 Matplotlib 和 OSX 中使用数学模式和下标时出现错误偏移