python - 有没有办法使用 AWS Lambda 以流式传输方式将 Cloudwatch 日志导出到 Amazon S3? (Python)

标签 python amazon-web-services amazon-s3 aws-lambda

现在我需要使用 Lambda 以流式传输方式将 Cloudwatch 中的日志导出到 Amazon S3。我在互联网上搜索并编写了一些代码。

import boto3
import calendar
import 

def lambda_handler(event, context):
    # TODO: create an export task from Cloudwatch logs
    #   and export the logs into Amazon S3

    # create client
    client= boto3.client("logs")

    # create export task
    response= client.create_export_task(
        taskName='logs-to-s3-task',
        logGroupName='ec2',
        fromTime= 123, # begin-time
        to=123, # end-time
        destination='some-s3',
        destinationPrefix='ec2-logs'
    )

    print("Response of logs-to-s3 lambda function: "+response)

我还在要导出的 Cloudwatch 日志上设置了触发器。但这里有几个问题:

  1. 一旦 Cloudwatch 日志发生任何更改,如何确保 S3 上有更新。

  2. lambda 的触发逻辑是什么?顾名思义,它应该像某个事件/更改的监听器一样工作。

  3. 如果它作为监听器工作,即在 Cloudwatch 日志发生任何更改时调用,我如何才能仅将新添加的日志更新到 S3 而不是某个时间范围内的所有日志。或者换句话说,如何知道S3中的最新更新,以便我可以将之后的数据导出到S3中。

谢谢!

最佳答案

您的 lambda 函数可以订阅 CloudWatch 日志,它将充当监听器,并且 lambda 函数将在云监视日志事件上触发。

请参阅 AWS 文档中的此示例以供引用 -- http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample

要仅将新添加的日志更新到 s3 中,您可以将该特定事件作为对象写入 s3 中,并使用 boto3 s3 客户端排序时间戳。

希望这有帮助。

关于python - 有没有办法使用 AWS Lambda 以流式传输方式将 Cloudwatch 日志导出到 Amazon S3? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403973/

相关文章:

amazon-web-services - AWS secret 管理器

ios - 将视频从亚马逊流式传输到 iOS 设备

amazon-web-services - Cognito身份池授权/未授权角色的Terraform定义

python - Django Compressor、S3 和 SASS,编译文件未上传

android - 没有互联网连接时应用程序崩溃

python - Pandas 重采样时间序列向后计数(或反向重采样)

python - 图像的反转旋转

python - __repr__() 函数的最佳输出类型和编码实践?

amazon-s3 - S3 java SDK - 设置对象过期

python - 处理硬编码路径的回归测试