【问题标题】:AWS Boto3 "TypeError: list indices must be integers or slices, not str"AWS Boto3“类型错误:列表索引必须是整数或切片,而不是 str”
【发布时间】:2020-08-26 14:40:35
【问题描述】:

我正在尝试获取带有首选项目“堆栈名称”、“堆栈状态”和“漂移信息”的 CF 堆栈列表。

我尝试了以下,它抛出一个错误

"TypeError: 列表索引必须是整数或切片,而不是 str"


import boto3
client = boto3.client('cloudformation')

response = client.list_stacks(
    )

list = response['StackSummaries']['StackName']

print(list)

这是响应语法。

   'StackSummaries': [
        {
            'StackId': 'string',
            'StackName': 'string',
            'TemplateDescription': 'string',
            'CreationTime': datetime(2015, 1, 1),
            'LastUpdatedTime': datetime(2015, 1, 1),
            'DeletionTime': datetime(2015, 1, 1),
            'StackStatus': 'CREATE_IN_PROGRESS'|'CREATE_FAILED'|'CREATE_COMPLETE'|'ROLLBACK_IN_PROGRESS'|'ROLLBACK_FAILED'|'ROLLBACK_COMPLETE'|'DELETE_IN_PROGRESS'|'DELETE_FAILED'|'DELETE_COMPLETE'|'UPDATE_IN_PROGRESS'|'UPDATE_COMPLETE_CLEANUP_IN_PROGRESS'|'UPDATE_COMPLETE'|'UPDATE_ROLLBACK_IN_PROGRESS'|'UPDATE_ROLLBACK_FAILED'|'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS'|'UPDATE_ROLLBACK_COMPLETE'|'REVIEW_IN_PROGRESS',
            'StackStatusReason': 'string',
            'ParentId': 'string',
            'RootId': 'string'
        },
    ],
    'NextToken': 'string'
}

我只想列出包含以下项目的堆栈。 “堆栈名称”、“堆栈状态”和“漂移信息”。请对此进行指导。

谢谢!

更新:

import boto3
client = boto3.client('cloudformation')

response = client.list_stacks(
    )

for stack in response['StackSummaries']:

    stack_summary = stack['StackName']

    print(stack_summary)

【问题讨论】:

    标签: python amazon-web-services amazon-cloudformation boto3


    【解决方案1】:
    import boto3
    client = boto3.client('cloudformation')
    
    response = client.list_stacks()
    
    for stack in response['StackSummaries']:
    
        stack_summary = stack['StackName']
        stack_status = stack['StackStatus']
        stack_drift_status = stack['DriftInformation']['StackDriftStatus']
        stack_drift_timestamp = stack['DriftInformation']['LastCheckTimestamp']
    

    【讨论】:

    • 谢谢!回溯(最后一次调用):文件“ListCF.py”,第 12 行,在 stack_drift_timestamp = stack['DriftInformation']['LastCheckTimestamp'] KeyError: 'LastCheckTimestamp'
    • 您将需要调试返回的信息以确定原因。如果您使用print(stack),您将看到返回响应的内容,并且您可以确定要采取的行动方案。 LastCheckTimestamp 可能根本没有填充给定堆栈。如果您不需要该信息,只需从程序中删除该行即可。
    【解决方案2】:

    应该是这样的:

    list = response['StackSummaries'][0]['StackName']
    

    StackSummaries 是一个数组。

    对于完整的记录,如何在循环中进行:

    for stack in response['StackSummaries']:
    
        stack_summary = stack['StackName']
    

    附言 不要使用list 作为变量名。

    【讨论】:

    • 谢谢,但它只打印第一个堆栈的名称...我的要求是,它必须列出所有堆栈的名称、状态和漂移信息。谢谢
    • @user1562991 我在答案中添加了循环。
    • 谢谢,我知道了这个名字。请协助添加另外两个值,“状态”和“漂移信息”。
    • @user1562991 你必须在循环体中处理 stack_summaries,而不是超出它。
    • 是的,没错!我能够获得堆栈名称。请问如何获取“堆栈状态”和“漂移信息”。谢谢
    【解决方案3】:

    返回指定堆栈的描述;如果未指定堆栈名称,则返回描述(使用“describe_stacks”)。

    import boto3
    client = boto3.client('cloudformation')
    
    response = client.describe_stacks(
      StackName='string',
      StackStatus= 'string',
      DriftInformation': {
                'StackDriftStatus': 'DRIFTED'|'IN_SYNC'|'UNKNOWN'|'NOT_CHECKED',
                'LastCheckTimestamp': datetime(2015, 1, 1)
            } 
    )
    

    【讨论】:

    • 回溯(最近一次调用最后一次):文件“ListCF1.py”,第 8 行,在 'StackDriftStatus':'DRIFTED'|'IN_SYNC'|'UNKNOWN'|'NOT_CHECKED',类型错误:| 不支持的操作数类型:“str”和“str”
    • 我认为这个答案混淆了输出数据和输入参数。
    • @JohnRotenstein 急切地等着你!!!请协助我。根据 Marcin,我可以获得堆栈名称。请协助获取状态和漂移信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2017-10-09
    相关资源
    最近更新 更多