Amazon EC2 で AMI の作成時間を短縮する方法
Amazon EBS-backed AMI を作成する - Amazon Elastic Compute Cloud
AMI を作成する前に、ボリュームのスナップショットを作成しておくと、効率が向上する可能性があります。
AMI の作成前にスナップショットを作成する方法が有効な可能性があります。
AMI の作成プロセス
Amazon EBS-backed AMI を作成する - Amazon Elastic Compute Cloud
AMI 作成プロセスの間、Amazon EC2 はインスタンスのルートボリュームとインスタンスにアタッチされているその他の EBS ボリュームのスナップショットを作成します。
AMI を作成する際、EC2 インスタンスにアタッチされているボリュームのスナップショットが作成されます。
Amazon EBS スナップショット - Amazon EBS
Amazon EBS スナップショットと呼ばれるポイントインタイムコピーを作成することで、Amazon EBS ボリューム上のデータをバックアップできます。スナップショットは増分バックアップです。つまり、最新のスナップショットを作成した時点から変更があったボリューム上のブロックのみが保存されます。これにより、スナップショットを作成するのに要する時間が最小限に抑えられ、データを複製しないことで、ストレージコストが節約されます。
EBS のスナップショットは増分バックアップであるため、最後にスナップショットを作成した時点からの時間が長いほどスナップショットの作成に時間がかかります。
つまり、AMI の作成時間を短縮したい場合にはスナップショットの作成時間を短縮する必要があり、スナップっショットの作成時間を短縮するためには最後にスナップショットを作成した時点からの時間を短くする必要があります。
そのため、以下のプロセスで AMI の作成時間を短縮できる可能性があります。
- スナップショットを作成
- 1 の後に可能な限り早く AMI を作成
定期的なスナップショットの作成方法
定期的にスナップショットを作成する方法としては以下の方法が考えられます。
- AWS Backup の使用
- Amazon Data Lifecycle Manager の使用
- Amazon EventBridge ルールまたは Amazon EventBridge Scheduler の使用
各機能の詳細についてはドキュメントなどをご参照ください。
試してみた
以下のパターンで AMI の作成時間を比較してみました。
- データの追加後に AMI を作成
- データの追加後にスナップショットを作成してから AMI を作成
まずはパターン 1 の準備として EC2 インスタンスを起動し、インスタンス内で以下のコマンドを実行して 1 GB のファイルを作成しました。
$ dd if=/dev/zero of=~/testdata.bin bs=1M count=1024
$ ls -lh ~/testdata.bin
-rw-r--r--. 1 ec2-user ec2-user 1.0G Feb 4 05:36 /home/ec2-user/testdata.bin
上記ファイルの作成後、EC2 インスタンスから AMI を作成しました。
作成日は日本時間で 14:42:31 です。

上記 AMI のステータスが利用可能になるまで約 3 分かかりました。
続いて、パターン 2 の準備としてパターン 1 と同様に EC2 インスタンスを起動、ファイルを追加後にスナップショットを作成しました。
スナップショットの作成には約 1 分 30 秒かかりました。
その後、AMI を作成したところ、AMI の作成時間は約 1 分 30 秒でした。
以上より、簡易的に検証した限りではスナップショットの作成によって AMI の作成時間を短縮できました。
ただし、試行回数が少なくシンプルな検証なので参考情報にとどめて頂ければ幸いです。
まとめ
今回は Amazon EC2 で AMI の作成時間を短縮する方法を紹介しました。
どなたかの参考になれば幸いです。
Discussion