首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamoDB使用AWS GoLang SDK列出所有备份

DynamoDB使用AWS GoLang SDK列出所有备份
EN

Stack Overflow用户
提问于 2019-01-10 05:24:38
回答 2查看 523关注 0票数 0

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2020-04-08 21:23:08

有点晚了,但我还是把它放在这里,以防我能帮上忙。

示例:

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2019-01-10 14:24:58

这可能是因为您对API的用法有点着迷

每秒最多可以调用ListBackups 5次。

p.Next()循环中p.HasNextPage()的值是什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54118604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档