boto3 출력 결과가 중간에 중단되었을 때NextToken 또는paginner를 사용하여 계속 보기

보토3이 무엇을 출력했을 때 한 번도 모든 결과를 출력하지 않을 수도 있다.
다음은 boto 3에서 할당된 AWS 서비스의 서비스 코드를 가져오고 출력하지만, 출력 결과는 Amazon EC2 Auto Scaling으로 인해 중단됩니다.AWS의 서비스는 여러 방면에 관련되어 있기 때문에 당연히 A~Z의 A로 끝내는 것은 불가능하다.
>>> import boto3
>>> import pprint
>>> client = boto3.client('service-quotas')
>>> pprint.pprint(response)
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1986',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:13:34 GMT',
                                      'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'AWSCloudMap', 'ServiceName': 'AWS Cloud Map'},
              {'ServiceCode': 'a4b', 'ServiceName': 'Alexa for Business'},
              {'ServiceCode': 'access-analyzer',
               'ServiceName': 'Access Analyzer'},
              {'ServiceCode': 'acm',
               'ServiceName': 'AWS Certificate Manager (ACM)'},
              {'ServiceCode': 'acm-pca',
               'ServiceName': 'AWS Certificate Manager Private Certificate '
                              'Authority (ACM PCA)'},
              {'ServiceCode': 'airflow',
               'ServiceName': 'Amazon Managed Workflows for Apac内容 Airflow'},
              {'ServiceCode': 'amplify', 'ServiceName': 'AWS Amplify'},
              {'ServiceCode': 'apigateway',
               'ServiceName': 'Amazon API Gateway'},
              {'ServiceCode': 'appconfig', 'ServiceName': 'AWS AppConfig'},
              {'ServiceCode': 'appflow', 'ServiceName': 'Amazon AppFlow'},
              {'ServiceCode': 'application-autoscaling',
               'ServiceName': 'Application Auto Scaling'},
              {'ServiceCode': 'application-cost-profiler',
               'ServiceName': 'AWS Application Cost Profiler'},
              {'ServiceCode': 'appmesh', 'ServiceName': 'AWS App Mesh'},
              {'ServiceCode': 'apprunner', 'ServiceName': 'AWS App Runner'},
              {'ServiceCode': 'appstream2',
               'ServiceName': 'Amazon AppStream 2.0'},
              {'ServiceCode': 'appsync', 'ServiceName': 'AWS AppSync'},
              {'ServiceCode': 'aps',
               'ServiceName': 'Amazon Managed Prometheus'},
              {'ServiceCode': 'athena', 'ServiceName': 'Amazon Athena'},
              {'ServiceCode': 'auditmanager',
               'ServiceName': 'AWS Audit Manager'},
              {'ServiceCode': 'autoscaling',
               'ServiceName': 'Amazon EC2 Auto Scaling'}]}
>>> 
>>> 
이 불완전한 출력 결과에 NextToken가 부착되어 있기 때문에 이 결과를 사용하면 후속 결과를 볼 수 있다.
이 일은
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
boto3의 서비스quotas의list서비스에 대한 Request Syntax 는 다음과 같습니다.
response = client.list_services(
    NextToken='string',
    MaxResults=123
)
섹션
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
이것을 교부하면 후속 결과를 얻을 수 있다.
문자열로 직접 전달하는 것은 비현실적이다.
client.list_서비스의 출력 결과가 사전 유형이기 때문에 변수 response에 저장된 사전의 키인'NextToken'을 지정하고 이 값을 가져와 NextToken=의 매개 변수로 사용합니다.
>>> response = client.list_services(NextToken=response['NextToken'])
>>> pprint.pprint(response)
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1847',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:25:20 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'autoscaling-plans',
               'ServiceName': 'AWS Auto Scaling Plans'},
              {'ServiceCode': 'backup', 'ServiceName': 'AWS Backup'},
              {'ServiceCode': 'batch', 'ServiceName': 'AWS Batch'},
              {'ServiceCode': 'braket', 'ServiceName': 'Amazon Braket'},
              {'ServiceCode': 'bugbust', 'ServiceName': 'AWS Bugbust'},
              {'ServiceCode': 'cassandra',
               'ServiceName': 'Amazon Keyspaces (for Apache Cassandra)'},
              {'ServiceCode': 'ce', 'ServiceName': 'AWS Cost Explorer'},
              {'ServiceCode': 'chatbot', 'ServiceName': 'AWS Chatbot'},
              {'ServiceCode': 'chime', 'ServiceName': 'Amazon Chime'},
              {'ServiceCode': 'cloud9', 'ServiceName': 'AWS Cloud9'},
              {'ServiceCode': 'cloudformation',
               'ServiceName': 'AWS CloudFormation'},
              {'ServiceCode': 'cloudfront', 'ServiceName': 'Amazon CloudFront'},
              {'ServiceCode': 'cloudhsm', 'ServiceName': 'AWS CloudHSM'},
              {'ServiceCode': 'cloudsearch',
               'ServiceName': 'Amazon CloudSearch'},
              {'ServiceCode': 'cloudshell', 'ServiceName': 'AWS CloudShell'},
              {'ServiceCode': 'cloudtrail', 'ServiceName': 'AWS CloudTrail'},
              {'ServiceCode': 'codeartifact',
               'ServiceName': 'AWS CodeArtifact'},
              {'ServiceCode': 'codebuild', 'ServiceName': 'AWS CodeBuild'},
              {'ServiceCode': 'codecommit', 'ServiceName': 'AWS CodeCommit'},
              {'ServiceCode': 'codedeploy', 'ServiceName': 'AWS CodeDeploy'}]}
