BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AWS、"CloudFormation"でのスタック作成を最大40%高速化

AWS、"CloudFormation"でのスタック作成を最大40%高速化

原文リンク(2024-03-17)

Amazonは、"AWS CloudFormation"におけるスタック作成プロセスを最適化して高速化し、大幅な改善を達成した。同社はリソース作成プロセスを2つのフェーズ(作成と安定化)に分割し、スタック内の他のリソースをより早く作成可能にした。この変更はすべてのリージョンで利用可能であり、ユーザーによる操作は必要ない。

これまでのAWS CloudFormation(CF)のスタックプロビジョニングプロセスは、リソースのプロビジョニングに関わる全てのタスクを1つのステップにまとめていた。スタック内の各リソースに対して、CloudFormationはプロビジョニングプロセスの開始時と終了時にCREATE IN PROGRESSと CREATE COMPLETEイベントが発生していた。しかし内部的には、CFは関連するサービスにリソースの作成を要求し、その後リソースが使用可能になる(作成され安定する)のを待機している。

AWSサポートのプリンシパルエンジニアであるBhavani Kanneganti氏と、AWSのシニアプロダクトマネージャーであるIdriss Laouali Abdou氏は、リソースの安定化の必要性についてこのように説明する。

AWSリソースをプロビジョニングする際、CloudFormationはリソースを作成するために基盤となるサービスに必要なAPIコールを行います。作成後、CloudFormationは最終的な整合性チェックを行い、リソースが意図したトラフィックを処理する準備ができていることを確認するために、最終的な整合性チェックを実行します。「中略」リソースの安定化はCloudFormation独自のものではなく、すべてのIaCツールがある程度処理しなければなりません。

当初のアプローチでは、新しいリソースを作成する前に、依存するリソースがすべて使用可能な状態であるかを確認していたが、常に安定化を待つことで遅延が発生し、ほとんどの場合スタック作成が必要以上に長くなっていた。チームは、リソースの作成(AWSサービスに新しいリソースをリクエストする)とリソースの安定化(リソースが使用可能になるのを待つ)を個別のフェーズに分け、作成フェーズが完了したら、スタック内のさらなるリソースの作成を楽観的に開始することを選択した。

新しい最適化されたリソースのプロビジョニング戦略には、さらにリトライ機能がある。リソースの作成に失敗した場合、依存するリソースの安定化フェーズが完了すると、再試行される。

リトライを伴う新しいスタックプロビジョニング戦略(出典:AWS DevOps Blog)

CloudFormationは、リソース間の依存関係のタイプに基づいて適切なプロビジョニング戦略を選択する。暗黙的な依存関係あるリソースが(Fn::GetAttRefのような)固有関数を使って別のリソースに依存している場合には、新しい戦略が使われる。明示的な依存関係(DependsOn属性を持つもの)については、リソースの安定化を含む以前の戦略が使用され、リソースが準備完了しているかを確認する。

この変更に伴い、CFは新しいCONFIGURATION COMPLETEイベントを導入し、リソースのプロビジョニングの作成フェーズが完了すると発行されるようになった。このイベントは、スタックのプロビジョニングをオーケストレーションするために内部的に使用されるが、例えば、本番前のスタック構成を検証する場合など、リソースの一貫性チェックが不要な場合に、さらなるリソースやスタックの作成を高速化するために、クライアントが直接使用可能となる。

スタック作成ログの新しいCONFIGURATION_COMPLETEイベント(出典:AWS DevOps Blog)

作者について

この記事に星をつける

おすすめ度
スタイル

BT