使用Python脚本导出
import json
import csv
import os
import subprocess
from typing import List, Dict
import re
# AWS凭证通过环境变量获取(避免硬编码)
# ACCESS_KEY = os.getenv('AWS_ACCESS_KEY_ID')
# SECRET_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
# REGION = 'ap-southeast-1'
# 设置访问密钥和区域
ACCESS_KEY = 'AKIARPNIBxxxx'
SECRET_KEY = 'NYt5Qw2RSj0/a5lDih7crQjXRxxxxxx'
REGION = 'ap-southeast-1'
def get_auto_scaling_groups():
try:
result = subprocess.run(
[
'aws', 'autoscaling', 'describe-auto-scaling-groups',
'--region', REGION,
'--output', 'json'
],
env={
**os.environ,
'AWS_ACCESS_KEY_ID': ACCESS_KEY,
'AWS_SECRET_ACCESS_KEY': SECRET_KEY
},
capture_output=True, text=True, check=True
)
return json.loads(result.stdout)['AutoScalingGroups']
except subprocess.CalledProcessError as e:
print(f"Error fetching Auto Scaling groups: {e}")
return []
def extract_target_group_name(target_group_arn):
"""从ARN中提取目标组的名字"""
match = re.search(r'targetgroup/([^/]+)/', target_group_arn)
if match:
return match.group(1)
return ''
def format_field(field_value):
"""将字段值按逗号分隔并换行"""
if not field_value:
return ''
items = field_value.split(',')
return '\n'.join(item.strip() for item in items)
def extract_asg_details(asg):
details = {
'AutoScalingGroupName': asg.get('AutoScalingGroupName', ''),
'LaunchConfigurationName': asg.get('LaunchConfigurationName', ''),
'MinSize': str(asg.get('MinSize', '')), # 确保数值类型转换为字符串
'MaxSize': str(asg.get('MaxSize', '')),
'DesiredCapacity': str(asg.get('DesiredCapacity', '')),
'DefaultCooldown': str(asg.get('DefaultCooldown', '')),
'AvailabilityZones': format_field(', '.join(asg.get('AvailabilityZones', [])), # 格式化可用区
'LoadBalancerNames': format_field(', '.join(asg.get('LoadBalancerNames', [])), # 格式化负载均衡器名称
'TargetGroupNames': format_field(', '.join([extract_target_group_name(tg) for tg in asg.get('TargetGroupARNs', [])])), # 格式化目标组名称
'HealthCheckType': asg.get('HealthCheckType', ''),
'HealthCheckGracePeriod': str(asg.get('HealthCheckGracePeriod', '')), # 确保数值类型转换为字符串
'VPCZoneIdentifier': format_field(asg.get('VPCZoneIdentifier', '')), # 格式化VPCZoneIdentifier
'CreatedTime': asg.get('CreatedTime', '').split('.')[0], # 去掉时间戳中的小数部分
}
return details
def write_to_csv(asg_data, filename='auto_scaling_groups_info.csv'):
fields = ['AutoScalingGroupName', 'LaunchConfigurationName', 'MinSize', 'MaxSize', 'DesiredCapacity',
'DefaultCooldown', 'AvailabilityZones', 'LoadBalancerNames', 'TargetGroupNames', 'HealthCheckType',
'HealthCheckGracePeriod', 'VPCZoneIdentifier', 'CreatedTime']
with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fields)
writer.writeheader()
for asg in asg_data:
writer.writerow(extract_asg_details(asg))
print(f"Auto Scaling组信息已成功提取并保存到 {filename} 文件中。")
if __name__ == "__main__":
asg_data = get_auto_scaling_groups()
if asg_data:
write_to_csv(asg_data)
最终展示结果:
