Amazon web services 如何按Boto3中的日期筛选Ec2实例的标记值

Amazon web services 如何按Boto3中的日期筛选Ec2实例的标记值,amazon-web-services,amazon-ec2,aws-lambda,boto3,python-3.7,Amazon Web Services,Amazon Ec2,Aws Lambda,Boto3,Python 3.7,我正在尝试获取具有标记名“ttl”和标记值“比今天旧”的实例。 我们的用户根据将来的日期(yyyy.mm.dd)标记他们的实例,这样脚本就不会在该日期之前自动删除它们。下面的过滤器应该只能获取标记值小于今天日期的实例。有没有一种方法可以根据以下逻辑过滤tage值->获取

我正在尝试获取具有标记名“ttl”和标记值“比今天旧”的实例。 我们的用户根据将来的日期(yyyy.mm.dd)标记他们的实例,这样脚本就不会在该日期之前自动删除它们。下面的过滤器应该只能获取标记值小于今天日期的实例。有没有一种方法可以根据以下逻辑过滤tage值->获取<今天的实例

today = = datetime.today().strftime('%Y.%m.%d')

filters = [{'Name': 'tag:ttl','Values': ['<today']},{'Name': 'instance-state-name','Values': ['running']}]
#设置信息的简单日志记录

logger = logging.getLogger()
logger.setLevel(logging.INFO)
#定义连接

ec2 = boto3.resource('ec2')
def lambda_handler(event, context):

filters = [{'Name': 'tag:ttl','Values': ['<today']},{'Name': 'instance-state-name','Values': ['running']}]

#locate all running instances
RunningInstances = [instance.id for instance in instances]

print (RunningInstances)

#make sure there are actually instances to shut down.

if len(RunningInstances) > 0:

shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
print "shuttingDown"


else:
    print "Nothing to see here"
ec2=boto3.resource('ec2'))
def lambda_处理程序(事件、上下文):

filters=[{'Name':'tag:ttl','Values':['您不能按照指定的方式比较查询中的日期。您需要编写一些代码,比较python脚本中的日期并采取措施。大致如下所示:

导入日期时间
进口boto3
#连接到EC2
ec2=boto3.resource('ec2')
def get_ttl(实例):
对于instance.tags中的标记:
如果标签['Key']中的'ttl':
ttl=标记['Value']
返回ttl
def lambda_处理程序(事件、上下文):
运行_instances=ec2.instances.filter(过滤器=[{
“名称”:“实例状态名称”,
'Values':['running']}])
例如,在运行_实例时:
ttl=get\u ttl(实例)
如果ttl:
如果datetime.date.today()>datetime.datetime.StrTime(ttl,“%Y-%m-%d”).date():
打印('正在停止实例')
其他:
打印(“此处无需操作”)
基本上,它解决了比较日期的问题

[30]中的
:日期字符串='2021-02-22'
在[31]中:datetime.date.today()==datetime.datetime.strptime(datestring,“%Y-%m-%d”).date()
Out[31]:假
在[32]中:datetime.date.today()datetime.datetime.strtime(datestring,“%Y-%m-%d”).date()
Out[33]:假

您无法按照指定的方式比较查询中的日期。您需要在python脚本中编写一些比较日期的代码并采取措施。大致如下所示:

导入日期时间
进口boto3
#连接到EC2
ec2=boto3.resource('ec2')
def get_ttl(实例):
对于instance.tags中的标记:
如果标签['Key']中的'ttl':
ttl=标记['Value']
返回ttl
def lambda_处理程序(事件、上下文):
运行_instances=ec2.instances.filter(过滤器=[{
“名称”:“实例状态名称”,
'Values':['running']}])
例如,在运行_实例时:
ttl=get\u ttl(实例)
如果ttl:
如果datetime.date.today()>datetime.datetime.StrTime(ttl,“%Y-%m-%d”).date():
打印('正在停止实例')
其他:
打印(“此处无需操作”)
基本上,它解决了比较日期的问题

[30]中的
:日期字符串='2021-02-22'
在[31]中:datetime.date.today()==datetime.datetime.strptime(datestring,“%Y-%m-%d”).date()
Out[31]:假
在[32]中:datetime.date.today()datetime.datetime.strtime(datestring,“%Y-%m-%d”).date()
Out[33]:假

谢谢。您的解决方案看起来很好。但是,我在实现解决方案时遇到以下两个错误:1)NameError:name'get\u ttl'未定义2)NameError:name'running\u instances'未定义我想我可以通过定义'running\u instances'来解决第二个错误:(不确定是否正确).running_instances=ec2.instances.filter(过滤器=[{'Name':'instance state Name','Values':['running']}])任何建议,我如何解决错误?@QBits你能通过a分享你的代码吗?我分享的上述代码,只是为了让你走上正确的方向,它可能不起作用,正如我提到的,我没有做太多改变。这是要点。请看一看。@QBits通过示例执行对你的要点进行了评论。奇怪的是,它在我这边抛出了错误。t上面的gist中对错误进行了注释。这就是我所做的:1)我创建了一个lamda函数(负责权限(策略、角色))。2)粘贴到代码中。3)部署了该函数。4)通过选择“aws批提交作业”作为“事件模板”(我不确定是否正确).5)运行测试谢谢。您的解决方案看起来很好。但是,我在实现解决方案时遇到以下两个错误:1)NameError:name'get_ttl'未定义2)NameError:name'running_instances'未定义我想我可以通过定义'running_instances'来解决第二个错误:(不确定是否正确).running_instances=ec2.instances.filter(过滤器=[{'Name':'instance state Name','Values':['running']}])任何建议,我如何解决错误?@QBits你能通过a分享你的代码吗?我分享的上述代码,只是为了让你走上正确的方向,它可能不起作用,正如我提到的,我没有做太多改变。这是要点。请看一看。@QBits通过示例执行对你的要点进行了评论。奇怪的是,它在我这边抛出了错误。t上面的gist中对错误进行了注释。这就是我所做的:1)我创建了一个lamda函数(负责权限(策略、角色))。2)粘贴到代码中。3)部署了该函数。4)通过选择“aws批提交作业”作为事件模板”(我不确定是否正确)。5)运行测试
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):

filters = [{'Name': 'tag:ttl','Values': ['<today']},{'Name': 'instance-state-name','Values': ['running']}]

#locate all running instances
RunningInstances = [instance.id for instance in instances]

print (RunningInstances)

#make sure there are actually instances to shut down.

if len(RunningInstances) > 0:

shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
print "shuttingDown"


else:
    print "Nothing to see here"