그런 다음 AWS Auto Scoling Plans에서 시작하는 후속 결과를 출력할 수 있습니다.
다만 이것도 아직 모든 결과를 출력하지 못했다.
하지만 같은 일을 한 번 한 번 반복하는 것은 고통스러워서 Paginner를 사용한다.
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/service-quotas.html#ServiceQuotas.Paginator.ListServices
Paginator 생성
paginator = client.get_paginator('list_services')
Request Syntax는 이런 느낌입니다.
response_iterator = paginator.paginate(
    PaginationConfig={
        'MaxItems': 123,
        'PageSize': 123,
        'StartingToken': 'string'
    }
)
실제로 해보세요.paginator를 제작하여 for문으로 순환하는 형식입니다.
PaginationConfig에는 required(필수)가 없기 때문에 없어도 괜찮습니다.
※ 다른 서비스(예를 들어 S3 등)의 패키니터도 Required 매개 변수가 나타납니다.
>>> paginator = client.get_paginator('list_services')
>>> for result in paginator.paginate():
...     pprint.pprint(result)
... 
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEI長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1986',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:24 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'AWSCloudMap', 'ServiceName': 'AWS Cloud Map'},
              {'ServiceCode': 'a4b', 'ServiceName': 'Alexa for Business'},
              {'ServiceCode': 'access-analyzer',
               'ServiceName': 'Access Analyzer'},
              {'ServiceCode': 'acm',
               'ServiceName': 'AWS Certificate Manager (ACM)'},
              {'ServiceCode': 'acm-pca',
               'ServiceName': 'AWS Certificate Manager Private Certificate '
                              'Authority (ACM PCA)'},
              {'ServiceCode': 'airflow',
               'ServiceName': 'Amazon Managed Workflows for Apache Airflow'},
              {'ServiceCode': 'amplify', 'ServiceName': 'AWS Amplify'},
              {'ServiceCode': 'apigateway',
               'ServiceName': 'Amazon API Gateway'},
              {'ServiceCode': 'appconfig', 'ServiceName': 'AWS AppConfig'},
              {'ServiceCode': 'appflow', 'ServiceName': 'Amazon AppFlow'},
              {'ServiceCode': 'application-autoscaling',
               'ServiceName': 'Application Auto Scaling'},
              {'ServiceCode': 'application-cost-profiler',
               'ServiceName': 'AWS Application Cost Profiler'},
              {'ServiceCode': 'appmesh', 'ServiceName': 'AWS App Mesh'},
              {'ServiceCode': 'apprunner', 'ServiceName': 'AWS App Runner'},
              {'ServiceCode': 'appstream2',
               'ServiceName': 'Amazon AppStream 2.0'},
              {'ServiceCode': 'appsync', 'ServiceName': 'AWS AppSync'},
              {'ServiceCode': 'aps',
               'ServiceName': 'Amazon Managed Prometheus'},
              {'ServiceCode': 'athena', 'ServiceName': 'Amazon Athena'},
              {'ServiceCode': 'auditmanager',
               'ServiceName': 'AWS Audit Manager'},
              {'ServiceCode': 'autoscaling',
               'ServiceName': 'Amazon EC2 Auto Scaling'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1847',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:24 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'autoscaling-plans',
               'ServiceName': 'AWS Auto Scaling Plans'},
              {'ServiceCode': 'backup', 'ServiceName': 'AWS Backup'},
              {'ServiceCode': 'batch', 'ServiceName': 'AWS Batch'},
              {'ServiceCode': 'braket', 'ServiceName': 'Amazon Braket'},
              {'ServiceCode': 'bugbust', 'ServiceName': 'AWS Bugbust'},
              {'ServiceCode': 'cassandra',
               'ServiceName': 'Amazon Keyspaces (for Apache Cassandra)'},
              {'ServiceCode': 'ce', 'ServiceName': 'AWS Cost Explorer'},
              {'ServiceCode': 'chatbot', 'ServiceName': 'AWS Chatbot'},
              {'ServiceCode': 'chime', 'ServiceName': 'Amazon Chime'},
              {'ServiceCode': 'cloud9', 'ServiceName': 'AWS Cloud9'},
              {'ServiceCode': 'cloudformation',
               'ServiceName': 'AWS CloudFormation'},
              {'ServiceCode': 'cloudfront', 'ServiceName': 'Amazon CloudFront'},
              {'ServiceCode': 'cloudhsm', 'ServiceName': 'AWS CloudHSM'},
              {'ServiceCode': 'cloudsearch',
               'ServiceName': 'Amazon CloudSearch'},
              {'ServiceCode': 'cloudshell', 'ServiceName': 'AWS CloudShell'},
              {'ServiceCode': 'cloudtrail', 'ServiceName': 'AWS CloudTrail'},
              {'ServiceCode': 'codeartifact',
               'ServiceName': 'AWS CodeArtifact'},
              {'ServiceCode': 'codebuild', 'ServiceName': 'AWS CodeBuild'},
              {'ServiceCode': 'codecommit', 'ServiceName': 'AWS CodeCommit'},
              {'ServiceCode': 'codedeploy', 'ServiceName': 'AWS CodeDeploy'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '2022',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:24 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'codeguru-profiler',
               'ServiceName': 'Amazon CodeGuru Profiler'},
              {'ServiceCode': 'codeguru-reviewer',
               'ServiceName': 'Amazon CodeGuru Reviewer'},
              {'ServiceCode': 'codepipeline',
               'ServiceName': 'AWS CodePipeline'},
              {'ServiceCode': 'cognito-identity',
               'ServiceName': 'Amazon Cognito Federated Identities'},
              {'ServiceCode': 'cognito-idp',
               'ServiceName': 'Amazon Cognito User Pools'},
              {'ServiceCode': 'cognito-sync',
               'ServiceName': 'Amazon Cognito Sync'},
              {'ServiceCode': 'comprehend', 'ServiceName': 'Amazon Comprehend'},
              {'ServiceCode': 'comprehendmedical',
               'ServiceName': 'Amazon Comprehend Medical'},
              {'ServiceCode': 'compute-optimizer',
               'ServiceName': 'AWS Compute Optimizer'},
              {'ServiceCode': 'connect', 'ServiceName': 'Amazon Connect'},
              {'ServiceCode': 'crowdscale-usagelimitservice',
               'ServiceName': 'Mechanical Turk'},
              {'ServiceCode': 'databrew', 'ServiceName': 'AWS Glue DataBrew'},
              {'ServiceCode': 'dataexchange',
               'ServiceName': 'AWS Data Exchange'},
              {'ServiceCode': 'datapipeline',
               'ServiceName': 'AWS Data Pipeline'},
              {'ServiceCode': 'datasync', 'ServiceName': 'AWS DataSync'},
              {'ServiceCode': 'dax',
               'ServiceName': 'Amazon DynamoDB Accelerator (DAX)'},
              {'ServiceCode': 'deeplens', 'ServiceName': 'AWS DeepLens'},
              {'ServiceCode': 'deepracer', 'ServiceName': 'AWS DeepRacer'},
              {'ServiceCode': 'directconnect',
               'ServiceName': 'AWS Direct Connect'},
              {'ServiceCode': 'discovery',
               'ServiceName': 'AWS Application Discovery Service'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEI長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '2170',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:24 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'dlm',
               'ServiceName': 'Amazon Data Lifecycle Manager'},
              {'ServiceCode': 'dms',
               'ServiceName': 'AWS Database Migration Service (AWS DMS)'},
              {'ServiceCode': 'docdb',
               'ServiceName': 'Amazon DocumentDB (with MongoDB compatibility)'},
              {'ServiceCode': 'ds', 'ServiceName': 'AWS Directory Service'},
              {'ServiceCode': 'dynamodb', 'ServiceName': 'Amazon DynamoDB'},
              {'ServiceCode': 'ebs',
               'ServiceName': 'Amazon Elastic Block Store (Amazon EBS)'},
              {'ServiceCode': 'ec2',
               'ServiceName': 'Amazon Elastic Compute Cloud (Amazon EC2)'},
              {'ServiceCode': 'ecr',
               'ServiceName': 'Amazon Elastic Container Registry (Amazon ECR)'},
              {'ServiceCode': 'ecs',
               'ServiceName': 'Amazon Elastic Container Service (Amazon ECS)'},
              {'ServiceCode': 'eks',
               'ServiceName': 'Amazon Elastic Kubernetes Service (Amazon EKS)'},
              {'ServiceCode': 'elastic-inference',
               'ServiceName': 'Amazon Elastic Inference'},
              {'ServiceCode': 'elasticache',
               'ServiceName': 'Amazon ElastiCache'},
              {'ServiceCode': 'elasticbeanstalk',
               'ServiceName': 'AWS Elastic Beanstalk'},
              {'ServiceCode': 'elasticfilesystem',
               'ServiceName': 'Amazon Elastic File System (EFS)'},
              {'ServiceCode': 'elasticloadbalancing',
               'ServiceName': 'Elastic Load Balancing (ELB)'},
              {'ServiceCode': 'elasticmapreduce', 'ServiceName': 'Amazon EMR'},
              {'ServiceCode': 'elastictranscoder',
               'ServiceName': 'Amazon Elastic Transcoder'},
              {'ServiceCode': 'es',
               'ServiceName': 'Amazon OpenSearch Service (successor to Amazon '
                              'Elasticsearch Service)'},
              {'ServiceCode': 'events',
               'ServiceName': 'Amazon EventBridge (CloudWatch Events)'},
              {'ServiceCode': 'fargate', 'ServiceName': 'AWS Fargate'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1897',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:25 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'finspace', 'ServiceName': 'Amazon FinSpace'},
              {'ServiceCode': 'firehose',
               'ServiceName': 'Amazon Kinesis Data Firehose'},
              {'ServiceCode': 'fis',
               'ServiceName': 'AWS Fault Injection Simulator'},
              {'ServiceCode': 'fms', 'ServiceName': 'AWS Firewall Manager'},
              {'ServiceCode': 'forecast', 'ServiceName': 'Amazon Forecast'},
              {'ServiceCode': 'frauddetector',
               'ServiceName': 'Amazon Fraud Detector'},
              {'ServiceCode': 'fsx', 'ServiceName': 'Amazon FSx'},
              {'ServiceCode': 'gamelift', 'ServiceName': 'Amazon GameLift'},
              {'ServiceCode': 'geo',
               'ServiceName': 'Amazon Location Service (Amazon Location)'},
              {'ServiceCode': 'glacier', 'ServiceName': 'Amazon Glacier'},
              {'ServiceCode': 'globalaccelerator',
               'ServiceName': 'AWS Global Accelerator'},
              {'ServiceCode': 'glue', 'ServiceName': 'AWS Glue'},
              {'ServiceCode': 'grafana',
               'ServiceName': 'Amazon Managed Grafana'},
              {'ServiceCode': 'greengrass',
               'ServiceName': 'AWS IoT Greengrass'},
              {'ServiceCode': 'guardduty', 'ServiceName': 'Amazon GuardDuty'},
              {'ServiceCode': 'iam',
               'ServiceName': 'AWS Identity and Access Management (IAM)'},
              {'ServiceCode': 'imagebuilder',
               'ServiceName': 'EC2 Image Builder'},
              {'ServiceCode': 'inspector', 'ServiceName': 'Amazon Inspector'},
              {'ServiceCode': 'iot', 'ServiceName': 'AWS IoT'},
              {'ServiceCode': 'iot1click', 'ServiceName': 'AWS IoT 1-Click'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1998',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:25 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'iotanalytics',
               'ServiceName': 'AWS IoT Analytics'},
              {'ServiceCode': 'iotcore', 'ServiceName': 'AWS IoT Core'},
              {'ServiceCode': 'iotdeviceadvisor',
               'ServiceName': 'AWS IoT Core Device Advisor'},
              {'ServiceCode': 'iotevents', 'ServiceName': 'AWS IoT Events'},
              {'ServiceCode': 'iotfleethub',
               'ServiceName': 'AWS IoT Fleet Hub'},
              {'ServiceCode': 'iotsitewise', 'ServiceName': 'AWS IoT SiteWise'},
              {'ServiceCode': 'iotthingsgraph',
               'ServiceName': 'AWS IoT Things Graph'},
              {'ServiceCode': 'iotwireless', 'ServiceName': 'AWS IoT Wireless'},
              {'ServiceCode': 'ivs',
               'ServiceName': 'Amazon Interactive Video Service'},
              {'ServiceCode': 'kafka',
               'ServiceName': 'Amazon Managed Streaming for Kafka (MSK)'},
              {'ServiceCode': 'kendra', 'ServiceName': 'Amazon Kendra'},
              {'ServiceCode': 'kinesis',
               'ServiceName': 'Amazon Kinesis Data Streams'},
              {'ServiceCode': 'kinesisanalytics',
               'ServiceName': 'Amazon Kinesis Data Analytics'},
              {'ServiceCode': 'kinesisvideo',
               'ServiceName': 'Amazon Kinesis Video Streams'},
              {'ServiceCode': 'kms',
               'ServiceName': 'AWS Key Management Service (AWS KMS)'},
              {'ServiceCode': 'lakeformation',
               'ServiceName': 'AWS Lake Formation'},
              {'ServiceCode': 'lambda', 'ServiceName': 'AWS Lambda'},
              {'ServiceCode': 'launchwizard',
               'ServiceName': 'AWS Launch Wizard For SQL Server'},
              {'ServiceCode': 'lex', 'ServiceName': 'Amazon Lex'},
              {'ServiceCode': 'license-manager',
               'ServiceName': 'AWS License Manager'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1979',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:25 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'lightsail', 'ServiceName': 'Amazon Lightsail'},
              {'ServiceCode': 'logs', 'ServiceName': 'Amazon CloudWatch Logs'},
              {'ServiceCode': 'lookoutequipment',
               'ServiceName': 'Amazon Lookout for Equipment'},
              {'ServiceCode': 'lookoutmetrics',
               'ServiceName': 'Amazon Lookout for Metrics'},
              {'ServiceCode': 'lookoutvision',
               'ServiceName': 'Amazon Lookout for vision'},
              {'ServiceCode': 'machinelearning',
               'ServiceName': 'Amazon Machine Learning'},
              {'ServiceCode': 'macie', 'ServiceName': 'Amazon Macie Classic'},
              {'ServiceCode': 'macie2', 'ServiceName': 'Amazon Macie'},
              {'ServiceCode': 'managedblockchain',
               'ServiceName': 'Amazon Managed Blockchain'},
              {'ServiceCode': 'mediaconnect',
               'ServiceName': 'AWS Elemental MediaConnect'},
              {'ServiceCode': 'mediaconvert',
               'ServiceName': 'AWS Elemental MediaConvert'},
              {'ServiceCode': 'medialive',
               'ServiceName': 'AWS Elemental MediaLive'},
              {'ServiceCode': 'mediapackage',
               'ServiceName': 'AWS Elemental MediaPackage'},
              {'ServiceCode': 'mediastore',
               'ServiceName': 'AWS Elemental MediaStore'},
              {'ServiceCode': 'mediatailor',
               'ServiceName': 'AWS Elemental MediaTailor'},
              {'ServiceCode': 'mgn', 'ServiceName': 'Application Migration'},
              {'ServiceCode': 'monitoring', 'ServiceName': 'Amazon CloudWatch'},
              {'ServiceCode': 'monitron', 'ServiceName': 'Amazon Monitron'},
              {'ServiceCode': 'mq', 'ServiceName': 'Amazon MQ'},
              {'ServiceCode': 'neptune', 'ServiceName': 'Amazon Neptune'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEI長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1995',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:25 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'network-firewall',
               'ServiceName': 'AWS Network Firewall'},
              {'ServiceCode': 'networkinsights',
               'ServiceName': 'VPC Reachability Analyzer'},
              {'ServiceCode': 'networkmanager',
               'ServiceName': 'AWS Network Manager'},
              {'ServiceCode': 'nimble', 'ServiceName': 'Amazon Nimble Studio'},
              {'ServiceCode': 'opsworks', 'ServiceName': 'AWS OpsWorks Stacks'},
              {'ServiceCode': 'opsworks-cm',
               'ServiceName': 'AWS OpsWorks for Chef Automate and AWS OpsWorks '
                              'for Puppet Enterprise'},
              {'ServiceCode': 'organizations',
               'ServiceName': 'AWS Organizations'},
              {'ServiceCode': 'personalize',
               'ServiceName': 'Amazon Personalize'},
              {'ServiceCode': 'pinpoint', 'ServiceName': 'Amazon Pinpoint'},
              {'ServiceCode': 'polly', 'ServiceName': 'Amazon Polly'},
              {'ServiceCode': 'profile',
               'ServiceName': 'Amazon Connect Customer Profiles'},
              {'ServiceCode': 'proton', 'ServiceName': 'AWS Proton'},
              {'ServiceCode': 'qldb', 'ServiceName': 'Amazon QLDB'},
              {'ServiceCode': 'quicksight', 'ServiceName': 'Amazon QuickSight'},
              {'ServiceCode': 'ram',
               'ServiceName': 'AWS Resource Access Manager'},
              {'ServiceCode': 'rds',
               'ServiceName': 'Amazon Relational Database Service (Amazon '
                              'RDS)'},
              {'ServiceCode': 'redshift', 'ServiceName': 'Amazon Redshift'},
              {'ServiceCode': 'rekognition',
               'ServiceName': 'Amazon Rekognition'},
              {'ServiceCode': 'resource-groups',
               'ServiceName': 'AWS Resource Groups'},
              {'ServiceCode': 'robomaker', 'ServiceName': 'AWS RoboMaker'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '2065',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:25 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'route53', 'ServiceName': 'Amazon Route 53'},
              {'ServiceCode': 'route53resolver',
               'ServiceName': 'Route 53 Resolver'},
              {'ServiceCode': 's3',
               'ServiceName': 'Amazon Simple Storage Service (Amazon S3)'},
              {'ServiceCode': 's3-outposts', 'ServiceName': 'AWS S3 Outposts'},
              {'ServiceCode': 'schemas',
               'ServiceName': 'Amazon EventBridge Schema Registry'},
              {'ServiceCode': 'secretsmanager',
               'ServiceName': 'AWS Secrets Manager'},
              {'ServiceCode': 'securityhub', 'ServiceName': 'AWS Security Hub'},
              {'ServiceCode': 'serverlessrepo',
               'ServiceName': 'AWS Serverless Application Repository'},
              {'ServiceCode': 'servicecatalog',
               'ServiceName': 'AWS Service Catalog'},
              {'ServiceCode': 'servicequotas', 'ServiceName': 'Service Quotas'},
              {'ServiceCode': 'ses',
               'ServiceName': 'Amazon Simple Email Service(Amazon SES)'},
              {'ServiceCode': 'shield', 'ServiceName': 'AWS Shield Advanced'},
              {'ServiceCode': 'signer', 'ServiceName': 'AWS Signer'},
              {'ServiceCode': 'sms',
               'ServiceName': 'AWS Server Migration Service'},
              {'ServiceCode': 'snow-device-management',
               'ServiceName': 'AWS Snow Device Management'},
              {'ServiceCode': 'snowball', 'ServiceName': 'AWS Snow Family'},
              {'ServiceCode': 'sns',
               'ServiceName': 'Amazon Simple Notification Service (Amazon '
                              'SNS)'},
              {'ServiceCode': 'sqs',
               'ServiceName': 'Amazon Simple Queue Service (Amazon SQS)'},
              {'ServiceCode': 'ssm', 'ServiceName': 'AWS Systems Manager'},
              {'ServiceCode': 'ssm-contacts',
               'ServiceName': 'AWS Systems Manager Incident Manager Contacts'}]}
{'NextToken': 'UFQCQUFBQUFBRUNBZ0I0eFRmc0hCK2p5R1lFbE5ncmV0a0FJWGZwYTRnd2VYUEh6S1VzR2ZGRGpwNEJ長いので中略',
 'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '1904',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:25 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': [{'ServiceCode': 'ssm-incidents',
               'ServiceName': 'AWS Systems Manager Incident Manager'},
              {'ServiceCode': 'sso', 'ServiceName': 'AWS Single Sign-On (SSO)'},
              {'ServiceCode': 'states', 'ServiceName': 'AWS Step Functions'},
              {'ServiceCode': 'storagegateway',
               'ServiceName': 'AWS Storage Gateway'},
              {'ServiceCode': 'sumerian', 'ServiceName': 'Amazon Sumerian'},
              {'ServiceCode': 'support', 'ServiceName': 'AWS Support'},
              {'ServiceCode': 'swf',
               'ServiceName': 'Amazon Simple Workflow Service'},
              {'ServiceCode': 'textract', 'ServiceName': 'Amazon Textract'},
              {'ServiceCode': 'timestream', 'ServiceName': 'Amazon Timestream'},
              {'ServiceCode': 'transcribe', 'ServiceName': 'Amazon Transcribe'},
              {'ServiceCode': 'transfer', 'ServiceName': 'AWS Transfer Family'},
              {'ServiceCode': 'translate', 'ServiceName': 'Amazon Translate'},
              {'ServiceCode': 'vmimportexport',
               'ServiceName': 'EC2 VM Import/Export'},
              {'ServiceCode': 'vpc',
               'ServiceName': 'Amazon Virtual Private Cloud (Amazon VPC)'},
              {'ServiceCode': 'waf', 'ServiceName': 'AWS WAF'},
              {'ServiceCode': 'waf-regional',
               'ServiceName': 'AWS WAF Regional'},
              {'ServiceCode': 'wafv2', 'ServiceName': 'AWS WAF V2'},
              {'ServiceCode': 'wam',
               'ServiceName': 'Amazon WorkSpaces Application Manager'},
              {'ServiceCode': 'workspaces', 'ServiceName': 'Amazon WorkSpaces'},
              {'ServiceCode': 'xray', 'ServiceName': 'AWS X-Ray'}]}
{'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '15',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Sat, 02 Oct 2021 03:33:26 GMT',
                                      'x-amzn-requestid': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
                      'RetryAttempts': 0},
 'Services': []}
>>> 
지금까지 한 번에 꼭 해야 할 일을 연속해서 출력할 수 있다.
그나저나 While 순환도 같은 일을 할 수 있다.이 경우 변수 response에'NextToken'이 있을 때 후속 처리를 수행하는 형식으로 쓴다.
처음엔 "NextToken은 뭐야! 어딨어!"신축성은 좋지만 쓰고 나서'그랬구나'가 됐어요.

좋은 웹페이지 즐겨찾기