通过 aws cli 获取云端使用报告

get cloudfront usage report via aws cli

我有一堆 Cloudfront 分布在多个 AWS 账户中。我想获得 使用报告 所有 Cloudfront 发行版跨所有 AWS 账户

现在,我的更改帐户位已经自动化,但我不确定如何通过 AWS CLI.

获取 CSV 报告

我知道我可以做一些 ClickOps 并通过 the Cloudfront Console 下载报告,就像这里:

但我找不到使用 AWS CLI 获取报告的命令。

我知道 I can get the Cloudfront metrics via the Cloudwatch API 但文档没有提到我应该查询的 API 端点。

此外,还有 aws cloudwatch get-metric-statistics,但我不确定如何使用它来下载 Cloudfront Usage CSV Report


问题如何使用 AWS CLI 获取 AWS 账户中所有分发版的 Cloudfront 使用报告?

为此您需要使用 Cost-Explorer API。

aws ce get-cost-and-usage \                                                                                                        
--time-period Start=2022-01-01,End=2022-01-03 \
--granularity MONTHLY \
--metrics "BlendedCost" "UnblendedCost" "UsageQuantity" \
--group-by Type=DIMENSION,Key=SERVICE Type=TAG,Key=Environment

https://docs.aws.amazon.com/cli/latest/reference/ce/get-cost-and-usage.html#examples

I can't find a Cloudfront API to fetch the Usage Report. I know such report can be constructed from Cloudwatch logs, but I'm lazy and I'd like to download the report directly from Cloudfront.

AWS CLI 中没有此类命令或 Boto3 中的函数(适用于 Python 的 AWS SDK)尚未引入,但您可以使用以下几种解决方法:

  1. 使用 Selenium 访问 CloudFront 的 AWS 控制台并单击 Download CSV 按钮。您可以在 Python.

    中为此编写脚本
  2. 您可以使用 CloudFront 在 AWS 控制台上使用的 curl 命令以 XML 格式获取结果,然后您可以使用 Python 或任何 CLI 将它们转换为 CSV工具。单击 Download CSV 按钮后可以找到该 curl 命令,然后从出现在 Inspect 控制台下的 Network 选项卡下的名为 cloudfrontreporting 的项目中找到 [=] 16=] 浏览器(或使用您选择的任何其他浏览器),在该项目上 right-click 然后单击 Copy as cURL 按钮。

curl命令如下:

curl 'https://console.aws.amazon.com/cloudfront/v3/api/cloudfrontreporting' \
  -H 'authority: console.aws.amazon.com' \
  -H 'sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"' \
  -H 'content-type: application/json' \
  -H 'x-csrf-token: ${CSRF_TOKEN}' \
  -H 'accept: */*' \
  -H 'origin: https://console.aws.amazon.com' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://console.aws.amazon.com/cloudfront/v3/home?region=eu-central-1' \
  -H 'accept-language: en-US,en;q=0.9' \
  -H 'cookie: ${COOKIE}' \
  --data-raw '{"headers":{"X-Amz-User-Agent":"aws-sdk-js/2.849.0 promise"},"path":"/2014-01-01/reports/series","method":"POST","region":"us-east-1","params":{},"contentString":"<DataPointSeriesRequestFilters xmlns=\"http://cloudfront.amazonaws.com/doc/2014-01-01/\"><Report>Usage</Report><StartTime>2022-01-28T11:23:35Z</StartTime><EndTime>2022-02-04T11:23:35Z</EndTime><TimeBucketSizeMinutes>ONE_DAY</TimeBucketSizeMinutes><ResourceId>All Web Distributions (excludes deleted)</ResourceId><Region>ALL</Region><Series><DataKey><Name>HTTP</Name><Description></Description></DataKey><DataKey><Name>HTTPS</Name><Description></Description></DataKey><DataKey><Name>HTTP-BYTES</Name><Description></Description></DataKey><DataKey><Name>HTTPS-BYTES</Name><Description></Description></DataKey><DataKey><Name>BYTES-OUT</Name><Description></Description></DataKey><DataKey><Name>BYTES-IN</Name><Description></Description></DataKey><DataKey><Name>FLE</Name><Description></Description></DataKey></Series></DataPointSeriesRequestFilters>","operation":"listDataPointSeries"}' \
  --compressed > report.xml

其中${CSRF_TOKEN}${COOKIE}需要自己提供,可以从浏览器中找到,也可以通过编程方式准备。

  1. 使用 CloudFront 生成的日志,如答案和问题代码中所述: