Как вы можете видеть в выходных данных журнала, ваши «экземпляры» - это str со значением i-0d66b89b8c010560d
.Что вы, вероятно, не знаете, так это то, что str является итеративным.Заставить список вызывать себя не так, как вы ожидаете.Поэтому, когда вы вызываете этот код:
instances = list(instances)
Вы на самом деле делаете это:
>>> instances = 'i-0d66b89b8c010560d'
>>> list(instances)
['i', '-', '0', 'd', '6', '6', 'b', '8', '9', 'b', '8', 'c', '0', '1', '0', '5', '6', '0', 'd']
Видите, что происходит?Ваша строка преобразуется в список, где каждый индекс строки является индексом в списке.
Таким образом, решение будет таким:
instances = ['i-0d66b89b8c010560d']
import boto3
import os
# Enter the region your instances are in. Include only the region without
specifying Availability Zone; e.g., 'us-east-1'
region = 'us-east-1'
# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']
# instances = ['i-0d66b89b8c010560d']
def lambda_handler(event, context):
print 'stopping your instance'
instances = os.environ['INSTANCES_ID']
print instances
print type(instances)
instances = [instances]
print type(instances)
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)