AWS での EngFlow リモート実行により、迅速で信頼性が高く、コスト効率の高い大規模なビルド/テストが可能

このコンテンツはいかがでしたか?

現代のエンジニアリング組織はマイクロサービスアーキテクチャを採用し、モノリシックアプリケーションを分解していますが、大規模で複雑なコードベースが一般的です。コードが増えるとビルド/テストのサイクルが長くなり、デベロッパーの生産性が低下し、コストが増加します。さらに、継続的インテグレーション (CI) の計算予算が限られていると、実行待ちが発生し、エンジニアリングの生産性がさらに低下します。

EngFlow は、リモート実行とキャッシュを通じて、現代の組織がビルドとテストのサイクルを改善し、ソフトウェア開発チームの生産性を最大化できるよう支援します。

パフォーマンスが高く、信頼性が高く、費用対効果の高いソリューションを顧客に提供するために、EngFlow は AWS Well-Architected フレームワークのベストプラクティスに従いました。この記事では、価格対性能比の向上と可用性の向上に役立ったプラクティスに焦点を当てます。

EngFlow リモート実行サービスのアーキテクチャ

EngFlow のお客様は、Network Load Balancer や仮想プライベートクラウド (VPC) エンドポイント、サブネット、セキュリティグループなどのさまざまなネットワーク技術を使用して複数のレイヤーで保護された安全なプライベートチャネルを介してリモート実行サービスとやり取りします (図 1 を参照)。

スケジューラーは、Amazon Elastic Block Store (Amazon EBS) ボリュームを備えた Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで実行され、各ビルド/テストリクエストを独立した部分に分割し、個々のビルド/テストジョブを既存のワーカーインスタンスに配置します。これにより、ビルド/テストジョブのコンピューティング/メモリ要件が満たされます。AWS Auto Scaling を使用すると、実行中のスケジューラインスタンスの数を一定数維持することで自己修復機能を実現できます。障害が発生した Amazon EC2 スケジューラインスタンスは、人の介入なしに自動的に置き換えられます。

EngFlow のリモート実行ソフトウェアは、ビルド/テストアクションを数百または数千のワーカーインスタンスに分散します。これらはすべて、EBS ボリュームがマウントされた EC2 インスタンスで実行されます。ここでは、EngFlow は AWS Auto Scaling を使用して、必要な計算能力を必要に応じてスケールインおよびスケールアウトすることで、無駄を最小限に抑え、使用率を最大化します。お客様のさまざまなニーズに対応し、費用対効果の高いソリューションを提供するために、Worker インスタンスは EC2 オンデマンドまたはスポットインスタンスで実行できます。EngFlow では、オンデマンドインスタンスにフォールバックして信頼性を高めることができます。

リモート実行と EngFlow のリモートキャッシュソリューションを組み合わせることで、作業の重複を防ぎます。EngFlow では、組織が実行したすべてのビルド/テストアーティファクトをローカルストレージにキャッシュすることで、チームはビルド/テストを自分で再実行するのではなく、以前のビルド/テストアーティファクトをダウンロードできます。これにより、ビルド/テスト時間が短縮され、ビルド/テストあたりのコストが削減されます。クラウド内のインスタンスが増えたり消えたりしても、ビルド/テストアーティファクトは Amazon Simple Storage Service (Amazon S3) と耐久的かつコスト効率よく同期され、永続的にアクセスできるようになります。

EngFlow のリモート実行ソリューションでは、顧客アカウントにデプロイされたときのオペレーションをサポートするために、Amazon CloudWatch Logs、メトリクス、アラームなどの AWS 標準サービスを使用しています。

EngFlow が AWS 上で高速で信頼性が高く、コスト効率の高い構築を実現した方法と、Well-Architected のレビューを進める中で、リモート実行ソリューションを改善すべき分野をどのように特定したかを詳しく紹介します。

パフォーマンス

EngFlow のお客様の多くは、ビルド/テスト速度を EngFlow の主要な価値提案のひとつと考えています。ほんの数例を挙げると、デベロッパーの生産性が向上し、市場投入までの時間が短縮され、より多くの実験を同時に実行できるようになるということです。クラウドで CI のビルド/テストを実行し、ローカルワークステーションの代わりに最新かつ最強の CPU 世代の分散コンピューティングノードを使用することで、Blue River Technology のようなお客様は CI のビルド/テストのパフォーマンスを 9 倍向上させることができました。

EngFlow のエンジニアは、最新世代の AWS Graviton3 プロセッサなど、独自の要件に最も適合する、最もパフォーマンスが高くコスト効率が高い EC2 インスタンスをお客様が選択できるよう支援します。お客様は最新の EBS gp3 ボリュームを使用しており、これにより最新の汎用 SSD ボリュームが生成され、ビルド/テストが可能な限り迅速に行えるようになっています。これは、標準およびカスタムの CloudWatch メトリクスを活用して、お客様固有のワークロードを分析することで可能になりました。

さらに、Worker インスタンスの AWS Auto Scaling 設定を微調整できるため、EngFlow は容量とコストの最適なバランスを見つけることができるため、お客様は常に十分なコンピューティング容量とストレージ容量を確保して、新しいスケジュールされたビルド/テストをすぐに開始できます。また、アイドル状態のリソースに費用を浪費することもありません。

信頼性

EngFlow は AWS のベストプラクティスに従い、信頼性の高いサービスを最初から何千人ものデベロッパーにタイムクリティカルなビルド/テストを実行してきました。

