使用SDK(go语言)批量删除阿里云快照
阿里云这半年来也开始学AWS对各种服务进行收费了,如之前的waf收费也就算了,本来安全这些也不能完全让运营商去搞,居然连快照也要收费,收费也就算了,我不用总行了吧,没想到我停快照一个月后又给我发个短信说因我们买了oss服务免费用我们使用一年的快照,好嘛,我又开启快照,没想到最近我无意检查的时候,发现快照还是在扣费,你妹哦,说的免费用一年呢?把我们当猴耍,一气之下,停快照,删之之前的快照,但几千个快照我手动要删到何年何月,而且删上20个左右又要短信验证,你妹哦,因之前有用sdk来操作的经验,去翻了翻阿里对快照管理的sdk,才有了这篇文章.
阿里云快照sdk(go语言)代码:
package main import ( "encoding/json" "fmt" "github.com/denverdino/aliyungo/common" "github.com/denverdino/aliyungo/ecs" "io/ioutil" "os" ) var ( cli *ecs.Client = nil config *Config = new(Config) ) func main() { defer func() { if err := recover(); err != nil { fmt.Println(err) } }() var err error if len(os.Args) < 2 { panic("need config file") } filename := os.Args[1] resBytes, err := ioutil.ReadFile(filename) if err != nil { panic(err) } if err := json.Unmarshal(resBytes, config); err != nil { panic(err) } cli = ecs.NewClient(config.AccessKeyId, config.AccessKeySecret) delete() fmt.Println("success") } func deleteSnapshot(snapshotId string) { fmt.Print(snapshotId, "正在删除...", "") if err := cli.DeleteSnapshot(snapshotId); err != nil { panic(err) } fmt.Println(" 删除成功!") } func delete() { param := &ecs.DescribeSnapshotsArgs{ RegionId: common.Region("cn-hangzhou"), Pagination: common.Pagination{ PageNumber: 1, PageSize: 50, }, } exceptids := map[string]bool{} for _, exceptid := range config.ExceptIds { exceptids[exceptid] = true } snapshotIds := getAllSnapshotIds(param, exceptids) fmt.Println("忽略的快照:", config.ExceptIds) fmt.Println("待删除快照总计:", len(snapshotIds), "个") for _, i := range snapshotIds { deleteSnapshot(i) } } func getAllSnapshotIds(param *ecs.DescribeSnapshotsArgs, exceptids map[string]bool) []string { snapshotIds := []string{} snapshots, pagination, err := cli.DescribeSnapshots(param) if err != nil { panic(err) } for _, r := range snapshots { if _, ok := exceptids[r.SnapshotId]; !ok { snapshotIds = append(snapshotIds, r.SnapshotId) } } if p := pagination.NextPage(); p != nil { param.Pagination = *p sids := getAllSnapshotIds(param, exceptids) snapshotIds = append(snapshotIds, sids...) } return snapshotIds } type Config struct { AccessKeyId string `json:"accesskeyid"` AccessKeySecret string `json:"accesskeysecret"` Action string `json:"action"` SnapshotId string `json:"snapshotid"` ExceptIds []string `json:"exceptids"` }
编译好的sdk下载地址如下:
使用示例:
./snapshot-linux ./config.json
config.json里的说明:
{ "accesskeyid" :"LTAIE********", #填你自己的 "accesskeysecret" :"ya**********", #填你自己的 "exceptids" : [ "s-bp*********", #这里写你不想删除的快照 "s-bp*********", "s-bp*********", "s-bp*********", "s-bp*********" ] }
最后说一句,这个脚本执行了的话,被删除的快照无法恢复的,所以谨慎使用.
评论: