2016-09-20 34 views
1
  • 我想从AWS
  • AWS提供了在有NextToken指向下一个页面的多个页面响应中提取所有的自动缩放组。所以需要继续寻找NextToken并拉组名
  • 如果没有NextToken,则退出。

在Python中,我做的:转到郎While循环

import boto3 
import pprint 

session = boto3.session.Session(region_name='us-west-2') 
client = session.client('autoscaling') 

resp = client.describe_auto_scaling_groups() 
pprint.pprint(resp) 

while 'NextToken' in resp: 
    resp = client.describe_auto_scaling_groups(NextToken=resp['NextToken'])   
    pprint.pprint(resp) 

我跟着相似的逻辑在,并与下面的代码上来:

package main 

import (
    "fmt" 
    "github.com/aws/aws-sdk-go/aws" 
    "github.com/aws/aws-sdk-go/aws/session" 
    "github.com/aws/aws-sdk-go/service/autoscaling" 
) 

func main() { 
    sess, err := session.NewSession(&aws.Config{Region: aws.String("us-west-2")}) 

    if err != nil { 
     fmt.Println("Failed to create session: ", sess) 
     return 
    } 

    svc := autoscaling.New(sess) 
    params := &autoscaling.DescribeAutoScalingGroupsInput{} 
    resp, err := svc.DescribeAutoScalingGroups(params) 

    if err != nil { 
     fmt.Println("Something Went wrong") 
     return 
    } 

    fmt.Println(resp) 

    for { 
     if resp.NextToken == nil { 
      fmt.Println("No more pages left") 
      break 
     } 

     params := &autoscaling.DescribeAutoScalingGroupsInput{ 
      NextToken: aws.String(*resp.NextToken), 
     } 
     resp, err := svc.DescribeAutoScalingGroups(params) 

     if err != nil { 
      fmt.Println("Something Went wrong") 
      return 
     } 

     fmt.Println(resp) 
    } 
} 

问题:代码进入到第2页面,然后继续循环播放相同的第2页。它不进行到第3页(当NextTokenresp)或它不退出(resp中没有NextToken时)。

寻求帮助我的的代码。我正在学习

回答

2

你内心深处resp好像是你的原始resp。试试这个的for环路(:==替换)内:

resp, err = svc.DescribeAutoScalingGroups(params) 
+0

谢谢。如果我在** outer **'resp'之前声明'var err error',那么代码将失败,并在此块中重新声明错误'err'。如果我在** inner **'resp'之前声明'var err error',那么行为没有变化。 – slayedbylucifer

+0

@slayedbylucifer所以这没有帮助?如果在循环中简单地用'='替换':='会怎样? –

+0

Hi @ Ainar-G,用'='代替':='出错''undefined:resp'。 – slayedbylucifer