Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何验证从新创建的AMI启动的EC2实例的状态?_Python_Amazon Web Services_Amazon Ec2_Boto3 - Fatal编程技术网

Python 如何验证从新创建的AMI启动的EC2实例的状态?

Python 如何验证从新创建的AMI启动的EC2实例的状态?,python,amazon-web-services,amazon-ec2,boto3,Python,Amazon Web Services,Amazon Ec2,Boto3,如何使用boto3检查EC2实例是否已启动并正在运行/某个特定服务是否已启动或关闭。实例是从新创建的AMI创建的 您可以使用以下各项: 将instance.image\u id与所需图像的id进行比较 若要检查实例是否已在运行,请使用watter。检查EC2实例是否已启动: import sys import boto3 ec2 = boto3.client('ec2') if sys.argv[1] == 'ON': response = ec2.monitor_instances

如何使用boto3检查EC2实例是否已启动并正在运行/某个特定服务是否已启动或关闭。实例是从新创建的AMI创建的

您可以使用以下各项:

instance.image\u id
与所需图像的id进行比较


若要检查实例是否已在运行,请使用watter。

检查EC2实例是否已启动:

import sys
import boto3


ec2 = boto3.client('ec2')
if sys.argv[1] == 'ON':
    response = ec2.monitor_instances(InstanceIds=['INSTANCE_ID'])
else:
    response = ec2.unmonitor_instances(InstanceIds=['INSTANCE_ID'])
print(response)
要检查实例的运行状况,请执行以下操作:

# Boto 2.x
for status in ec2_connection.get_all_instance_statuses():
    print(status)

# Boto 3
for status in ec2.meta.client.describe_instance_status()['InstanceStatuses']:
    print(status)
有关更多详细信息,请参阅:

更新:(检查EC2中的特定服务是否正在运行)

  • 您可以将自定义指标以“心跳”的形式发布到CloudWatch
  • 在服务器上通过cron运行一个小脚本,检查进程列表以查看my_服务是否正在运行,如果正在运行,请调用CloudWatch
  • 度量可以简单到将数字“1”推到CloudWatch中的自定义度量
  • 设置CloudWatch警报,如果指标的平均值低于1,则触发该警报
  • 使报警周期>=cron运行的周期,例如,cron每5分钟运行一次,如果发现两个5分钟周期的平均值低于1,则触发报警
  • 确保您还可以处理度量未发布的情况(例如cron无法运行或整个机器死机)。如果缺少度量,您可能需要设置警报。(见此处:)
  • 请注意,定制指标将给您的AWS账单增加50美分的额外成本(对于一个指标来说不是什么大问题,但如果您想推广数百/数千个指标,等式会发生巨大变化,也就是说,很高兴知道它并非如您所期望的那样免费)
  • 您必须在AWS的SNS(简单通知服务)服务中创建一个主题。在这里,您必须在SNS下定义您的电子邮件,您将在其中收到通知
  • 参考资料:


  • 当您特别询问boto3时,有一种方法可以确保某些服务以更自然的方式处于就绪状态

    将实例的创建移动到CloudFormation模板并定义
    CreationPolicy
    ,如AWS博文中所述:


    TL;DR:当实例启动时,它将运行一个脚本,该脚本将检查您需要的任何服务是否正常工作,然后向CloudFormation发出“所有系统都正常”的信号。如果没有及时发出信号,实例将被标记为
    CREATE\u FAILED
    并被删除。

    如何运行脚本来检查服务是否在实例中启动???@prejithprasanna没有特定于python的方法来使用bot3检查此情况。您必须使用AWS Cloudwatch进行设置。是否已更新答案?您所说的“一项特定服务是向上还是向下”是什么意思?这是什么服务?如果这是一台普通计算机(不在EC2上),您将如何检查此服务是启动还是关闭?如果我运行脚本,它将返回Apache服务正在运行、失败、关闭等。否则,我希望通过ssh连接到新启动的实例并发送主题为“成功登录”的邮件。由于Apache是一台web服务器,您可以尝试转到实例提供的页面。当操作系统和Apache启动时,它不会提供内容。然后,一旦Apache运行,它将能够为请求的web页面提供服务。要做到这一点,您需要编写自己的软件。或者,如果实例位于负载平衡目标组中,则负载平衡服务会在向实例交付流量之前为您执行此类检查。
    # Boto 2.x
    for status in ec2_connection.get_all_instance_statuses():
        print(status)
    
    # Boto 3
    for status in ec2.meta.client.describe_instance_status()['InstanceStatuses']:
        print(status)