amazon-web-services - DynamoDB 使用 AWS GoLang SDK 列出所有备份

标签 amazon-web-services go amazon-dynamodb

基于API Operation Pagination without Callbacks链接中给出的例子 https://aws.amazon.com/blogs/developer/context-pattern-added-to-the-aws-sdk-for-go/ 我正在尝试列出 dynamodb 中的所有备份。但似乎分页不起作用,它只是检索第一页而不是进入下一页

package main

    import (
        "context"
        "fmt"

        "github.com/aws/aws-sdk-go/aws"
        "github.com/aws/aws-sdk-go/aws/request"

        "github.com/aws/aws-sdk-go/aws/session"
        "github.com/aws/aws-sdk-go/service/dynamodb"
    )

    func main() {

        sess, sessErr := session.NewSession()

        if sessErr != nil {
            fmt.Println(sessErr)
            fmt.Println("Cound not initilize session..returning..")
            return
        }
        // Create DynamoDB client
        dynamodbSvc := dynamodb.New(sess)

        params := dynamodb.ListBackupsInput{}
        ctx := context.Background()

        p := request.Pagination{
            NewRequest: func() (*request.Request, error) {
                req, _ := dynamodbSvc.ListBackupsRequest(&params)
                req.SetContext(ctx)
                return req, nil
            },
        }

        for p.Next() {
            page := p.Page().(*dynamodb.ListBackupsOutput)
            fmt.Println("Received", len(page.BackupSummaries), "objects in page")
            for _, obj := range page.BackupSummaries {
                fmt.Println(aws.StringValue(obj.BackupName))
            }
        }
        //return p.Err()
    } //end of main

最佳答案

有点晚了,但我会把它放在这里以防我能帮助到别人。

例子:

var exclusiveStartARN *string
var backups []*dynamodb.BackupSummary
    for {
        backup, err := svc.ListBackups(&dynamodb.ListBackupsInput{
            ExclusiveStartBackupArn:exclusiveStartARN,
        })

        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }

        backups = append(backups, backup.BackupSummaries...)
        if backup.LastEvaluatedBackupArn != nil {
            exclusiveStartARN = backup.LastEvaluatedBackupArn
            //max 5 times a second so we dont hit the limit
            time.Sleep(200 * time.Millisecond)
            continue
        }
        break
    }
    fmt.Println(len(backups))

解释:

完成分页的方式是通过 ListBackupsRequest 中的 ExclusiveStartBackupArn。如果有更多页面,ListBackupsResponse 返回 LastEvaluatedBackupArn,如果是最后/唯一的页面,则返回 nil。

关于amazon-web-services - DynamoDB 使用 AWS GoLang SDK 列出所有备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118604/

相关文章:

Go: 'fmt' 包首字母缩写的含义

java - 使用 Spring Boot 设置 DynamoDB

python - Boto 语法错误?

mysql - RDS Multi-AZ 瓶颈写入性能

java - 需要使用Quartz和Spring,无需配置

amazon-web-services - 使用 aws change-resource-record-sets 添加别名时出错

postgresql - 存储后端如何影响 Datomic?

amazon-web-services - 在不停机的情况下更换实例的最佳方法是什么?

validation - 使用错误的函数参数验证是 Go 中的一个很好的模式吗?

golang strings.Builder 类型未定义