クラウドでアプリのパフォーマンスを最適化するための5つの原則

クラウドでアプリのパフォーマンスを最適化

変化の激しい現代では、遅さはもはや許容されません。そのため、スピードと俊敏性は、引き続き企業がクラウドを導入する主な動機となっています。では、アプリのパフォーマンス向上とセキュリティ確保を図りながら、アプリのデプロイを加速する役割を担うDevOps担当者は、クラウドにおける遅さを克服するために、システムとプロセスをどのようにモダナイズすればよいのでしょうか。いくつかの方法をご紹介します。

1. Infrastructure-as-codeを味方につける

ほとんどの場合、「手動」は遅さと予測不能性の代名詞と言っても過言ではありません。スピードと信頼性を追求するなら、まず自動化から始めるのがよいという点には、多くの方が同意するでしょう。アプリをスケールアウトするためにクラウドリソースを追加する場合でも、不可欠なアプリサービスをデプロイして構成する場合でも、API呼び出しを実行するか、コンソールで1~2回クリックするだけで済むほど簡単であるべきです。その実現の鍵となるのが、Infrastructure-as-Code(IaC)の活用です。Infrastructure、NetOps、SecOpsの各担当者と連携し、何をどのようにデプロイするかを詳述した検証済みの定義ファイルを整備することで、インフラストラクチャとサービスを迅速かつ反復可能で信頼性の高い方法でプロビジョニングできます。

このテンプレート化されたアプローチを活用することで、セルフサービス型のデプロイが可能になり、最終的には他のチームへの依存を減らせます。また、手動でのインフラストラクチャプロビジョニングをチケットで依頼することによって生じる、デプロイのボトルネックを防止できます。

2. CI/CDパイプラインを最大限に活用する

Infrastructure as Codeは、デプロイの迅速化に向けた一歩となりますが、完全なCI/CDパイプラインの価値を最大限に活用することで、さらに大きな効果が得られます。新しいアプリケーションコードをより頻繁に統合し、その更新を本番環境へ自動的に反映できるだけでなく、アプリサービスの組み込みもパイプラインに統合できます。これらのサービスをコード(IaC)として定義し、定期的に監視、更新、検証できるソース管理ツールに保存することで、AnsibleやGitLabなどのCI/CDツールは、API呼び出しを介してデプロイにこれらのサービスを自動的に取り込めます。これにより、デプロイを遅らせることなく、すべてのアプリに適切なセキュリティおよびコンプライアンス制御を適用した状態でリリースできます。

3. コンテナを導入する……ただし、セキュリティを確保する

アプリケーション全体に必要なコード、ライブラリ、バイナリを軽量なパッケージにまとめ、複数のプラットフォームへ迅速かつ一貫してデプロイできることが、近年コンテナの導入が急増している背景にあります。こうした特性は、クラウド環境でスピードを最適化するうえで有効です。アプリケーションを必要に応じて即座に起動してスケールアウトできるほか、CI/CDプロセスを高速化し、動的で管理しやすいマイクロサービスアーキテクチャを構築できます。

過度な期待はさておき、スピードの追求にとらわれるあまり、アプリケーションポートフォリオ内の他のアプリと同等以上のセキュリティとアプリパフォーマンスの最適化を必要とするアプリが依然として存在することを忘れがちです。残念ながら、既存のアプリサービスをコンテナ固有のニーズに合わせて後付けしようとしても、得られる成果は限定的です。代わりに、コンテナオーケストレーションシステムと連携する、より動的なサービス群を特定し、コンテナを真にサポートする必要があります。これにより、望ましくない停止やセキュリティおよびコンプライアンス上の問題を回避しやすくなります。

4. 可視性が力になる

アプリを迅速に稼働させることと、その稼働状態を維持し、ユーザーが利用できるようにし続けることは、まったく別の課題です。本番環境への移行後は、ネットワーク障害、プラットフォームの問題、サイバー攻撃、コードのバグなど、アプリケーションの健全性を脅かす要因が数多く存在します。そのため、1つのアプリケーション停止のトラブルシューティングでさえ、干し草の山から針を探すように感じられることがあります。ましてや、異なるクラウド環境で複数のアプリに同時に障害が発生した場合、その対応はさらに困難です。どこから着手すればよいのでしょうか。

このような状況では、可視性が知識を得るための前提となるため、アプリケーションの問題解決に欠かせません。アプリケーションスタックの各レイヤーに対する可視性が高いほど、運用上の異常や根本原因を特定しやすくなります。そのため、一元的な可視化ソリューションを導入することが重要です。クラウドやアプリケーションに依存しないこのソリューションにより、マルチクラウドアーキテクチャ全体でアプリケーションの問題をより迅速に解決できます。

5. チームワークで目標を実現

最後に、クラウドアジリティは、適切なツールやテクノロジーを導入するだけで実現できるものではありません(もちろん、これらは大いに役立ちます)。人材やプロセスも重要です。「ネットワークの速度は、最も遅い回線によって決まる」という言葉には一理あります。この言葉は、クラウド上のアプリケーションの構築、デプロイ、管理を担うチームにも当てはまります。通常、少なくともDevOps、SecOps、NetOps、アーキテクトが関わるチーム全体の取り組みとなるため、個人または連携上の非効率がチーム全体に影響を及ぼす可能性があります。

「State of Application Services 2020:DevOps Edition」を入手

サイロを解消し、チーム間で定期的かつ強固な連携体制を確立することで、計画策定、トラブルシューティング、情報共有の迅速化を支える基盤が整い、全員が足並みをそろえられます。部門横断的な専門知識をより有効に活用して業務負担を軽減できるだけでなく、他の職種に対して自動化やプロセス最適化などを推進することで貢献し、全員の業務を迅速化できます。