通过dict-python循环的问题



我遇到了一个问题,实际上成功地循环了AWS配置的boto3结果。通过我的测试,我能够执行循环;然而,它只输出相同的违反而不是针对不同ARN的每个违反。

我意识到问题在代码中的位置,因为我正在做以下操作:

for arn in configRule.items():
acmArn = configRule['EvaluationResults'][0]['EvaluationResultIdentifier']['EvaluationResultQualifier']['ResourceId']

但是,当我尝试取出[0]以使其不是特定项目时;列表索引必须是整数或切片,而不是str";。

我的问题是,是否有一种实际的方法可以使该值递增,从而能够获得违规的不同ARN?很抱歉,如果这是一个简单的答案,仍然是Python的新手,所以试着弄清楚这一切。

输出示例:

{
"EvaluationResults": [
{
"Annotation": "Certificate will expire on 2023-01-21T23:59:59.000Z",
"ComplianceType": "NON_COMPLIANT",
"ConfigRuleInvokedTime": "2022-01-03 18:28:54.939000+00:00",
"EvaluationResultIdentifier": {
"EvaluationResultQualifier": {
"ConfigRuleName": "acm-certificate-expiration-check",
"ResourceId": "arn:aws:acm:us-west-2:xxxx:certificate/39a95537-e5aa-46dd-bc9b-04d7b2606bd0",
"ResourceType": "AWS::ACM::Certificate"
},
"OrderingTimestamp": "2021-12-22 00:29:01+00:00"
},
"ResultRecordedTime": "2022-01-03 18:28:55.672000+00:00"
},
{
"Annotation": "Certificate will expire on 2023-01-10T23:59:59.000Z",
"ComplianceType": "NON_COMPLIANT",
"ConfigRuleInvokedTime": "2022-01-03 18:28:54.939000+00:00",
"EvaluationResultIdentifier": {
"EvaluationResultQualifier": {
"ConfigRuleName": "acm-certificate-expiration-check",
"ResourceId": "arn:aws:acm:us-west-2:xxxx:certificate/493de1e8-2bcb-42c7-96df-ce88bdeac64c",
"ResourceType": "AWS::ACM::Certificate"
},
"OrderingTimestamp": "2021-12-12 18:25:14+00:00"
},
"ResultRecordedTime": "2022-01-03 18:28:55.683000+00:00"
}
],
"ResponseMetadata": {
"HTTPHeaders": {
"content-length": "955",
"content-type": "application/x-amz-json-1.1",
"date": "Mon, 03 Jan 2022 20:13:06 GMT",
"strict-transport-security": "max-age=86400",
"x-amzn-requestid": "a6e51323-9e4c-44c7-a15a-ea0314392ab6"
},
"HTTPStatusCode": 200,
"RequestId": "a6e51323-9e4c-44c7-a15a-ea0314392ab6",
"RetryAttempts": 0
}
}
对于您的示例,

configRules.items()将是一个包含单个元组('EvaluationResults', [...])的序列。你其实并不在乎那把钥匙:你在身体里硬编码。您真正想要的是迭代列表configRule['EvaluationResults']:中的dict

for arn in configRule['EvaluationResults']:
acmArn = arn['EvaluationResultIdentifier']['EvaluationResultQualifier']['ResourceId']

所以,我不确定这是否是正确的方法,但目前我就是这样做的。这允许我在那里添加一个变量,并在每次执行循环时增加它。

我相信有更好的方法可以做到这一点,但这正是我在做一些测试时发现的。

i = 0
for key, value in configRule.items():
acmArn = configRule['EvaluationResults'][i]['EvaluationResultIdentifier']['EvaluationResultQualifier']['ResourceId']
i+=1

最新更新