【发布时间】:2019-12-13 07:02:33
【问题描述】:
当我将 python 2.7 版本更新到 python 3.8 时,我的 AMI 脚本无法正常工作,在 lambda 部分下的 aws 控制台上测试代码后显示 2.7 版本和 3.8 版本之间的版本不匹配。谁能帮我解决这个问题?
谢谢
import boto3
import collections
import datetime
import time
import sys
ec2 = boto3.client('ec2')
sts = boto3.client('sts')
drec2 = boto3.client('ec2', region_name='eu-west-1')
dr = boto3.resource('ec2')
awsaccountid = sts.get_caller_identity().get('Account')
images = dr.images.filter(Owners=[awsaccountid])
date = datetime.datetime.now()
date_fmt = date.strftime('%Y-%m-%d')
time_fmt = date.strftime('%Y-%m-%d--%H-%M-%S')
def lambda_handler(event, context):
def get_instance_name(itags):
instancename = ''
if itags is None:
instancename = ''
else:
for tags in itags:
if tags["Key"] == 'Name':
instancename = tags["Value"]
return instancename
# Check for the availability of the image
def is_image_available(image_id):
try:
available = 0
while available == 0:
print("Not created yet.. Gonna sleep for 10 seconds")
time.sleep(10)
image = ec2.describe_images(ImageIds=[image_id])
if image['Images'][0]['State'] == 'available':
available = 1
if available == 1:
print("Image is now available for use.")
return True
except Exception,e:
print e
reservations = ec2.describe_instances(
Filters=[
{'Name': 'tag:Backup', 'Values': ['yes', 'Yes']},
]
).get(
'Reservations', []
)
instances = sum(
[
[i for i in r['Instances']]
for r in reservations
], [])
for instance in instances:
try:
retention_days = 2
except IndexError:
retention_days = 7
finally:
for image in images:
#today_time = datetime.datetime.now().strftime('%m-%d-%Y')
#today_fmt = today_time.strftime('%m-%d-%Y')
#today_date = time.strptime(today_time, '%m-%d-%Y')
aminame = get_instance_name(instance['Tags']) + "-" + instance['InstanceId'] + "-On-" + date_fmt
if image.name == aminame:
if is_image_available(image.id):
dramiid = drec2.copy_image(SourceRegion='us-east-1', SourceImageId=image.id,
Name="DR-" + get_instance_name(instance['Tags']) + "-" +
`enter code here` instance[
'InstanceId'] + "-On-" + date_fmt,
Description="Lambda created AMI of instance " + instance[
'InstanceId'] + " On " + time_fmt)
print("Retaining DR AMI %s of instance %s for %d days" % (
dramiid['ImageId'],
instance['InstanceId'],
retention_days,
))
# to_tag[retention_days].append(dramiid['ImageId'])
# for retention_days in to_tag.keys():
delete_date = datetime.date.today() + datetime.timedelta(days=retention_days)
delete_fmt = delete_date.strftime('%m-%d-%Y')
print("Will delete the DR AMI in %d days on %s" % (retention_days, delete_fmt))
# break
drec2.create_tags(
Resources=[dramiid['ImageId']],
Tags=[
{'Key': 'DeleteOn', 'Value': delete_fmt},
]
)
出现以下错误:
Function Logs:
START
RequestId: 1f9263c7-9736-4b31-934d-719d38f8fdba
Version: $LATEST
[ERROR] Runtime.UserCodeSyntaxError: Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 52)
Traceback (most recent call last): File "/var/task/lambda_function.py"
Line 52 except Exception,e:END
RequestId: 1f9263c7-9736-4b31-934d-719d38f8fdba
有人知道如何解决这个问题吗?
【问题讨论】:
-
很多问题,你有完整的脚本
-
是的,这是完整的脚本注释部分。
标签: python-3.x aws-lambda