尝试使用Python 3.6在AWS中创建Lambda函数,该函数创建一个EC2实例,该实例在特定时间段后终止。由于对此我仍然很环保,因此我选择在终止实例时使用“标签”作为过滤器。
但是,我在找出将标记添加到实例时将其添加到实例的方法遇到了麻烦。
我创建EC2的代码如下
import os
import boto3
AMI = os.environ['AMI']
INSTANCE_TYPE = os.environ['INSTANCE_TYPE']
KEY_NAME = os.environ['KEY_NAME']
SUBNET_ID = os.environ['SUBNET_ID']
ec2 = boto3.resource('ec2')
def lambda_handler(event, context):
instance = ec2.create_instances(
ImageId=AMI,
InstanceType=INSTANCE_TYPE,
KeyName=KEY_NAME,
SubnetId=SUBNET_ID,
MaxCount=1,
MinCount=1
)
print("New instance created...")
环境变量是手动填写的
我还有一个终止功能,应该用上面的标签过滤掉上面python脚本创建的EC2并终止它们
import os
import boto3
def lambda_handler(event, context):
ec2 = boto3.resource('ec2')
instances = ec2.instance.filter(Filters=[{"Name" :"tag:webserver", "Values":[delete] }])
deleteInstances = [instance.id for instance in instances]
for i in deleteInstances:
terminateInstances = ec2.instances.terminate(i)
print(terminateInstances)
print("Terminating instances...")
寻找简单的方法没有运气。
答案 0 :(得分:0)
boto3 create_instances api的参数为 TagInstances 。 documentation here
TagSpecifications是一个python列表-它包含在启动期间应用于资源的标签。指定的标签应用于在启动期间创建的所有实例或卷。
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [
{
'Key': 'string',
'Value': 'string'
},
]
},
],
答案 1 :(得分:0)
您可以轻松地在请求中添加其他参数,例如:
def lambda_handler(event, context):
instance = ec2.create_instances(
ImageId=AMI,
InstanceType=INSTANCE_TYPE,
KeyName=KEY_NAME,
SubnetId=SUBNET_ID,
MaxCount=1,
MinCount=1,
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [
{
'Key': 'TAG_KEY',
'Value': 'TAG_VALUE'
}
]
}
]
)