Добавление тега AWS в скрипт Python Boto3 - PullRequest
0 голосов
/ 12 июня 2018

Питон нуб здесь.Недавно я наткнулся на блог-сайт, который преподал урок о том, как автоматизировать моментальные снимки EBS с помощью lambda & python.Сценарий работает отлично и технически выполняет все, что я хочу, за исключением того, что я не могу понять, как добавить теги AWS в boto3 lib.

import boto3
import datetime
import pytz
import os

ec2 = boto3.resource('ec2')

def lambda_handler(event, context):
    print("\n\nAWS snapshot backups starting at %s" % datetime.datetime.now())
    instances = ec2.instances.filter(
        Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])

    for instance in instances:
        instance_name = filter(lambda tag: tag['Key'] == 'Name', instance.tags)[0]['Value']

        for volume in ec2.volumes.filter(Filters=[{'Name': 'attachment.instance-id', 'Values': [instance.id]}]):
            description = 'scheduled-%s-%s' % (instance_name,
                datetime.datetime.now().strftime("%Y-%m-%d-%H:%M"))

            if volume.create_snapshot(VolumeId=volume.volume_id, Description=description):
                print("Snapshot created with description [%s]" % description)

        for snapshot in volume.snapshots.all():
            retention_days = int(os.environ['retention_days'])
            if snapshot.description.startswith('scheduled-') and ( datetime.datetime.now().replace(tzinfo=None) - snapshot.start_time.replace(tzinfo=None) ) > datetime.timedelta(days=retention_days):
                print("\t\tDeleting snapshot [%s - %s]" % ( snapshot.snapshot_id, snapshot.description ))
                snapshot.delete()

    print("\n\nAWS snapshot backups completed at %s" % datetime.datetime.now())
    return True

Может кто-нибудь объяснить, как я могу добавить теги к создаваемым снимкам ebs?по этому сценарию.

мое образовательное предположение состоит в том, что это должно быть в этой части сценария.потому что именно там создается описание.так я могу в теории просто добавить переменную с именем tag = ec2.Tag ('resource_id', 'key', 'value')?

    for volume in ec2.volumes.filter(Filters=[{'Name': 'attachment.instance-id', 'Values': [instance.id]}]):
        description = 'scheduled-%s-%s' % (instance_name,
            datetime.datetime.now().strftime("%Y-%m-%d-%H:%M")) 

1 Ответ

0 голосов
/ 12 июня 2018

Вы добавляете теги при выполнении volume.create_snapshot

и заменяете

if volume.create_snapshot(VolumeId=volume.volume_id, Description=description):
    print("Snapshot created with description [%s]" % description)

на

if volume.create_snapshot(
    VolumeId=volume.volume_id,
    Description=description,
    TagSpecifications=[
        {
            'ResourceType': 'snapshot',
            'Tags': [
                {
                    'Key': 'Owner',
                    'Value': 'RaGe'
                },
                {
                    'Key': 'date', 
                    'Value': datetime.datetime.now().strftime("%Y-%m-%d")
                }
            ]
        },
    ]
):
    print("Snapshot created with description [%s]" % description)

ссылка

Это приводит к:

enter image description here

...