AWS Python:从响应返回值

2024-09-28 22:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是让lambda解析cloudformation堆栈漂移资源,然后打印出已修改的所有安全组的列表

以下内容将返回特定堆栈的所有已修改资源的列表:

import boto3

cfn_client = boto3.client('cloudformation')

drifts = cfn_client.describe_stack_resource_drifts(
    StackName='my_stack>',
    StackResourceDriftStatusFilters=[
      'MODIFIED',
    ],
    MaxResults=100
)

返回dict响应,其中包含(我只包含与问题相关的字段):

{
  'ResponseMetadata': {
    'RetryAttempts': 0,
    'HTTPStatusCode': 200,
    'RequestId': '12b1f618-722e-4b08-9534-123',
    'HTTPHeaders': {
      'content-type': 'text/xml',
      'content-length': '118369',
      'vary': 'accept-encoding',
      'date': 'Tue, 18 Aug 2020 11:11:38 GMT'
    }
  },
  u 'StackResourceDrifts': [{
    u 'StackId': 'arn:aws:cloudformation:eu-west-1:12345678:stack/my_stack/12345,
    u 'ResourceType': 'AWS::EC2::SecurityGroup',
    u 'PhysicalResourceId': 'sg-987654321xyz',
    u 'StackResourceDriftStatus': 'MODIFIED',
    u 'LogicalResourceId': 'MySecGrp1'
  }, {
    u 'StackId': 'arn:aws:cloudformation:eu-west-1:12345678:stack/my_stack/12345,
    u 'ResourceType': 'AWS::ElasticLoadBalancingV2::TargetGroup',
    u 'PhysicalResourceId': 'arn:aws:elasticloadbalancing:eu-west-1:12345678:targetgroup/my_resource_id',
    u 'StackResourceDriftStatus': 'MODIFIED',
    u 'LogicalResourceId': 'NyTargerGroup1'
  }, {
    u 'StackId': 'arn:aws:cloudformation:eu-west-1:12345678:stack/my_stack/12345,
    u 'ResourceType': 'AWS::EC2::Instance',
    u 'PhysicalResourceId': 'i-123456789xyz',
    u 'StackResourceDriftStatus': 'MODIFIED',
    u 'LogicalResourceId': 'MyServer1'
  }, {
    u 'StackId': 'arn:aws:cloudformation:eu-west-1:12345678:stack/my_stack/12345,
    u 'ResourceType': 'AWS::EC2::SecurityGroup',
    u 'PhysicalResourceId': 'sg-123456789xyz',
    u 'StackResourceDriftStatus': 'MODIFIED',
    u 'LogicalResourceId': 'MySecGrp2'
  }]
}

我试图打印出PhysicalResourceIdLogicalResourceId,其中ResourceType==AWS::EC2::SecurityGroup。一个响应中可能有多个这样的响应

我只知道如何返回一个特定的值,但这离我仍然需要的还很远:print (drifts ['StackResourceDrifts'][0]['ResourceType'])

我是Python新手,因此希望您能帮助我实现这一点


Tags: awsstackmyec2arnmodifiedwesteu
1条回答
网友
1楼 · 发布于 2024-09-28 22:30:42

试试这个。最终将是字典列表

final = []
for item in drifts['StackResourceDrifts']:
    if item['ResourceType'] == 'AWS::EC2::SecurityGroup':
        final.append({'PhysicalResourceId': item['PhysicalResourceId'],
              'LogicalResourceId': item['LogicalResourceId']
              })

print(final)

相关问题 更多 >