通过 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)尚未引入,但您可以使用以下几种解决方法:
使用 Selenium 访问 CloudFront 的 AWS 控制台并单击 Download CSV
按钮。您可以在 Python.
中为此编写脚本
您可以使用 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}
需要自己提供,可以从浏览器中找到,也可以通过编程方式准备。
- 使用 CloudFront 生成的日志,如答案和问题代码中所述:
我有一堆 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)尚未引入,但您可以使用以下几种解决方法:
使用 Selenium 访问 CloudFront 的 AWS 控制台并单击
中为此编写脚本Download CSV
按钮。您可以在 Python.您可以使用 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}
需要自己提供,可以从浏览器中找到,也可以通过编程方式准备。
- 使用 CloudFront 生成的日志,如答案和问题代码中所述: