使用标签创建和过滤EC2

时间:2019-12-02 17:27:39

标签: python-3.x amazon-ec2 aws-lambda boto3

尝试使用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...")

寻找简单的方法没有运气。

2 个答案:

答案 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'
            }
        ]
      }
    ]
)
相关问题