クラウドホスト型 CI を理解しよう

クラウドコンピューティングはソフトウェア開発に多大な影響を与えてきました。 クラウドネイティブのアプリケーションとサービスは拡張可能なクラウドホスト型インフラストラクチャを活用するように設計されており、ますます一般化しています。

クラウドホスト型 CI はクラウドホスト型インフラストラクチャのメリットをソフトウェアのビルド、テスト、およびデプロイのプロセスまで拡張するものです。

CI/CD をこれから始める方も、既存のオンプレミス型環境がある方も、このページでクラウドホスト型 CI/CD にどのようなメリットがあるかを理解できます。

クラウド CI の説明

継続的インテグレーション、デリバリー、およびデプロイは、ソフトウェアをより素早く確実にユーザーにリリースできるようにします。 CI/CD はコードベースに変更が加えられるたびにソフトウェアを一連の自動化されたステップに通し、ソフトウェアが期待どおりに動作するかを検証します。 このシステムは本番環境におけるバグの数を最小限に抑えるだけでなく、その他多数のメリットを提供しながら、開発からリリースまでの時間を短縮します。

手動プロセスから自動 CI/CD に移行することで時間と労力を節約できますが、インフラストラクチャへの要求も高まります。 CI/CD では数週間または数か月ごとに製品の新しいバージョンをテストとステージング環境にデプロイするのではなく、最新のコードを 1 日に数回以上テストするためです。

同じコードベースで作業して変更を加える人が多くなるほど、コードがビルド、テスト、およびデプロイの自動プロセスに投入される頻度も高まります。 CI/CD プロセスを自前のサーバーでホストする場合は、使用可能なサーバーの台数がすぐに制約となるでしょう。 チームが重要な修正に取り組んでいる場合やリリースに向けて機能を完成させている場合など、需要が高い時期には社内の CI/CD インフラストラクチャがボトルネックになる可能性があります。

このようなシナリオでは、CI/CD プロセスをクラウドでホストすることにメリットがあります。 クラウド CI では、パイプラインをクラウドホスト型インフラストラクチャで実行するようにセットアップするか、クラウドベースのフルマネージド型 CI/CD サービスを使用する必要があります。

どちらのオプションでも、クラウドコンピューティングの拡張性を活用することが可能です。 需要の高い時期に必要なキャパシティとアイドル状態のサーバーの維持費のバランスを取ろうとするのではなく、必要に応じてビルドファームを拡張することができます。

クラウドホスト型 CI のメリット

クラウドで CI/CD をホストすると、オンデマンドでリソースを拡張してプロセスをさらに強化し、保守費を削減し、クラウドネイティブ開発を容易にすることができます。

インフラストラクチャのコード化(IaC)によるワークフローの単純化

クラウドホスト型インフラストラクチャでは、スクリプトを使用して環境を構成するのが一般的です。 インフラストラクチャ構成をコード化することで、すべてのビルドおよびテスト環境を確実に同じにすることができます。 このプロセスでは、必要に応じてさらに多くのインフラストラクチャをオンライン化することも可能です。

開発中のソフトウェアと同様に、インフラストラクチャ自体を CI/CD パイプラインに通して期待どおりに動作することを確認できます。 このステップにより、変更を簡単にロールバックすることができます。

コンテナー化を最大限に活用

クラウドネイティブアプリケーションを開発している方はコンテナーを使用していることでしょう。 コンテナーを使用すると、環境の依存関係と構成の情報をソフトウェア一緒に 1 つのアーティファクトにパッケージ化し、それをコンテナーランタイムを使用して任意のマシンにデプロイすることができます。

Kubernetes などのコンテナーオーケストレーションツールは大量のコンテナーを扱いやすくするように開発されており、 デプロイ、管理、拡張といったタスクを自動化します。

CI/CD ワークフローでコンテナーを使用することで、最新のビルドをより簡単に別のパイプラインステージにデプロイすることができます。 ビルドアーティファクトは本番環境にリリースされる前に各テスト環境に一貫してデプロイできるコンテナーのイメージです。

クラウド型 CI/CD ではコンテナーが計算リソースを効果的に使用するため、自動化ツールを活用することができます。 需要が高い時にはキャパシティを増強し、需要が低い時にはコンテナーを終了して基盤のインフラストラクチャを解放することができます。

サーバー保守の手間を削減

CI/CD プロセスをクラウドに移行すると、ビルドファームが仮想マシン上でホストされることになります。 キャパシティを強化したい場合はそれをセットアップするだけで、物理的なハードウェアの調達、インストール、および管理を行う必要はありません。

このような負担がなくなることで、チームはパイプラインプロセスの最適化とセキュリティに集中できるようになります。 コストは処理能力にも処理時間にも影響する要素であるため、可能な限りタスクの並列化に時間をかけることをお勧めします。それにより、比較的少ないマシンを長期的に使用する場合よりも早く成果を得られるようになります。

リリースパスを常に開放状態に維持

CI/CD プロセスはソフトウェア開発チームにとって不可欠な資産です。 それは、ユーザーにソフトウェア更新をリリースするための仕組みであるためです。 そのプロセスをクラウドでホストすることで、想定外のサービス停止によってリリースパスがふさがってしまう可能性を減らすことができます。 このレベルのレジリエンスは無駄に思えるかもしれませんが、深刻なバグが見つかり、緊急の修正をデプロイする必要がある場合にはすぐに必要となります。

