如何检查AWS实例是否真的可用
How to check if AWS instance is really available
我正在从代码开始新的 AWS 实例(Windows):
RunInstancesResponse launchResponse = ec2Client.RunInstances(launchRequest);
然后我请求它的状态:
var instanceRequest = new DescribeInstancesRequest();
var response = ec2Client.DescribeInstances(instanceRequest);
当状态为 16/运行 我正在尝试连接到此实例,但它失败了。稍后可以连接。
在 AWS 控制台中,我看到 'Status Checks' 在图像获得状态 'Running' 时开始 运行 我认为当 'Status Checks' 完成时图像变得真正可用。
关于运行状态,我同意Mark B。运行状态不保证OS已经完成启动,用户数据已经完成运行,您生成的密码可用等。检查状态可能 巧合 更适合您,因为默认情况下它只检查 运行 个实例,但是好处可能只是巧合,因为这些检查同样不会检查您可能感兴趣的实例上的许多内部操作。
要查看 status checks,您需要使用不同的 API:
描述实例状态:
响应:DescribeInstanceStatusResponse
- InstanceStatus 对象:InstanceStatus
简单示例:
using (IAmazonEC2 client = new AmazonEC2Client())
{
string instanceId = "i-abcd1234";
DescribeInstanceStatusResponse response = client.DescribeInstanceStatus(
new DescribeInstanceStatusRequest
{
InstanceIds = new List<string> { instanceId }
});
InstanceStatus status = response?.InstanceStatuses.FirstOrDefault(
x => x.InstanceId == instanceId
);
if (status != null)
{
// Perform your checks on InstanceStatus here
}
}
其他一些替代想法:
同意 Anthony 的观点 - 不要依赖 API 的地位。
你说:
"I'm trying to connect to this instance, but it fails. Later it is
possible to connect"
为什么不在您的代码中这样做?
while (true)
{
try
{
// try and connect to whatever you're waiting for on your instance(s)
ConnectToInstance("instance IP address goes here");
return;
}
catch (Exception e)
{
Console.WriteLine("Still waiting to connect: " + e)
Thread.Sleep(5000);
}
}
可能会添加最长等待时间。那么您就不会依赖 AWS 状态或用户数据或 windows 服务启动延迟等
我正在从代码开始新的 AWS 实例(Windows):
RunInstancesResponse launchResponse = ec2Client.RunInstances(launchRequest);
然后我请求它的状态:
var instanceRequest = new DescribeInstancesRequest();
var response = ec2Client.DescribeInstances(instanceRequest);
当状态为 16/运行 我正在尝试连接到此实例,但它失败了。稍后可以连接。 在 AWS 控制台中,我看到 'Status Checks' 在图像获得状态 'Running' 时开始 运行 我认为当 'Status Checks' 完成时图像变得真正可用。
关于运行状态,我同意Mark B。运行状态不保证OS已经完成启动,用户数据已经完成运行,您生成的密码可用等。检查状态可能 巧合 更适合您,因为默认情况下它只检查 运行 个实例,但是好处可能只是巧合,因为这些检查同样不会检查您可能感兴趣的实例上的许多内部操作。
要查看 status checks,您需要使用不同的 API:
描述实例状态:
响应:DescribeInstanceStatusResponse
- InstanceStatus 对象:InstanceStatus
简单示例:
using (IAmazonEC2 client = new AmazonEC2Client())
{
string instanceId = "i-abcd1234";
DescribeInstanceStatusResponse response = client.DescribeInstanceStatus(
new DescribeInstanceStatusRequest
{
InstanceIds = new List<string> { instanceId }
});
InstanceStatus status = response?.InstanceStatuses.FirstOrDefault(
x => x.InstanceId == instanceId
);
if (status != null)
{
// Perform your checks on InstanceStatus here
}
}
其他一些替代想法:
同意 Anthony 的观点 - 不要依赖 API 的地位。 你说:
"I'm trying to connect to this instance, but it fails. Later it is possible to connect"
为什么不在您的代码中这样做?
while (true)
{
try
{
// try and connect to whatever you're waiting for on your instance(s)
ConnectToInstance("instance IP address goes here");
return;
}
catch (Exception e)
{
Console.WriteLine("Still waiting to connect: " + e)
Thread.Sleep(5000);
}
}
可能会添加最长等待时间。那么您就不会依赖 AWS 状态或用户数据或 windows 服务启动延迟等