2016-09-20 60 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