Posted at

AWS Fargate のイメージサイズ毎の起動時間の違い


概要

AWS Fargate の起動が遅くてつらいことが多く、イメージサイズを減らせば速くなるんだろうか、ということを調べてみた。


結果

「起動時間」には以下の構成要素が含まれていると推測する。


  • ENI の Allocate (10秒程度)

  • コンテナイメージの Pull (かかる時間のほとんど)

  • コンテナの起動(Fireclickerの起動?)

  • IAM 関連の処理

AWS のネットワークはだいたいリソースサイズによってパフォーマンスが設定されているものがほとんどなので、Fargate も同様であると考えられる。

そのため、リソースが大きければそのぶんイメージの Pull にかかる時間は短縮されると考えられる。

Fargate のネットワークの性能については、計測された記事があった。

今回、各10回ほど繰替えし計測を行なったが、起動時間の変化はほとんどなかったため、イメージはキャッシュされていないと思われる。


イメージサイズによる起動時間の比較

以下の図は vCPU 0.25, 512 MB RAM のときに、各イメージサイズの起動時間をプロットしたもの。

imageSizeTime.png


vCPU による起動時間の比較

以下の図は、イメージサイズが1024MBのとき、起動時間が vCPU によって変化するのかをプロットしたもの。

vcpu.png


計測環境


Base Image

busybox:latest をベースにした。

FROM busybox

ARG PAD=0
RUN dd if=/dev/urandom of=/padding bs=1M count=$PAD

$ for i in 0 16 32 64 128 256 512 1024 \

do \
docker build -t ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/fargate-test:s$i . --build-arg PAD=$i \
done
$ for i in 0 16 32 64 128 256 512 1024 \
do \
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/fargate-test:s$i \
done


Image Sizes


  • 1.2 MB (Original Size)

  • 16 MB

  • 32 MB

  • 64 MB

  • 128 MB

  • 512 MB

  • 1024 MB


試行回数

各サイズ 10回


Resource


  • 0.25 vCPU, 512 MB

  • 0.5 vCPU, 1024 MB

  • 1 vCPU, 2048 MB

  • 2 vCPU, 4096 MB


Fargate Platform Version

1.3


計測方法

Fargate で RunTask を実行し、DescribeTasks API の結果の createdAtstoppedAt の差を集計した。


RunTask

TASK_ARN=$(aws ecs run-task --cluster fargate-test --task-definition fargate-test:2 --network-configuration 'awsvpcConfiguration={subnets=subnet-593ef401,assignPublicIp=ENABLED}' --launch-type FARGATE --query  'tasks[0].taskArn' --output text)

aws ecs wait tasks-stopped --cluster fargate-test --tasks $TASK_ARN


DescribeTasks

aws ecs describe-tasks --tasks $TASK_ARN --cluster fargate-test