クラウドホスト型 CI/CD プロセスではクラウドリソースを拡張できるため、ブルーグリーンデプロイ戦略の採用もより簡単になります。 ブルーグリーン手法を実践すると、本番環境で問題が発生した場合にトラフィックをすぐに以前のバージョンに切り替えることができます。 このプロセスにより、サービスを維持したまま修正に取り組むことが可能です。

クラウド CI ホスティングについて考慮すべき点

クラウド型 CI/CD ではインフラストラクチャの費用、拡張性、および信頼性の面で大きなメリットを得られますが、欠点や思いがけない危険がある可能性があるため、それらを考慮する必要があります。

システムアーキテクチャ

製品がコンテナーを中心とするアーキテクチャを使用している場合、クラウドホスト型 CI/CD を使用してテスト環境へのデプロイを合理化することができます。 しかし、モノリシックアーキテクチャを使用している場合はソフトウェアをコンテナーにパッケージ化するのは難しくなります。

もちろん、コンテナーはクラウドホスティングに不可欠ではありません。 クラウドプロバイダーのインフラストラクチャで仮想マシンを使用してビルドを実行し、テスト用に一貫した本番前環境を準備することも可能です。 ただし、VM はコンテナーよりも多くのリソースを消費し、環境を個別に構成する必要があります。

ナレッジとスキル

インフラストラクチャのコード化(IaC)に関する専門知識がない場合、チームメンバーは時間を取ってスキルを習得するか、その知識を外部から取り入れることを検討する必要があります。

とは言え、クラウドテクノロジーの使用経験は望ましいスキルです。 チームにそのようなスキルを開発し、最新のテクノロジーを使用する機会を与えれば、スタッフの定着と採用に役立ちます。

コスト

クラウドでは時間で料金が発生するため、アイドル状態の計算リソースが課金されてしまいます。 クラウドホスティングのコスト効率を高めるには、効率的に使用するしかありません。 つまり、使用状況を監視してタイムアウト期間を過ぎたアイドル状態のインスタンスを解放するツールを活用したり、そのロジックを独自に実装したりする必要があります。 ロジックを独自に実装するにはそのスキルが必要となるため、ツールの使用やロジックの実装をよく吟味して比較することをお勧めします。

セキュリティ

データやサービスをクラウドでホスティングする際は、セキュリティに関する懸念事項が必ず伴います。 会社によっては、重要なソフトウェアがサードパーティのキットに存在するという考え方だけで、提案が取り消されるでしょう。 とは言え、ソースコントロールリポジトリから CI サーバーやテスト環境に至るまで、ライブサービスとデプロイパイプラインの両方のホスティングにパブリッククラウドを使用している組織も多く存在します。

悪意のあるアクターがもたらすリスクを軽減するには、潜在的な攻撃ベクトルを特定し、CI/CD プロセスに対策を組み込み、アクセス制御を実装することが不可欠です。

ハイブリッドの手法

インフラストラクチャのコード化(IaC)、コンテナー、およびコンテナーオーケストレーションはクラウドテクノロジーに根ざすものですが、プライベートクラウドまたはオンプレミス型とクラウドホスト型のハイブリッドを使用する CI/CD 構成にも組み込むことが可能です。

たとえば、パフォーマンステストの実行などのプロセスの一部にクラウドホスト型インフラストラクチャを使用し、残りを社内に維持することも可能です。

このハイブリッド式の手法には、以下のようないくつかのメリットがあます。

  • 所属組織で将来的にクラウドホスティング型インフラストラクチャへの移行が計画されている場合は、クラウドネイティブのツールを採用して事前に専門知識を取り入れることで、移行を容易にすることができます。
  • IaC を採用した場合はスクリプトを実行するだけで済むため、複数のテスト実行の合間に環境をリフレッシュするのが非常に迅速になります。
  • 環境作成をコード化すると、セキュリティ、パフォーマンスまたはUIのテスト、あるいはサポートと営業チーム向けのサンドボックスなど、目的に関係なく、本番環境と本番前環境が同一であることを保証する一貫性を得ることができます。
  • インフラストラクチャ構成ファイルをソース管理システムに格納すると、変更の内容とその導入タイミングが分かる監査証跡が記録されるため、環境に関する問題を簡単にデバッグできるようになります。

TeamCity のメリット

TeamCity では、どの程度の CI/CD プロセスをクラウドで実行するかを正確に決められます。

TeamCity On-Premises では、CI サーバーとビルドエージェントの両方を社内またはクラウドで柔軟にホストできます。 ビルド、テスト、およびデプロイタスクをすべてクラウドでホストする場合でも、需要が高まった場合に自動的にビルドファームを拡張する場合でも、TeamCity の主要クラウドサーバーとのネイティブ統合により、必要と思われるすべての機能を得られます。

TeamCity Cloud ではマネージド CI サーバーを使用できるため、インフラストラクチャを保守することなくビルド、テスト、およびデプロイプロセスの合理化に専念できます。 JetBrains がホストするビルドエージェントと自前のクラウドホスト型または社内のビルドマシンの両方を使用できるため、最適なビルドファームを自由に作成することができます。

TeamCity Pipelines は、柔軟なクラウドネイティブの手法によって CI/CD をさらに効率化するように設計されています。 視覚的なドラッグアンドドロップ式のエディターか YAML のうちワークフローに最適な方を選択し、パイプラインを簡単に作成、管理、および最適化することができます。 TeamCity Pipelines ではクラウドホスト型とセルフホスト型のエージェントの両方がサポートされているため、必要に応じて拡張し、可能な限りシームレスで自動化されたビルド、テスト、およびデプロイプロセスを実現することができます。