同社の AWS Auto Scaling 設定は、選択した AWS リージョンの 3 つの AWS アベイラビリティーゾーンにまたがっており、お客様の需要に基づいてスケーリングでき、ローカルサービスの中断にも耐え、障害が発生した Amazon EC2 インスタンスを自動的に置き換えることで自己修復機能を提供します。Amazon S3 は、ビルド/テストアーティファクト用の耐久性と可用性の高いストレージサービスとして、このソリューションを補完します。

Well-Architected のレビューの中で、EngFlow はサービスの信頼性の向上が必要な分野を発見しました。Amazon EC2 Auto Scaling は終了ポリシーを使用して、スケールインイベント中に最初に終了するインスタンスを決定します。終了ポリシーは、終了するインスタンスを選択する際に Auto Scaling が使用する終了条件を定義します。

デフォルトでは、終了ポリシーは、インスタンス数が最も多いアベイラビリティーゾーンを選択します。そして、最も古い起動テンプレートまたは起動設定から起動されたインスタンスを終了します。インスタンスが同じ起動テンプレートまたは起動設定から起動された場合、Amazon EC2 Auto Scaling は次の請求時間に最も近いインスタンスを選択して終了します。

EngFlow では、このデフォルトの終了ポリシーにより、お客様が重要な作業を実行している最中の EC2 インスタンスが強制終了されることがありました。EngFlow Remote Execution は自動的にジョブを再試行しますが、ビルド/テストの実行時間が長くなり、乗じてコストが高くなり、お客様からの問い合わせが発生しました。EngFlow は、インスタンスのスケールイン保護と組み合わせて独自のカスタム終了ポリシーを作成することで、信頼性と効率性を向上させることができました。

コスト効率

EngFlow のお客様は、ピーク時に数百または数千の EC2 インスタンスを同時に使用して、CI のビルド/テストを大規模に実行します。このワークロードは、お客様に代わってコスト最適化の機会を模索する絶好のチャンスです。

オンデマンドと比較してコンピューティングコストを最大 90% 節約するために、Well-Architected レビューでは、Amazon EC2 スポットフリートに基づいてスポットインスタンスをリモート実行用に有効にする機能について EngFlow と話し合いました。

「この機能は、お客様にとっても当社にとっても、AWS で運用する際のコスト効率を高める大きなチャンスです。当社はこの機能を喜んで実装しました。設計上、当社の Worker インスタンスはステートレスで、堅牢な再試行メカニズムによって自然終了を処理します。AWS スポットインスタンスは最適で、EngFlow と当社のお客様のコンピューティングコストを平均で 70% 削減できました」と、EngFlow のエンジニア、Yannic Bonenberger 氏は説明しています。

スポットインスタンスの統合に取り組んでいる間、EngFlow はワーカーインスタンスのスケジューリングアルゴリズムを改善することで EC2 インスタンス全体のリソース使用率も向上し、その結果、お客様に更なるコスト削減をもたらしました。

EngFlow がスポットインスタンスを統合すると、彼らは Amazon EC2 がスポットインスタンスを停止または終了する 2 分前に発行されるスポットインスタンス中断通知を聞くようになりました。これによって、すぐに再利用されるインスタンスに新しいビルド/テストジョブをスケジューリングすることを避けることができます。同様に、AWS ソリューションアーキテクトも EC2 インスタンスのリバランスの推奨事項にも注意を向け、すぐに再利用される可能性が高いインスタンスに新しいビルド/テストジョブをスケジュールしないようにすることを推奨しました。これらの推奨事項を実施した結果、EngFlow のお客様は、EC2 インスタンスの早期終了による、ビルド/テストジョブのリトライ回数の減少を確認しました。

最新のビルド/テストへの有望なアプローチ

ソーシャルメディアプラットフォーム、短期旅行市場、自動車メーカーなどの大規模で機敏なテクノロジー企業は、EngFlow のプラットフォームを利用して、エンジニアの作業をスムーズに進め、最新のソフトウェア開発に必要な俊敏性を維持しています。AWS は EngFlow の成功の中核を成しており、柔軟なアーキテクチャとコスト効率を実現しています。これはエンドカスタマーの競争上の優位性に直接つながります。

「指先でどれだけのパワーが得られるかは信じられないほどです。1 人のデベロッパーが 1,000 台のマシンを入手し、大規模に何かを試せるようになったのは、歴史上初めてのことです」と、EngFlow の CTO、Ulf Adams 氏は述べます。

Christian Mueller

Christian Mueller

Christian は、Amazon Web Services (AWS) の戦略的な自動車業界のお客様のための Principal Solutions Architect としての役割において、お客様が AWS クラウドの可能性を最大限に活用してさらに成功できるようサポートしています。Christian はサーバーレス全般に関心を抱いており、コネクテッドカーや自律走行車からソフトウェア定義車両に至るまで、自動車業界で起こっている大規模な変革に携わっていることを楽しんでいます。

Luis Pino

Luis Pino

EngFlow の Software Engineer として、Luis Pino 氏は EngFlow のインフラストラクチャの設定が可能な限り円滑に実行されるようにする責任を負っています。EngFlow に入社する前は、Google で 5 年間にわたって外部 API と MacOS のサポートに重点的に取り組み、Bazel の開発をサポートしました。また、正式なソフトウェア検証を専門として、École Polytechnique でコンピュータサイエンスの博士号を取得しています。

このコンテンツはいかがでしたか?