十项快速检查,确保你的 AWS 支出处于控制之中
新钛云服已累计为您分享797篇技术干货
在本文中,我们将向你展示如何检查十种最常用的 AWS 服务是否可以轻松降低成本。
你是否对 AWS 账单感到惊讶?或者,也许你继承了一个 AWS 帐户,并被告知 –“它有很多不同的应用程序……没有人真正知道谁负责什么,最好不要删除任何内容。”或者你可能只是觉得你的 IT 支出已经很长时间没有被检查其合理性了。
嗯,今天是你的幸运日!你将了解如何减少 AWS 账单。在本文中,我们将向你展示如何检查十种最常用的 AWS 服务是否可以轻松降低成本。
谷歌的“最常用的AWS服务”的链接列出了以下前十名:
S3
EC2
Lambda
Glacier
SNS
CloudFront
EBS
Kinesis
VPC
S3 是几乎所有 AWS 账户中最常用的服务之一,因此有一些简单的方法可以降低 S3 成本,这真是太好了。我建议的第一件事是将你无意选择存储类型的所有项目移至智能存储类型。AWS 提供了几种不同的方式来存储对象,你存储对象的方式会影响它们对你的收费方式。例如,AWS 允许你选择一种存储计划,该计划存储你不经常查看的对象的成本较低,但每次查看时的成本会稍高一些。这称为存档访问层。“智能”定价的巧妙之处在于,AWS 将使用其存储指标让你自动将未使用的项目移动到存档访问层。如果你想知道如何启用此智能定价,
请访问:
https://s3.console.aws.amazon.com/s3/bucket/YOUR_BUCKET_NAME_HERE/property/int_tiering_config/create?region=YOUR_REGION_HERE
并启用配置。
如果你有经常编辑的对象(你可以使用访问日志来检查它们的编辑频率)并且这些对象启用了版本控制,那么你可以禁用版本控制以节省资金。如果启用版本控制,则每次修改或删除对象时,AWS 都会进行备份,你需要付费。通过禁用版本控制,你将失去未来的备份以及为这些备份支付的费用。或者,如果你想在短时间内保留这些备份,但希望最大限度地降低成本,请考虑使用生命周期规则来使旧版本过期(有关如何执行此操作的更多详细信息,请参阅下面)。请注意,你需要进入并清除已创建的旧备份。
如果你需要备份,请考虑定期备份(每周一次或每月一次)而不是版本控制。你可能以前听过并且在上面听过,但值得重复的另一个建议是使用生命周期规则来使旧对象过期。AWS 允许你设置要在 n 天后删除的项目。
你可以通过在每个有意义的存储桶上使用此功能来减少账单。
有关启用生命周期的具体说明简短而有趣。
转到:
https://s3.console.aws.amazon.com/s3/management/YOUR_BUCKET_NAME_HERE/lifecycle/create?region=YOUR_REGION_HERE 并填写所需的规则。这是一个使旧对象过期并最终删除它们的示例。
你可能还注意到上面的屏幕截图包括“删除过期的删除标记或不完整的分段上传”。将大型对象上传到 S3 分段上传时,如果失败,就会一直等待,直到你进来清理它们,这样可以节省大量费用!
EC2 计费可以说是最直接但也是最难省钱的服务。归结为:(1) 不要过度配置,(2) 关闭不使用的内容,(3) 告诉 AWS 你计划使用的量。
不过度配置听起来很难。部分是这样,但 AWS提供了方法来帮助我们。你可以转到 Trusted Advisor,通过转到 Trusted Advisor 成本优化控制台并查看“低利用率 Amazon EC2 实例”部分,查看哪些 EC2 实例大小不合适。我建议你一次调整 1 个实例大小,并确认调整后没发生任何问题。
也许你有一个开发帐户(或一个 生产/开发/任何类型的帐户)并且有 EC2 实例,并且它们在被使用中......但也许不是一直如此。在这种情况下,“关闭不使用的东西”会变得更加复杂,但并非无法撤消。在Trek10,我们让客户访问我们自己的“EC2 Instance Napper”,它使用 AWS 标签在EC2 实例不使用的时间段内关闭 EC2 实例,并在需要工作时自动重新打开这些 EC2 实例。对此还有许多其他解决方案,从编写自己的脚本到使用 EC2 Instance Scheduler。(如果你不知道特定的 EC2 实例或一组 EC2 实例的用途,则可加分)这是一个很棒的工具,可以通过每天越来越长时间地关闭实例来开始“如果坏了就尖叫”的测试,直到他们永久关闭。
最后,你可能以前听说过另一种方法—使用 RI 或Savings Plans。如果你告诉 AWS 你将在计算资源上花费多少,AWS 就会向你收取更少的费用。我知道我知道。你想说“但我不知道需要做什么,我无法承诺在 11 5 2 个月内拥有指定的计算能力”。我在这里告诉你……是的,你可以!只需承诺你能想象到的最小的Savings Plans即可。当你更加轻松地做出承诺时,你会感觉良好并开始朝着节省更多的方向前进。
这一个并不像其他的那么容易。对于初学者来说,如果你使用 Lambda,与使用其他计算资源相比,你可能会节省很多。使用 Lambda 时省钱的最佳方法是找到最佳内存设置,或者我喜欢称之为“收费点”。AWS 根据使用 Lambda 执行次数、每次执行花费的时间以及执行分配的内存的公式向你收取 Lambda 费用。你的调用次数可能是相对可预测的,但随着你添加更多内存,该函数可能会运行得更快。这意味着通过调整内存分配设置,你可以优化成本。
为了找出“费用点”,我们需要使用标准有效负载测试一些不同的调用,同时调整每次调用的内存设置并记录调用花费的时间。下面的示例采用一个基本的 Lambda 函数,该函数从 S3 中提取信息,并尝试三种不同的内存设置:124MB、512MB 和 1024MB。要继续操作,请选择一些内存阈值并转到 Lambda 控制台。然后手动调用该函数并记下分配的时间(参见粉色方块)和分配的内存(参见蓝色方块)。请注意,无论负载如何,我的 Lambda 都会执行相同的操作,请确保在测试时放入相似/相同的负载,如果负载不可知。
为了准确评估平均运行时间,我建议对每个内存设置多次执行此操作。我的示例仅执行 4 次调用,但我建议至少连续进行 20 次测试,并进行后 10 次调用(前 10 次调用有助于避免冷启动)
一旦你准确获得了每个关联内存设置的平均持续时间,请前往 https://aws.amazon.com/lambda/pricing/并转到 lambda 计算器。我使用 1,000,000 次调用的示例,并填写每个平均持续时间以及分配的内存。
最终价格为:
128MB: 9.24 USD
512MB: 7.30 USD
1024MB: 10.95 USD
因此,在我们的示例中,“收费点”内存设置为 512MB。
阅读上述成本细分步骤后,根据你的场景,你可能渴望一种更自动化的方法来确定最佳内存设置,该方法涉及更少的谷歌表格和更多代码。那么,你是幸运的!查看 AWS Lambda Power Tuning,这是一个开源项目,可以让你部署一系列函数并以代码定义的方式测试内存设置。最后,如果我不提一下 AWS 自己解决这个问题的方案:AWS Compute Optimizer,那就太失职了。
SNS 是一项高度“管理”的托管服务。这意味着没有太多手段可以用来减少账单。确保你的 SNS 成本尽可能低的最快、最简单的方法是确保你使用 us-east-1、us-west-2 或 us-east-, 2,因为这些区域的 SNS API 调用和传输方法的整体成本最低,尽管许多区域与某些 API 调用/传输方法相关。
很好用且很老的CloudFront。在它不便宜之前,它是非常便宜的。
首先,让我们抓住这最简单的胜利。CloudFront 基本上将你的内容存储在全球各地,AWS 存储内容的位置越多,向你收取的费用就越高。要减少 CloudFront 账单,你可以通过转到控制台并单击设置编辑来减少 AWS 存储数据的位置数量,并更改价格等级(按照红色圆圈操作)。
请注意,这意味着你向非美国/欧洲地区提供的内容将会变慢。如果这会给你的企业带来问题,那么也许这不是一个需要降低的成本。
其次,如果你分发大量流量,你可以联系 AWS,让他们知道你愿意每月承诺 10+ TB 的数据并开始讨价还价。我建议在提交 10+ TB 的 CloudFront 数据之前与 AWS 专业认证架构师进行讨论,看看是否有更好的方法来分发必要的数据。
最后,虽然 AWS 在世界各地存储你的内容,但它们会根据从 CloudFront 提取的数据量向你收费。通过告诉你的用户将数据在浏览器中缓存更长时间,他们将减少返回 AWS 的频率,从而减少下载的数据。请注意,这确实意味着从你那里接收内容的人可能无法获得最新内容,因此,这是一个根据更新内容的频率进行调整的解决方案。为了更好地了解如何编辑缓存配置,AWS 此处提供了一些有用的说明。
我最喜欢的两种降低 EBS 成本的方法在聚会上大受欢迎。主要是因为它们既快速又简单。第一个是使用 AWS 的 Trusted Advisor。他们有许多不同的成本优化检查可供查看,但具体而言,请查看“未充分利用的 Amazon EBS 卷”。此部分向你展示了它认为可以缩小的所有 EBS 卷或未附加到实例的 EBS 卷(因此可能可以被清理,除非它们以备份等其他方式使用)。
你所需要做的就是单击每个卷 ID 超链接,如果该卷未在使用,请将其删除!如果正在使用,你应该考虑减小 EBS 卷大小(这有点棘手,但按照此处的说明操作应该没问题)。
你可以执行的第二个检查是检查是否有任何类型为“IOPS”的 EBS 卷。要检查这一点,请输入以下 URL(请确保将该区域替换为你使用的活动区域):
https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#Volumes:volumeType=io2;sort=desc:createTime
https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#Volumes:volumeType=io1;sort=desc:createTime
你将希望控制台看起来像这样:
但是,如果你确实看到卷类型为 io1 或 io2 的 EBS 卷,请转到 CloudWatch 并查看 EBS 卷的使用情况是否与文档中的通用或 IO 卷更加一致。如果 IO 卷的使用量未超过通用阈值,请考虑按照 AWS 文档切换卷类型。
Kinesis 是一个很酷的东西。在不进行应用程序更改的情况下,没有大量快速且简单的更改可以减少你的账单,因此我们将它们分为少量应用申请和大量应用申请。
少量应用申请:
首先,看看是否可以减少支持一个流的分片数量。单个 Kinesis 分片可支持高达 1MB/秒和 1000 条记录/秒的输入速度和 2MB/秒的输出速度。要查看你的 Kinesis 流正在使用多少记录,请转到 CloudWatch 并查看以下三个指标(在流级别):GetRecords.Bytes、IncomingRecords 和 IncomingBytes。接下来,你将需要查看的指标求和并注意间隔(因为上面的指标以秒为单位)。然后你将可以查看该流有多少个分片。
现在,请确保你的Kinesis流数据保留时间尽可能低。为此,请在 CLI 中使用以下命令:
aws kinesis list-streams --region <<region-here>>
Grab all stream names
aws kinesis describe-stream --stream-name <<stream-name-here>> --region <<region-here>> | grep "Retention"
if the retention period is 24 hours you are done, otherwise you can enter the command
aws kinesis increase-stream-retention-period --stream-name RawReports --retention-period-hours 24 to reduce retention
更多特定应用:
接下来的步骤可能比我们之前的步骤需要更多花哨的步骤,因为它们需要应用方面的知识。为了使这篇文章尽可能保持应用程序的通用性,我将在本节末尾给出高级解释并链接到更具体的说明。当你的应用程序将记录放入 Kinesis 时,AWS 将仅接受 25KB 块的有效负载。如果你想提交 26KB,则需要 2 个 put 请求,或者如果你想提交 50KB 的数据,则还需要两个 put 请求。现在,如果你的应用程序在发现有效负载时发送有效负载,你最终会发出带有无用空间的 PUT 请求。例如,如果你的应用程序提交两个不同的 PUT 请求,一个包含 14KB 的数据,另一个包含 2KB 的数据,则第一个请求有 11KB 的未使用空间,第二个请求有 23KB 的未使用空间。如果你修改应用程序以将 14KB 和 2KB 有效负载捆绑到一个 16KB 有效负载中,则只需为 1 个 PUT 请求付费,而不是 2 个。要真正深入了解数据聚合如何为你节省资金,请查看此内容(https://towardsdatascience.com/save-amazon-kinesis-stream-costs-using-records-aggregation-79c8fd9ea748)。
有很多方法可以减少应用程序之间的流量,从而降低与 VPC 相关的成本。如果你的 EC2 实例正在与同一区域中的 S3 或 DynamoDB 进行通信,那么你可能会看到 AWS 账单的一部分用于 NAT 网关流量。AWS 认为应用程序通过 NAT 网关与 S3/DynamoDB 进行通信,将其视为 AWS“外部”将数据传输到 AWS 。AWS 要求你为从 AWS 外部发送到 AWS 的数据支付数据传输费用。AWS一方面收取费用,另一方面也为我们提供了称为Gateway VPC Endpoints的服务。网关 VPC 终端节点可让你在同一区域的 VPC → Dynamodb 或 VPC → S3 之间免费传输数据。设置网关 VPC 端点实际上非常简单,但我不想重复造轮子,因此我将在此处链接 AWS 的说明(https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html )。
我知道你在想什么……也许我不知道。但是,如果你花时间尝试减少 SQS 费用,那么你可能会想“请不要向我推销昂贵且有些复杂的批处理代码更新,该更新需要经过大量测试。”好消息是,本篇文章专注于简单的胜利,所以我会给你一个关于批处理应用程序更新的长篇大论,然后以更轻松的方式接入(这仍然需要一些应用程序更改,对此我感到抱歉)。
SQS 消息最大可达 256KB,但如果消息超过 64KB,该消息将被分解为 64KB 请求块并作为单独的 SQS 消息发送(即发送单个 150KB 消息将被分解为 3 条消息并按 3 个请求计费,而不是一个请求) 。为了减少你的 SQS 账单,你可以编写一个特殊的批处理函数来聚合消息并将它们压缩为 64 KB 的块,如果这听起来像你感兴趣的内容,我建议你阅读此博客(https://www.moengage.com/blog/reduce-sqs-cost/ )。
现在进行更简单的更改。根据 SQS 的工作方式,如果你调用 ReceiveMessage API,无论你是否获得任何信息,你都需要付费。没错,所有 API 调用都算作请求并计费,即使是空的调用也是如此。因此,如果你的应用程序设置为必须连接SQS 才能查看哪些消息可用,那么你可能会因大量返回为空的 AWS 调用而花费额外的钱。但是,AWS 为我们提供了解决方案……你可以告诉 AWS 在请求信息后等待 n 秒(其中 n 介于 \[1-20] 之间)以查看队列中是否有消息。换句话说,你可以将 AWS 设置为如果队列中没有任何内容,则在返回信息之前等待最多 n 秒。假设你的应用程序可以等待,这是一个相当简单的更改:
sqs = boto3.client('sqs')
# Create a SQS queue with long polling enabled
response = sqs.create_queue(
QueueName='EXPENSIVE_QUEUE_NAME',
)
sqs = boto3.client('sqs')
# Create a SQS queue with long polling enabled
response = sqs.create_queue(
QueueName='CHEAPER_QUEUE_NAME',
Attributes={'ReceiveMessageWaitTimeSeconds': '20'}
)
更好的是,如果你的应用程序对信息的时间敏感性要求不高,那么可以考虑减少访问SQS的次数(比如,仅在特定的时间间隔内排空队列)。
从技术角度来说,CloudWatch指标并不在top10节约成本的排行榜中,但我有一些快速提示可以让你的账单省下不少钱,而且我已经把S3和Glacier组合起来作弊了,所以我觉得我还是应该把它提一下。本技巧仅对使用采集 CloudWatch 指标的监控工具(例如 Datadog)的用户有帮助(我们推荐使用 Datadog - 请在此处查看我们使用 Datadog 所做的所有很酷的事情)。从更高层面来看,这些类型的监控工具的作用是每 n 分钟调用 AWS 并获取包括 x、y、z 服务在内的指标列表。要减少账单,你可以增加 n 以便减少返回 AWS 的频率,这意味着更少的 API 调用,意味着更低的账单。或者,你可以减少服务数量,更少的服务意味着更少的 API 调用,意味着更低的费用。
如果你想知道通过这种方法可以节省多少钱,首先进入Cost Explorer并查看是否存在大量的“GetMetricData”API操作费用,请单击此处获取预填充的 Cost Explorer 查询。
在上图中,该 AWS 账户仅在 CloudWatch get api 成本上就花费了近 1000 美元/月。
接下来,转到你的监控工具(如果使用 Datadog,请专门前往此处:https://app.datadoghq.com/account/settings#integrations/amazon-web-services。你需要做的是删除/取消选中你未主动监控的任何 AWS 服务(见下图)或控制面板。减少 Datadog 在调用 AWS 时必须获取指标的服务数量,从而减少 API 调用数量,从而减少你的费用。此外,你可以使用 Datadog 开具账单,并询问 Datadog 访问你的 AWS 账户的频率(它们有不同的设置,例如每 5 分钟、每 10 分钟等)。如果你愿意,你可以要求 Datadog 减少他们访问你的 AWS 账户的频率(但请记住,这意味着你账户中的数据更新频率会降低)。
如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。
原文地址:
https://www.trek10.com/blog/ten-quick-checks-that-your-aws-spending-is-under-control
推荐阅读
推荐视频
微信扫码关注该文公众号作者