Подлинник состоит из двух частей.Выборка групп безопасности учетной записи A и учетной записи B. Когда он пишет в CSV, он сначала записывает группы безопасности учетной записи A, а затем перезаписывает тот же CSV с группами безопасности учетной записи B. Поэтому, когда я загружаю файл, он содержит толькорезультаты из учетной записи B.
Мне нужно решение, чтобы добавить группы безопасности B на один лист, или создать новый лист для учетной записи B в том же CSV.Пожалуйста, объясните мне, как этого добиться.
Спасибо за чтение.
import boto3
import csv
import io
from io import BytesIO
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
a_dev_client = boto3.client('ec2', region_name='eu-west-1')
def lambda_handler(event, context):
sts = boto3.client('sts')
b_dev = sts.assume_role(
RoleArn='arn:aws:iam::2222222222222:role/Unused_Security_Groups',
RoleSessionName='test'
)
b_dev_client = boto3.resource(
'ec2',
region_name='eu-west-1',
aws_access_key_id=b_dev["Credentials"]["AccessKeyId"],
aws_secret_access_key=b_dev["Credentials"]["SecretAccessKey"],
aws_session_token=b_dev["Credentials"]["SessionToken"]
)
def a_dev():
Account_Name = 'A'
regions = ['eu-west-1','eu-west-2','us-east-2','us-west-1','us-west-2','us-east-1','ap-northeast-2','ap-southeast-1','ap-southeast-2','ap-northeast-1','ca-central-1','eu-west-3']
csvio = io.BytesIO()
writer = csv.writer(csvio)
writer.writerow([
'Account Name',
'Region',
'SecurityGroup-Id'
])
for region in regions:
ec2 = boto3.resource('ec2', region_name=region)
sgs = list(ec2.security_groups.all())
insts = list(ec2.instances.all())
all_sgs = set([sg.group_id for sg in sgs])
all_inst_sgs = set([sg['GroupId'] for inst in insts for sg in
inst.security_groups])
unused_sgs = all_sgs - all_inst_sgs
for elem in unused_sgs:
writer.writerow([
Account_Name,
region,
elem
])
s3 = boto3.client('s3')
s3.put_object(Body=csvio.getvalue(), ContentType='application/vnd.ms-excel', Bucket='######', Key='Unused_Security_Groups.csv', ACL='public-read')
csvio.close()
s3.get_object(Bucket='#######', Key='Unused_Security_Groups.csv')
a_dev()
def b_dev():
Account_Name = 'B'
#regions = ['eu-west-1','eu-west-2','us-east-2','us-west-1','us-west-2','us-east-1','ap-northeast-2','ap-southeast-1','ap-southeast-2','ap-northeast-1','ca-central-1','eu-west-3']
regions = ['eu-west-1']
csvio = io.BytesIO()
writer = csv.writer(csvio)
writer.writerow([
'Account Name',
'Region',
'SecurityGroup-Id'
])
for region in regions:
#ec2 = boto3.resource('ec2', region_name=region)
sgs = list(b_dev_client.security_groups.all())
insts = list(b_dev_client.instances.all())
all_sgs = set([sg.group_id for sg in sgs])
all_inst_sgs = set([sg['GroupId'] for inst in insts for sg in
inst.security_groups])
unused_sgs = all_sgs - all_inst_sgs
for elem in unused_sgs:
writer.writerow([
Account_Name,
region,
elem
])
s3 = boto3.client('s3')
s3.put_object(Body=csvio.getvalue(), ContentType='application/vnd.ms-excel', Bucket='#######', Key='Unused_Security_Groups.csv', ACL='public-read')
csvio.close()
s3.get_object(Bucket='#######', Key='Unused_Security_Groups.csv')
b_dev()
Обновление:
После того, как я пытаюсь добавить CSV, я получаю «Только для чтения»Файловая система "Ошибка.
def b_dev():
Account_Name = '2'
regions = ['us-west-1']
csvio = io.BytesIO()
writer = csv.writer(csvio)
fields=['Account Name','Region','SecurityGroup-Id']
with open('Unused_Security_Groups.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
for region in regions:
#ec2 = boto3.resource('ec2', region_name=region)
sgs = list(bi_dev_client.security_groups.all())
insts = list(bi_dev_client.instances.all())
all_sgs = set([sg.group_id for sg in sgs])
all_inst_sgs = set([sg['GroupId'] for inst in insts for sg in
inst.security_groups])
unused_sgs = all_sgs - all_inst_sgs
for elem in unused_sgs:
writer.writerow([
Account_Name,
region,
elem
])
s3 = boto3.client('s3')
s3.put_object(Body=csvio.getvalue(), ContentType='application/vnd.ms-excel', Bucket='######', Key='Unused_Security_Groups.csv', ACL='public-read')
csvio.close()
s3.get_object(Bucket='######', Key='Unused_Security_Groups.csv')