如何使用 Python 在 Lambda 中创建 CSV?

man*_*o5k 6 python amazon-s3 amazon-web-services aws-sdk aws-lambda

我想使用保存在 CSV 文件中的 Python 在 Lambda 中创建报告。所以你会找到函数的代码:

import boto3
import datetime
import re

def lambda_handler(event, context):

    client = boto3.client('ce')

    now = datetime.datetime.utcnow()
    end = datetime.datetime(year=now.year, month=now.month, day=1)

    start = end - datetime.timedelta(days=1)
    start = datetime.datetime(year=start.year, month=start.month, day=1)

    start = start.strftime('%Y-%m-%d')
    end = end.strftime('%Y-%m-%d')


    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': "2019-02-01",
            'End':  "2019-08-01"
        },
        Granularity='MONTHLY',
        Metrics=['BlendedCost'],
        GroupBy=[
            {
                'Type': 'TAG',
                'Key': 'Project'
            },
        ]
    )
Run Code Online (Sandbox Code Playgroud)

如何从中创建 CSV 文件?

Rep*_*ith 4

以下是使用 Python 在 Lambda 中创建 CSV 文件的示例函数:

假设变量“response”具有为您创建报告所需的数据,以下代码将帮助您在/tmplambda 函数的文件夹中创建临时 CSV 文件:

import csv
temp_csv_file = csv.writer(open("/tmp/csv_file.csv", "w+"))
# writing the column names
temp_csv_file.writerow(["Account Name", "Month", "Cost"])

# writing rows in to the CSV file
for detail in response:
    temp_csv_file.writerow([detail['account_name'],
                            detail['month'],
                            detail['cost']
                            ])
Run Code Online (Sandbox Code Playgroud)

创建 CSV 文件后,您可以将其上传到 S3 并通过电子邮件发送或使用以下代码将其作为链接共享:

client = boto3.client('s3')
client.upload_file('/tmp/csv_file.csv', BUCKET_NAME,'final_report.csv')
Run Code Online (Sandbox Code Playgroud)

需要记住的要点:

  1. /tmp 是一个大小为 512 MB 的目录存储,可用于存储一些内存/临时文件
  2. 您不应依赖此存储来维护后续 lambda 函数的状态。