使用标签为 EBS 卷创建快照

create a snapshot to a EBS volume with tags

我想为带有标签的 EBS 卷创建快照 "backup. "我已经编写了一个方法来为 EBS 卷创建快照。正在正确创建快照。但是快照没有任何标签。方法如下。

public Snapshot createEbsSnapshot(String volumeId)
        throws IOException {

    logger.log("============Creating snapshot for a volume: " + volumeId +" ==============");

    String description = "This is a snapshot created by using AWS-Java SDK";

    CreateSnapshotRequest snapshotRequest = new CreateSnapshotRequest(
            volumeId, description);

    CreateSnapshotResult snapshotResult = ec2Client
            .createSnapshot(snapshotRequest);

    Snapshot snapshot = snapshotResult.getSnapshot();       

    logger.log("============Snapshot creation for a volume: " + volumeId +" is done.==============");

    return snapshot;
}

我不确定我们是否可以使用 aws-java sdk 来做到这一点。如有不妥请指正

谢谢

您必须获取从调用 createSnapshot() 返回的快照 ID,然后在另一个 API 调用中使用该 ID 在快照上创建标签。

AmazonEC2Client class 有一个 createTags 方法可以将标签分配给资源。 如果你使用 SnapshotId of the CreateSnapshotResult 并使用它来调用 createTags 方法,我认为你应该能够为快照分配一个标签。

最好创建包含所有标签的参数。 更多详情 例如:

let snapshotParams = {
    DryRun : false,
    VolumeId : vol-123abc, //ID of the volume
    TagSpecifications: [{
        ResourceType: 'snapshot',
        Tags: [
            {
              Key: 'ServerName',
              Value: 'Server123'
            },                {
              Key: 'Department',
              Value: 'Accounting'
            }
        ]//this can be obtained by the instance object
    }]
}
ec2.createSnapshot(snapshotParams,(err,data)=>{
    if(err){
       console.log(err, err.stack)
    } else {
       console.log(data)
    }
}

您可以创建一个函数并循环访问您的 ec2 实例对象以获取标签。

我可能会迟到,但是您可以使用 python 而不是使用 java,它可以用几行代码以更好的方式解决您的问题。 我找到了一个更好的 Lambda 脚本,它根据 ec2 实例标签拍摄 EBS 卷(辅助卷)的快照。

例如,如果您的 ec2 实例有标签 "Backup:true"。将拍摄所有辅助卷的快照,并将为快照指定实例名称。

博客 Post - https://jee-appy.blogspot.com/2018/05/automated-ebs-volume-snapshot-lambda.html

演示 - https://www.youtube.com/watch?v=I9E9F8HD_7E

希望对您有所帮助!