问题描述
在使用 AWS 的 Fargate 时,对其计费模型有一些疑问。根据亚马逊的官方文档,Fargate 的计费是基于从开始下载容器镜像(docker pull)到 Amazon ECS 任务终止的时间内使用的 vCPU 和内存资源计算的,按最接近的秒数向上取整。最低收费为1分钟。
用户想知道以下两个问题:
a) 这是否意味着它只会在容器消耗 CPU/内存资源的时间段内收费?
b) 它是否基于我创建任务时的预分配来收费?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据 AWS 的官方文档,Fargate 的计费是基于容器使用的 vCPU 和内存资源的时间计算的。具体实现方式可能是通过一个编排器在 Fargate 服务内部的特定信号或事件上启动和停止计时器。从执行 pull 命令开始计费,直到编排过程发出或接收到您的进程的终止命令/信号为止。可以将其概念上类比为在 shell 脚本中包装 time { :; }
。
以下是一个概念上的伪代码示例,展示了计费的方式:
cpu_charges = num_cpus * cpu_rate_per_second
mem_charges = mem_size * mem_rate_per_second
charge_rate = cpu_charges + mem_charges
elapsed_time = time() {
docker pull foo_image
docker run --cpus num_cpus -m mem_size -it --rm foo_image
}
bill_for elapsed_time * charge_rate
目前我还不知道有关 AWS 如何内部实现这一机制的公开文档,但对于大多数实际目的来说,这个概念上的示例已经足够准确了。
方案2
请注意以下操作注意版本差异及修改前做好备份。
目前我还不知道有关 AWS 如何内部实现这一机制的公开文档,但是可以考虑编写脚本或使用工具来模拟计费过程。您可以使用time
命令手动控制计费的开始和结束时间,或者使用一些第三方工具来模拟计费过程。
以上是关于 AWS Fargate 计费模型的解决方案。希望对您有所帮助!
正文完