Lambda函数基于标记启动EC2实例

时间:2017-08-02 14:08:42

标签: python amazon-web-services amazon-ec2 aws-lambda

我在AWS中创建了一个python Lambda函数,用于根据部署到它们的TAG启动一些EC2实例。它检查实例是否已停止并且仅在它们上运行。

import boto3
import logging
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):
    filters = [{
        'Name': 'tag:STARTUP',
        'Values': ['YES']
    },
    {
        'Name': 'instance-state-name', 
        'Values': ['stopped']
    }]
instances = instances.filter(Filters=filters)
stoppedInstances = [instance.id for instance in instances]
if len(stoppedInstances) > 0:
    startingUp = instances.filter(instances).start()

当我尝试运行它时,我收到以下错误:

START RequestId: XXX Version: $LATEST
filter() takes 1 positional argument but 2 were given: TypeError
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 17, in lambda_handler
    startingUp = ec2.instances.filter(instances).start()
TypeError: filter() takes 1 positional argument but 2 were given

虽然到处都是我看的FILTER变量能够处理多个参数但不知何故我只能使用一个?

我正在使用Python 3.6运行时,我使用与正常工作的其他功能相同的角色来启动服务器(仅基于时间)。

你能告诉我吗?谢谢!

1 个答案:

答案 0 :(得分:2)

这就是@ last line的诀窍!感谢您的评论,我指出了正确的方向:)

startingUp = ec2.instances.filter(InstanceIds=stoppedInstances).start()