首页 > 解决方案 > DescribeSnapshots 不支持配置中的区域过滤器

问题描述

即使在明确配置区域之后,SDK 报告的快照似乎也比 AWS 控制台中可见的要多。似乎它返回了该帐户所有区域的快照数据。

  sess := session.Must(session.NewSessionWithOptions(session.Options{
        Config: aws.Config{Region: aws.String("eu-central-1"),Endpoint: aws.String("ec2.eu-central-1.amazonaws.com")},
    }))
  svc := ec2.New(sess, &aws.Config{
    Region: aws.String(endpoints.EuCentral1RegionID),
  })
  input := &ec2.DescribeSnapshotsInput{
      Filters: []*ec2.Filter{
        &ec2.Filter{
          Name: aws.String("status"),
          Values: []*string{aws.String("completed")},
        },
      },
  }

  result, err := svc.DescribeSnapshots(input)
  if err != nil {
      if aerr, ok := err.(awserr.Error); ok {
          switch aerr.Code() {
          default:
              fmt.Println(aerr.Error())
          }
      } else {
          fmt.Println(err.Error())
      }
  }

  for _, snapshot := range result.Snapshots{
    fmt.Println(*snapshot.SnapshotId, " : ", *snapshot.VolumeSize)
  }

标签: aws-sdk-go

解决方案


遵循此处的文档并了解 DescribeSnapshots 返回三种类型的快照。a) 公共快照(公开提供给其他人创建卷) b) 显式快照(由其他人显式提供给您的 AWS 账户) c) 隐式快照(由您自己的账户创建的快照)

因此,结果比预期的要多得多。

此外,如果您将以下过滤器传递给 DescribeSnapshotsInput:

&ec2.Filter{
  Name: aws.String("owner-id"),
  Values:[]*string{aws.String("XXXXYYYYYZZZZ")},
},

结果进一步缩小以显示仅在您所在地区可用的快照


推荐阅读