Fargate でコンテナ起動までの時間が短くなったらしいのであらためて計測してみた
2021-07-29以前 Fargate でのコンテナ起動までの時間を計測しましたが、どうやら最近その時間が短くなっているという話を見かけたので実際に計測して前回と比較してみます。
目次
前回
前回計測したのは今年の 2月でした。
AWS SDK for Go V2 を使って Fargate for ECS でタスクを実行してコンテナが起動するまでの時間を計測してみた - michimani.net
そこから約半年たった今、 Fargate でのコンテナ起動までの時間が短くなったらしいので、あらためて計測してみます。
計測する条件
条件は前回同様に下記の内容で実施します。
- イメージサイズ: 約 256 MB
- CPU: 256 MB
- メモリ: 512 MB
❯ docker images fargate-speed-test
REPOSITORY TAG IMAGE ID CREATED SIZE
fargate-speed-test latest fc479f1d67e2 5 months ago 270MB
❯ cat task-definition.json | jq .
{
"family": "fargate-speed-test",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "fargate-speed-test-app",
"image": "000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/fargate-speed-test",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/dev/fargate-speed-test-task",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "dev"
}
}
}
],
"requiresCompatibilities": [
"FARGATE"
],
"executionRoleArn": "arn:aws:iam::000000000000:role/fargate-speed-test-task-exec-role",
"cpu": "256",
"memory": "512"
}
やってみる
では計測してみます。ちなみに、前回の結果は 37.879 sec でした。残念ながら単発の実行時間しか残していなかったのでなんとも言えないですが、今回は 10 回くらい実行してその平均を出して比較してみます。
コードは前回と同じこれを使います。
とりあえず 1回。
❯ go run main.go
Task Created.
TaskARN: arn:aws:ecs:ap-northeast-1:000000000000:task/fargate-speed-test-cluster/000000000000000000000000e628db6d
aws ecs describe-tasks --cluster fargate-speed-test-cluster --tasks arn:aws:ecs:ap-northeast-1:000000000000:task/fargate-speed-test-cluster/000000000000000000000000e628db6d
Task Stopped.
TaskARN: arn:aws:ecs:ap-northeast-1:000000000000:task/fargate-speed-test-cluster/000000000000000000000000e628db6d
CreatedAt: 2021-07-29 13:34:58.037 +0000 UTC
StartedAt: 2021-07-29 13:35:38.626 +0000 UTC
StoppedAt: 2021-07-29 13:36:23.11 +0000 UTC
TakenTimeToStart: 40.589s
🤔
とりあえず、ループで実行するようにコード修正してあと 9回計測してみます。
func main() {
- if err := runECSTask(); err != nil {
- fmt.Println(err.Error())
+ var wg sync.WaitGroup
+
+ for i := 0; i < 9; i++ {
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ if err := runECSTask(); err != nil {
+ fmt.Println(err.Error())
+ }
+ }()
}
+ wg.Wait()
}
❯ go run main.go
TakenTimeToStart: 25.07
TakenTimeToStart: 25.278
TakenTimeToStart: 25.16
TakenTimeToStart: 24.759
TakenTimeToStart: 30.34
TakenTimeToStart: 46.153
TakenTimeToStart: 47.481
TakenTimeToStart: 37.311
TakenTimeToStart: 55.649
最初の 1 回と合わせて平均とると、 35.779 sec 。
うーん…。もう一度 10 回実行してみます。
❯ go run main.go
TakenTimeToStart: 24.852s
TakenTimeToStart: 24.819s
TakenTimeToStart: 26.999s
TakenTimeToStart: 25.865s
TakenTimeToStart: 26.792s
TakenTimeToStart: 24.165s
TakenTimeToStart: 24.585s
TakenTimeToStart: 24.914s
TakenTimeToStart: 43.41s
TakenTimeToStart: 36.45s
平均 28.285 sec 。早くなってる感が出てきました。
という感じで合計 100 回実行した平均値は 33.087 sec でした。
前回が 37.879 sec だったので、絶対値だと 4.792 sec 、割合にすると 12.65 % 短くなってます。
まとめ
Fargate でのコンテナ起動までの時間が短くなったらしいので試してみた話でした。結果としては、 10% ほど短縮されたかな?くらいの印象でした。他のイメージサイズ、CPU、メモリの組み合わせだと違った結果が出てくるかもしれません。
現時点で Fargate ではイメージキャッシュが利用できないので、そこをなんとか…という思いは変わらずです。前回載せた issue もコメントは増えてますが、実現は難しそうなのでは?という意見もあります。
どうなるんでしょうか。
comments powered by Disqus