2017-08-02 80 views
0

我已經在AWS中創建了一個Python Lambda函數,用於根據部署到它們的TAG啓動一些EC2實例。它檢查實例是否停止並且只運行它們。基於標籤啓動EC2實例的Lambda函數

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運行時,並且使用與其他正常工作的函數(僅基於時間)啓動服務器相同的角色。

你能提供建議嗎?謝謝!

+0

這可以幫助你理解錯誤:https://stackoverflow.com/questions/23944657/typeerror-method-takes-1-positional-參數 - 但是2 - 給出/ 23944658 – HakRo

+0

ec2.instances.filter(...) – jarmod

回答

1

這就是@最後一行!謝謝您的評論說,向我指出了正確的方向:)

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