获取 AWS CloudFront Invalidations 使用情况(上个月)

Get AWS CloundFront Invalidations usage (last month)

我正在使用 AWS Cloudfront Java SDK 来自动执行一些任务,其中之一是使分发无效。我读到前 1000 个失效请求(实际上是路径)是免费的,之后它们 are billed.

我在 SDK 中没有看到任何功能来获取上个月为帐户执行的 invlidation 请求总数(不是分布)。有什么办法可以得到吗?

如果无法使用 SDK 获取它,我想我会创建一个无效请求使用情况的本地记录。

这不是通过 API 公开的。

您可以在 Cost & Usage Report 中找到它。

请记住,失效请求支持通配符,因此通常可以通过单个请求和单个路径使您需要的所有内容失效。使用这种方法,您可能会使更多的无效,但这有时是一个可以接受的权衡。

没有直接的方法可以在 SDK 中获取它,但是,您可以在 CloudTrail 中监控 CloudFront Invalidations 并在那里获取您需要的数据。

我会 post 一个代码示例,但是,虽然 AWS 是我的技能组合,但 JAVA 不是。尽管如此,我检查了 JAVA SDK,似乎可以使用完成此操作的方法。在高级别,您将在您的帐户上启用 CloudTrail,然后使用 JAVA SDK 中 CloudTrail API 的 lookupEvents 方法来查找名为 CreateInvalidation 的事件。

虽然它不是 JAVA 中的直接示例,但您也可以从 CLI 执行此操作:

aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=CreateInvalidation

这将 return 一系列事件:

{
    "Events": [
        {
            "EventId": "9a999999-9999-9aaa-aa99-a9999a9aa9aa",
            "EventName": "CreateInvalidation",
            "ReadOnly": "false",
            "AccessKeyId": "ASXXXXXXXXXXXXXXXXXX",
            "EventTime": 1566438448.0,
            "EventSource": "cloudtrail.amazonaws.com",
            "Username": "user.name",
            "Resources": [],
            "CloudTrailEvent": "{FULL-CLOUDTRAIL-EVENT-DATA-HERE}"
        }
    ]
}

如您所见,每个事件都有一个时间戳,EventTime。遍历数组,检查时间戳是否在您要求的时间范围内,如果它在您的时间范围之外,您可以简单地将其从数组中删除,然后在完成后简单地计算数组中的剩余项目。

请注意,API 响应可能已分页,因此您必须注意响应中的 NextToken,这表明有更多事件要获取。

编辑: 此外,值得注意的是 CloudFront 是一项全球服务。作为一项全球服务,CloudFront 事件记录在 us-east-1 区域 (see here) 的 CloudTrail 中。