Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在寻找一个Python脚本,通过将快照ID或实例名称作为带有保留日期的参数来删除AWS快照_Python_Amazon Web Services_Amazon Ec2_Aws Lambda - Fatal编程技术网

正在寻找一个Python脚本,通过将快照ID或实例名称作为带有保留日期的参数来删除AWS快照

正在寻找一个Python脚本,通过将快照ID或实例名称作为带有保留日期的参数来删除AWS快照,python,amazon-web-services,amazon-ec2,aws-lambda,Python,Amazon Web Services,Amazon Ec2,Aws Lambda,您好,我正在寻找python脚本,通过提供快照id或实例名称和保留期作为参数来删除快照。我有下面的脚本,它删除了保留期设置之前的所有快照,但是我只想对特定实例名执行删除 # Delete snapshots older than retention period import boto3 from botocore.exceptions import ClientError from datetime import datetime,timedelta def delete_snapsho

您好,我正在寻找python脚本,通过提供快照id或实例名称和保留期作为参数来删除快照。我有下面的脚本,它删除了保留期设置之前的所有快照,但是我只想对特定实例名执行删除

# Delete snapshots older than retention period

import boto3
from botocore.exceptions import ClientError

from datetime import datetime,timedelta

def delete_snapshot(snapshot_id, reg):
    try:
        ec2resource = boto3.resource('ec2', region_name=reg)
        snapshot = ec2resource.Snapshot(snapshot_id)
        snapshot.delete()
    except ClientError as e:
        print "Caught exception: %s" % e

    return

def lambda_handler(event, context):
    account_id = 'xxxxxxxxxxxxxxx'
    retention_days = 10
    # Get current timestamp in UTC
    now = datetime.now()

    # AWS Account ID

    # Define retention period in days

    # Create EC2 client
    ec2 = boto3.client('ec2')

    # Get list of regions
    regions = ec2.describe_regions().get('Regions',[] )

    # Iterate over regions
    for region in regions:
        print "Checking region %s " % region['RegionName']
        reg=region['RegionName']

        # Connect to region
        ec2 = boto3.client('ec2', region_name=reg)

        # Filtering by snapshot timestamp comparison is not supported
        # So we grab all snapshot id's
        result = ec2.describe_snapshots( OwnerIds=[account_id] )

        for snapshot in result['Snapshots']:
            print "Checking snapshot %s which was created on %s" % (snapshot['SnapshotId'],snapshot['StartTime'])

            # Remove timezone info from snapshot in order for comparison to work below
            snapshot_time = snapshot['StartTime'].replace(tzinfo=None)

            # Subtract snapshot time from now returns a timedelta
            # Check if the timedelta is greater than retention days
            if (now - snapshot_time) > timedelta(retention_days):
                print "Snapshot is older than configured retention of %d days" % (retention_days)
                delete_snapshot(snapshot['SnapshotId'], reg)
            else:
                print "Snapshot is newer than configured retention of %d days so we keep it" % (retention_days)

您似乎在询问如何识别与给定快照关联的Amazon EC2实例

一个简单的方法是在创建快照时添加一个标记,该标记包含实例ID,甚至可能包含实例中的标记。这意味着所有相关信息都将附加到快照本身

否则,您可以:

  • 从描述快照()的结果中获取卷ID
  • 调用
    description_volumes()
    传入
    VolumeId
  • 如果卷仍连接到EC2实例,则
    Attachments.InstanceId
    将提供实例标识符
如果卷未连接到实例,则此信息将不可用。但是,启动实例时,可以将标记从实例传播到卷。这可能是确定卷目的的一个好方法

您也可以采取不同的方法:

  • 从实例ID列表开始
  • 对于每种情况:
    • 调用
      descripe\u instance()
      以获取附加卷的
      VolumeId
    • 调用
      描述快照()
      ,传递
      卷ID
这将只提供给定实例的快照,而不是从快照开始并发现实例


您可以通过为给定的标记调用
descripe_instances()
对标记执行相同的操作,然后循环遍历每个生成的实例。

您似乎在询问如何识别哪个Amazon EC2实例与给定的快照相关联

一个简单的方法是在创建快照时添加一个标记,该标记包含实例ID,甚至可能包含实例中的标记。这意味着所有相关信息都将附加到快照本身

否则,您可以:

  • 从描述快照()的结果中获取卷ID
  • 调用
    description_volumes()
    传入
    VolumeId
  • 如果卷仍连接到EC2实例,则
    Attachments.InstanceId
    将提供实例标识符
如果卷未连接到实例,则此信息将不可用。但是,启动实例时,可以将标记从实例传播到卷。这可能是确定卷目的的一个好方法

您也可以采取不同的方法:

  • 从实例ID列表开始
  • 对于每种情况:
    • 调用
      descripe\u instance()
      以获取附加卷的
      VolumeId
    • 调用
      描述快照()
      ,传递
      卷ID
这将只提供给定实例的快照,而不是从快照开始并发现实例


您可以通过为给定的标记调用
descripe\u instances()
对标记执行相同的操作,然后循环遍历每个生成的实例。

您可以使用:脚本需要调用
descripe\u snapshots()
然后使用
delete\u snapshot()
从该列表中删除所需的快照。请编辑您的问题,向我们展示您迄今为止编写的代码以及您面临的困难。谢谢。是的,我将更新到目前为止的代码。我有一个代码,可以删除所有早于我在代码中设置的保留期的快照。然而,我有一个不同的用例,我只想删除特定实例的快照。注意,我有每个实例的名称或标记instance@JohnRotenstein我已经更新了问题中的代码。感谢您不用编写自己的代码,您可以使用:脚本需要一个
descripe\u snapshots()
调用,然后使用
delete\u snapshot()
从该列表中删除所需的快照。请编辑您的问题,向我们展示您迄今为止编写的代码以及您面临的困难。谢谢。是的,我将更新到目前为止的代码。我有一个代码,可以删除所有早于我在代码中设置的保留期的快照。然而,我有一个不同的用例,我只想删除特定实例的快照。注意,我有每个实例的名称或标记instance@JohnRotenstein我已经更新了问题中的代码。提前谢谢