【问题标题】:Automatic creation of snapshots using AWS Lambda使用 AWS Lambda 自动创建快照
【发布时间】:2016-12-28 08:51:59
【问题描述】:

我已经使用以下链接完成了快照的自动创建:

https://blog.powerupcloud.com/2016/02/15/automate-ebs-snapshots-using-lambda-function/

正如代码中所写,过滤是基于虚拟机的标签完成的。我不想创建带有备份或备份标签的虚拟机,而是想创建除某些名称之外的所有虚拟机的快照。

我不想给虚拟机添加额外的标签。相反,我想在我的过滤器中编写一个 if 条件。我将提供我的测试虚拟机的名称,如果虚拟机标签与该名称匹配,则不会创建快照。如果不匹配,则必须创建快照。我可以这样做吗?

例如:我的帐户中有四个虚拟机。

VM 1 --> Prod1,
VM 2 --> Prod2,
VM 3 --> Prod3, 
VM 4 --> Test1.

例如,我需要能够编写一个包含我的测试 VM 标记“Test1”的 if 条件。如果标签与此匹配,则不应创建快照。如果不匹配,则必须创建快照。

那么,为此,我应该如何更改我的代码?

【问题讨论】:

  • 您将需要一种简单的方法来确定您希望对哪些机器进行快照。你希望你的代码如何工作?您是否希望它对除带有特定标签的所有内容 进行快照吗?如果有第 5 个实例会发生什么?
  • 没错。我希望它对除带有特定标签的所有内容进行快照。我的帐户中有两个不需要创建快照的实例。对于其余的实例[运行或停止],我想要快照。

标签: amazon-web-services aws-lambda snapshot


【解决方案1】:

您只需为所有三台服务器创建一个带有“备份”键的标签。该脚本仅过滤键名上的实例。

【讨论】:

  • 这不是我想要的。我不想为虚拟机添加额外的标签。相反,我想在我的过滤器中编写一个 if 条件。我将提供我的测试虚拟机的名称,如果虚拟机标签与该名称匹配,则不会创建快照。如果不匹配,则必须创建快照。我可以这样做吗?
【解决方案2】:

选择需要备份哪些虚拟机的代码如下:

reservations = ec.describe_instances(
        Filters=[
            {'Name': 'tag-key', 'Values': ['Backup', 'True']},
        ]
    ).get(
        'Reservations', []
    )

如您所见,它使用 boto 的 describe_instances 和一个过滤器来限制将要处理的实例数。如果您想备份除环境中非 prod 之外的所有内容,则应考虑使用 Backup=NO 之类的标记非 prod 实例。

【讨论】:

  • 这不是我想要的。我不想为虚拟机添加额外的标签。相反,我想在我的过滤器中编写一个 if 条件。我会提供我的测试虚拟机的名称,如果虚拟机标签匹配,则不会创建快照。如果不匹配,则必须创建快照。我可以这样做吗?
  • 每个实例名默认也是一个标签,比如Name=yourhostname,所以你需要做的就是传递多个值aws ec2 describe-instances --filters "Name=tag:Name,Values=instance1, instance2, instance3"。这是您想要的虚拟机。它可以在 AWS cli 中使用,也可以在这里使用,请查看文档并尝试一下。
  • 耶..没关系。但是,几乎每 3 天就会在我的帐户中启动 2 到 3 个新实例。所以,我不能每隔一天继续编辑我的代码
【解决方案3】:

备份所有服务器除了标有标签的服务器:

  • 获取所有服务器的列表
  • 获取服务器列表带有“不备份”标志并将它们从第一个列表中删除
  • 做备份

这需要两次调用describe_instances()

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多