Lambda函数写入CSV并上传到S3 [英] Lambda Function to write to csv and upload to S3
问题描述
我有一个Python脚本,可获取未使用的安全组的详细信息.我希望将其写入CSV文件并上传到S3存储桶.
I have a Python Script that gets the details of the unused security groups. I want that to write into a CSV file and upload to S3 Bucket.
当我在本地计算机上对其进行测试时,它将在本地计算机上写入CSV.但是,当我将其作为lambda函数执行时,它需要一个保存CSV的位置.所以我正在使用s3.
When I test it in local machine it writes to CSV in the local machine. But when I execute that as a lambda function, it needs a place to save the CSV. So I am using s3.
import boto3
import csv
ses = boto3.client('ses')
def lambda_handler(event, context):
with open('https://unused******-
1.amazonaws.com/Unused.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([
'Account Name',
'Region',
'Id'
])
ec2 = boto3.resource('ec2')
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
])
我想将"elem"的结果写入csv文件并上传到S3 Bucket.请指教.
I want to write the result of "elem" into csv file and upload to S3 Bucket. Kindly advice.
推荐答案
通过使用 StringIO()
,您无需将csv保存到本地,只需将IO上传到S3.试试我的代码,让我知道是否有问题,因为我无法测试代码,但在其他情况下也可以使用.
By using StringIO()
, you don't need to save the csv to local and just upload the IO to S3. Try my code and let me know if something wrong because I can't test the code but it was worked for other cases.
import boto3
import csv
import io
s3 = boto3.client('s3')
ses = boto3.client('ses')
def lambda_handler(event, context):
csvio = io.StringIO()
writer = csv.writer(csvio)
writer.writerow([
'Account Name',
'Region',
'Id'
])
ec2 = boto3.resource('ec2')
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.put_object(Body=csvio.getvalue(), ContentType='application/vnd.ms-excel', Bucket='bucket', Key='name_of.csv')
csvio.close()
这篇关于Lambda函数写入CSV并上传到S3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!