我正在尝试设置一个python记录器,以便在实例已设置标签的情况下记录错误时发送错误电子邮件。然后,我很快遇到了不在AWS上的本地开发计算机的问题。有没有简便快捷的方法来检查脚本是否在AWS上运行?

我正在使用以下方式加载实例数据:

import boto.utils
from boto.ec2.connection import EC2Connection
metadata = boto.utils.get_instance_metadata()
conn = EC2Connection()
instance = conn.get_only_instances(instance_ids=metadata['instance-id'])[0]

我当然可以在get_instance_metadata上使用超时,但是现在要让开发人员等待很长时间与在生产中不发送错误电子邮件的可能性之间存在紧张关系。

谁能想到一个不错的解决方案?

最佳答案

AWS实例具有元数据,因此您可以调用元数据服务并获得响应,如果响应有效,则您为@AWS,否则为@AWS。

例如:

import urllib2
meta = 'http://169.254.169.254/latest/meta-data/ami-id'
req = urllib2.Request(meta)
try:
    response = urllib2.urlopen(req).read()
    if 'ami' in response:
        _msg = 'I am in AWS running on {}'.format(response)
    else:
        _msg = 'I am in dev - no AWS AMI'
except Exception as nometa:
    _msg = 'no metadata, not in AWS'

print _msg

这只是一次刺伤-可能会有更好的检查,但是这会让您有感觉,并且可以在您认为合适的情况下进行改进。如果您在本地使用OpenStack或其他云服务,那么您当然会收到元数据响应,因此您必须相应地调整支票...

(如果您正在使用某种启动工具或管理器(例如Chef,Puppet,Homegrown等),也可以使用cloud-init来完成此操作。在盒子上放一个/DEV)

关于python - 检查aws实例上是否正在运行python脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29573081/

10-10 21:16
查看更多