gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:54:10 26 4
gpt4 key购买 nike

我想创建一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com