なにこれ
aws-sdk-goの場合
- paginateできるAPIは
HogehogePagesWithContext
みたいな関数が用意されているのでこれを使う
サンプル
今回の場合、 ecs.DescribeContainerInstances
の引数として渡すインスタンスのARNリストを ecs.ListContainerInstancesPagesWithContext
で取得する。引数で渡すARNの上限となる100ずつでページ分割する。
package main import ( "context" "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ecs" ) const ClusterName = "your-cluster-name" func main() { var instancesList [][]string sess := session.Must(session.NewSessionWithOptions(session.Options{ SharedConfigState: session.SharedConfigEnable, })) svc := ecs.New(sess) ctx := context.Background() err := svc.ListContainerInstancesPagesWithContext(ctx, &ecs.ListContainerInstancesInput{ Cluster: aws.String(ClusterName), MaxResults: aws.Int64(100), // DescribeContainerInstances limitation }, func(p *ecs.ListContainerInstancesOutput, b bool) bool { var instances []string for _, arn := range p.ContainerInstanceArns { instances = append(instances, aws.StringValue(arn)) } instancesList = append(instancesList, instances) return true }) if err != nil { panic(fmt.Sprintf("failed to list container instances for cluster %s: %v", ClusterName, err)) } fmt.Println("Container instances list: ", instancesList) }
ListContainerInstancesPagesWithContext
の引数について- ctx
- groutineのキャンセル、タイムアウトなどで利用。このへんまだわかってない
- ecs.ListContainerInstancesInput
- ListCOntainerInstancesのインプット。MaxResultsを100にすることで各ページ100ずつ出力してくれる
- func
- 各ページ毎で実行する処理を各。今回は上限100ずつのArnのSliceをappendする
- ctx
参考
https://github.com/aws/aws-sdk-go#api-request-pagination-and-resource-waiters