ガバナンス強化とコスト最適化:Cloud Custodianを活用したクラウド資源管理事例
導入部
クラウドシフトの推進により、ビジネスのアジリティやスケーラビリティは向上しました。しかしながら、一方でクラウド環境の運用は複雑化し、意図しないコスト増大やガバナンスの維持が課題となるケースが増加しています。特に、複数のプロジェクトやチームが独立してリソースを管理する環境では、利用状況の把握や適切な設定の維持が難しくなりがちです。
本記事では、こうした課題に対し、オープンソースのポリシードリブンなクラウド管理ツールであるCloud Custodianを活用し、ガバナンス強化とコスト最適化を自動的に実現した具体的な事例をご紹介します。抽象的なメリット論ではなく、どのような課題を抱え、どのようにCloud Custodianを導入・活用し、その結果どのような成果が得られたのかに焦点を当てて解説します。
導入前の状況
当組織では、数年前から戦略的にクラウド(主にAWSとAzure)の利用を拡大してきました。開発チーム主導での迅速なリソースプロビジョニングが進み、ビジネス要求への対応速度は飛躍的に向上しましたが、管理部門や情シス部門にとっては以下のような課題が顕在化していました。
- コストの増大と不透明性: 利用していない、あるいは過剰なサイジングのリソース(停止中のEC2/VM、使われていないEBS/Azure Disk、古いスナップショットなど)が放置され、無駄なコストが発生していました。また、どのリソースが何の目的で使われているかの可視性が低く、コスト要因の特定と削減が困難でした。
- ガバナンスの欠如: セキュリティグループ/ネットワークACLの設定不備、タグ付けルールからの逸脱、適切なバックアップポリシーが適用されていないリソースなどが散見されました。これはセキュリティリスクの増大や、将来的な監査対応における懸念となりました。
- 運用負荷の増加: これらの課題に対応するため、手動によるリソース棚卸しや設定チェック、是正措置の依頼といった作業が増大し、運用チームの負荷が高まっていました。新しいプロジェクトの立ち上げやリソース変更への対応に追われ、 proactive な改善活動に時間を割くことが難しい状況でした。
これらの課題は、クラウド利用のメリットを相殺し、組織全体の効率性を低下させる要因となっていました。
導入の意思決定と選定
増大する運用負荷とコスト、そして潜在的なリスクを前に、手動による管理には限界があることは明らかでした。そこで、クラウド環境のガバナンスとコストを自動的に管理・最適化できるソリューションの導入検討を開始しました。
商用ツールを含む複数の選択肢を比較検討した結果、Cloud Custodianを導入することを決定しました。主な選定理由は以下の通りです。
- ポリシードリブン: YAML形式で分かりやすくポリシーを記述でき、これをルールとして適用することで期待する状態を維持できる点です。特定のタスクを実行するスクリプトの寄せ集めではなく、組織のルールそのものをコードとして管理できる点に魅力を感じました。
- マルチクラウド対応: AWS、Azure、GCPなど主要なクラウドプロバイダーに対応しており、将来的なマルチクラウド戦略にもフィットする点です。
- 拡張性と柔軟性: 標準で提供される機能に加え、カスタムアクションやフィルターを定義することで、組織固有の要件にも柔軟に対応できる点です。
- コスト効率: オープンソースであり、ライセンスコストが発生しない点は、大規模な環境への適用において大きなメリットとなりました。
- 活発なコミュニティ: 多くの企業での採用実績があり、コミュニティが活発であるため、技術的な情報やサポートを得やすいと判断しました。
意思決定における懸念点としては、新たなOSSの学習コストや、組織全体で共通のポリシーをどのように合意形成し適用していくか、といった点が挙げられました。これらに対しては、まずは小規模なPoCを実施してツールの特性を理解すること、ポリシー定義に関する部門横断のワークショップ開催、そして段階的な適用計画を立てることで対応を進めることとしました。
具体的な導入・活用
Cloud Custodianの導入は、以下のステップで進めました。
- 基盤構築: ポリシーを実行するための環境として、AWS Lambda function や Azure Functions を利用しました。これにより、サーバーレスで定期的にポリシーを実行できる環境を構築しました。また、ポリシー定義や実行結果を管理するため、Gitリポジトリとオブジェクトストレージ(S3/Blob Storage)を活用しました。
- 初期ポリシー定義: まずは、コスト削減効果が大きく、かつ既存システムへの影響が比較的少ないと思われるポリシーから定義を開始しました。
- 特定の日数以上利用されていないEBSボリュームやAzure Diskの特定・削除(削除前にスナップショットを取得し、通知するアクションを定義)
- 古いAMIやスナップショットの削除
- 停止状態が一定期間続いているEC2/VMインスタンスの特定・削除
- 必須タグ(例: Project, Environment, Owner)が付与されていないリソースの特定と担当者への通知
- Dry-runと関係者への通知: 定義したポリシーは、いきなり実行するのではなく、まずはDry-runモードで実行し、どのようなリソースが対象となるか、どのようなアクションが実行されるかをシミュレーションしました。その結果をレポートとして関係部門(開発チーム、事業部門など)に共有し、想定外の影響がないか確認しました。
- 段階的な適用: Dry-runでの影響確認と関係者の合意形成が得られたポリシーから、通知のみのアクション、次に自動的な是正アクション(停止、削除など)へと段階的に適用スコープを広げていきました。
- 継続的な改善: ポリシーの実行結果を定期的に確認し、期待通りの効果が得られているか、あるいは新たな課題が発生していないかをモニタリングしました。新たな知見や組織のルール変更に合わせてポリシーを改訂し、Gitでバージョン管理しながら運用しました。CI/CDパイプラインに組み込み、ポリシーの変更があれば自動的にテストやデプロイが実行されるようにしました。
アーキテクチャとしては、Cloud Custodianの実行エンジンをサーバーレス関数としてデプロイし、CloudWatch Events/Azure Event Gridなどを使用して定期実行します。ポリシー定義ファイルはS3/Blob Storageに格納し、実行結果やレポートは別のS3バケット/Blob Storage、またはElasticsearch + Kibanaなどのログ分析基盤に集約して可視化・分析を行いました。
導入によって得られた成果
Cloud Custodianの導入により、以下のような具体的な成果を得ることができました。
- 明確なコスト削減: 導入から6ヶ月後には、主に利用されていないストレージや停止中のインスタンスの自動クリーンアップにより、クラウド利用料を月平均で15%削減することができました。年間に換算すると、数千万円規模のコスト削減に繋がっています。手動では把握しきれなかった潜在的な無駄を自動的に排除できたことが大きいです。
- 運用効率の劇的な向上: これまで手動で行っていたリソースの棚卸しや設定チェック、是正依頼といった作業が大幅に削減されました。運用チームは、ルーチンワークから解放され、より戦略的な活動(アーキテクチャ改善、パフォーマンスチューニングなど)に時間を充てることが可能になりました。関連する運用工数は約50%削減されたと試算しています。
- ガバナンスの強化: 必須タグの付与率が向上し、リソースの目的や責任者が明確になりました。また、セキュリティグループの過度な解放やバックアップポリシーの未適用といったルール違反が自動的に検知・是正されるようになり、組織全体のセキュリティレベルとコンプライアンスが向上しました。
- 可視性の向上: ポリシーの実行結果や削減効果がレポートとして自動生成されるため、クラウド環境全体のコスト状況やガバナンス遵守状況を容易に把握できるようになりました。これにより、経営層や関係部門への説明責任を果たすとともに、さらなる改善のためのデータに基づいた意思決定が可能になりました。
直面した課題と克服
導入過程で直面した主な課題と、それらをどのように克服したかを以下に示します。
- ポリシー記述の学習コスト: Cloud CustodianのポリシーはYAML形式で記述しますが、クラウド特有のリソースモデルやAPIへの理解が必要なため、初期の学習コストがありました。克服策として、公式ドキュメントを参考にしながら簡単なポリシーから作成を始め、社内Wikiに頻繁に使うポリシーパターン集を作成・共有し、定期的な勉強会を実施しました。
- 既存リソースへの影響: 自動化されたアクションが既存の稼働中のシステムに影響を与えないように、細心の注意が必要でした。これに対しては、まずDry-runモードで影響範囲を正確に把握し、関係者との十分なコミュニケーションと合意形成を行った上で、影響の少ないリソースから段階的にポリシーを適用しました。特定の重要なリソースについては、タグによる除外設定を行うなどの対策も講じました。
- 運用体制の構築: ポリシーの作成、テスト、デプロイ、実行結果の監視、改訂といった継続的な運用プロセスを確立する必要がありました。専門チームを設置するのではなく、既存のクラウド運用チーム内にCloud Custodianの担当者を置き、責任範囲を明確化しました。また、ポリシーの変更管理をGitOpsスタイルで行い、CI/CDパイプラインに組み込むことで、デプロイミスやコンフリクトのリスクを低減しました。
まとめと今後の展望
Cloud Custodianを導入することで、当組織はクラウド環境における喫緊の課題であったコスト増大とガバナンス欠如を効果的に解決することができました。ポリシードリブンなアプローチと自動化により、明確なコスト削減と運用効率化を実現し、組織全体のクラウド活用レベルを一段引き上げることができたと考えています。
この事例から得られる教訓として、以下の点が挙げられます。
- 目的の明確化: 何のために自動化ツールを導入するのか(コスト削減なのか、ガバナンス強化なのか、運用効率化なのか)を明確にし、優先順位をつけることが重要です。
- 関係者との連携: 特に自動的な是正アクションを伴うポリシーの場合、影響を受ける可能性のある関係者(開発チーム、事業部門など)との密なコミュニケーションと合意形成が不可欠です。
- 段階的なアプローチ: 一度に全てのポリシーを適用しようとするのではなく、影響範囲が小さく効果が見えやすいポリシーから導入し、成功体験を積み重ねることが継続的な推進につながります。
- 継続的な改善プロセス: クラウド環境は常に変化するため、ポリシーも一度定義したら終わりではなく、定期的な見直しと改善が必要です。
今後は、さらに高度なコスト最適化ポリシー(例: Savings Plans/Reserved Instances の推奨/自動適用、最適なインスタンスタイプのリコメンデーション)、セキュリティ関連ポリシーの強化、そしてDevOpsパイプラインへのより深い組み込みを進め、継続的なクラウド資源管理の自動化・最適化を目指してまいります。Cloud Custodianは、変化の速いクラウドネイティブ時代において、組織が効率的かつ安全にクラウドを活用するための強力なOSSツールの一つと言えるでしょう。