日本語
日本語
検索
Log in / Register
お問い合わせ

テクノロジー概要

クラウドネイティブ開発への移行

最終更新日:

はじめに

ソフトウェア開発はビジネスにとって重要です。アプリケーションはビジネスを差別化するものであり、新しいサービス、収益源、市場拡大の手段になります。提供を迅速化するために、開発者は生産性を高める必要があります。多くの場合、開発スピードを制限するのは古いコードに留まりません。旧式のインフラストラクチャ、開発プラクティス、そして手順がその要因になっています。リリースの頻度は低く、かなりの手作業が必要で、テストが十分に行われていない場合があります。 

クラウドネイティブ開発は、革新的なアプリケーションをより迅速に提供するために役立ちます。しかし、クラウドネイティブ開発とは単に使用するテクノロジーだけを指すのではなく、人とプロセスも含まれます。 

クラウドネイティブ開発プラクティス

クラウドネイティブ・アプリケーションは、クラウド・コンピューティング・モデルを活用して、デプロイリスクを軽減しながら、スピード、柔軟性、品質を向上させるように構築されています。クラウドネイティブ方式で重要なのは、その名前とは裏腹に、どこにアプリケーションが導入されるかではなく、どのようにアプリケーションが構築、導入、管理されるかです。

クラウドネイティブ開発は、マイクロサービスなどのモジュール式のアーキテクチャアプローチ、先進的なコンテナベースのアプリケーション・プログラミング・インタフェース (API) 駆動型インフラストラクチャ、そして DevOps プラクティスを組み合わせて、継続的なアプリケーション提供を可能にするアプリケーション開発とデプロイメントのアプローチです。クラウドネイティブ・アプリケーションとマイクロサービスは一括して議論されることが多いですが、多くの組織は、同じ原則を使用した、より優れたモジュール式のモノリシックなアプリケーションの構築に力を入れることで、クラウドネイティブ方式の次のようなメリットを実現しています。

  • 疎結合されたサービスベースのアーキテクチャ
  • 軽量でテクノロジーにとらわれないコンポーネント間の API 通信
  • アプリケーションとサービスを迅速にデプロイし、容量の需要に合わせて拡張しながら、環境間での可搬性を実現するコンテナベースのインフラストラクチャ
  • 継続的インテグレーション/継続的デリバリー (CI/CD) によるアジャイル開発手法と、アプリケーションのコラボレーティブな構築と提供に注力する DevOps プラクティス

変化に向けた準備:既存のアプリケーションをコンテナに移行する

旧式のインフラストラクチャにデプロイされた既存のアプリケーションにはクラウドネイティブ開発への移行を難しくする課題があります。さらに、既存のインフラストラクチャではリソースが固定されていたり限定されていたりすることが多く、成長の妨げとなります。現在サポートされているバージョンのミドルウェアや他のソフトウェアは、旧式のインフラストラクチャでは稼働しない場合があります。

コンテナを使用して既存のアプリケーションを再デプロイすることで、変化に対する障壁を取り除き、進化に必要な柔軟性を獲得できます。既存のアプリケーションをコンテナに移行すると、次のような多くのメリットがあります。

  • コンテナはテクノロジーにとらわれません。コンテナ内で使用する場合、テクノロジーの使用年数や種類はさほど重要ではなくなります。開発者は、タスクに応じて適切なテクノロジーを自由に選択してツールとして使用できます。古いものも新しいものも、別々のコンテナとして同じプラットフォームにデプロイできます。
  • 最新のミドルウェア、アプリケーションサービス、人工知能/機械学習 (AI/ML) などの新しいテクノロジーをコンテナ・プラットフォームにデプロイすることができるため、統合とモダナイゼーションの機会が生まれます。
  • 既存のアプリケーションをインフラストラクチャから分離することで、アプリケーションの可搬性が向上します。アプリケーションの移行やリソースの追加が単純化されます。
  • 先進的な開発手法では多くの場合、品質と信頼性の向上には自動化されたテストが利用されます。すべてのコンポーネントがコンテナで実行されている場合、新しいソフトウェアの開発をサポートするテスト環境の作成ははるかに容易になります。コンテナ・プラットフォームがセルフサービスをサポートしている場合、開発者は、誰かがプロビジョニングを行うのを待つことなく、必要に応じて自分のテスト環境を作成および破棄できます。

Strangler Pattern は、既存のモノリシック・アプリケーションをモダナイズするために使用されてきたアプローチです。この手法では、機能の細部を識別し、それらをクラウドネイティブのマイクロサービス、アプリケーションサービス、またはサーバーレス機能に置き換えます。すべてがコンテナ・プラットフォームで実行されている場合、新しいソフトウェア・コンポーネントを、モダナイズする既存のアプリケーションと同じ環境に簡単にデプロイできます。

Red Hat OpenShift:クラウドネイティブ・アプリケーションを構築するための基盤

Kubernetes は、コンテナ化アプリケーションを実行するためのデファクトスタンダードになりました。Red Hat® OpenShift® は、パブリッククラウドのシンプルさと自動化を提供する、エンタープライズ対応の Kubernetes コンテナ・プラットフォームです。しかし、Kubernetes は、開発者ではなく、主に IT 運用チームのニーズに合わせて構築されました。Red Hat OpenShift は、コンテナの構築および実行のためのコンテナ・プラットフォームとして、開発者と運用者の両方が使用できるように設計されています。開発者の作業方法に合致するように Kubernetes が拡張されており、ソースコードからコンテナを自動的に構築して新たに構築されたアプリケーションをコンテナにデプロイするといった開発ライフサイクルに対応しています。

開発者は Red Hat OpenShift をコンテナの構築および実行のためのセルフサービス・プラットフォームとして使用し、必要に応じて開発環境とテスト環境を作成および破棄できます。運用者は、Red Hat OpenShift を使用してプロダクション環境を監視および管理します。Red Hat OpenShift は、同じシステムに対する開発者と運用者の見方が異なることを認識しており、グラフィカル・ユーザー・インタフェース (GUI) は開発者と管理者の両方の視点に基づいて作られています。管理 CLI に加えて、開発者向けのコマンドライン・インタフェース (CLI) も提供されます。DevOps プラクティスは、同じ基盤システムおよびメトリクスへのアクセスを開発者と運用者の両方に許可することで促進されます。 

Red Hat OpenShift を使用すると、開発者は Kubernetes に関する詳細な知識を持たなくても、Kubernetes にアプリケーションをデプロイすることができます。たとえば、Kubernetes ではデプロイと構成の詳細が複数の YAML ファイルで保存されるため、習得は非常に容易です。Red Hat OpenShift では GUI とデプロイメント・テンプレートを利用できるので、YAML ファイルを手動で編集する必要はありません。デプロイメント・テンプレートをアプリケーションのソースコードとともにバージョン管理システムに保存すれば、アプリケーションのデプロイメントを効率化し、Infrastructure-as-Code をサポートすることができます。Red Hat OpenShift を使用すると、高度な CI/CD パイプラインを容易に作成して、デプロイメントのライフサイクルを自動化できます。

Red Hat OpenShift は、パブリッククラウドサービスと同様の機能を提供する一方、オンプレミスとパブリッククラウドの両方で、どこでも開発および実行できる柔軟性を提供します。開発者は Red Hat OpenShift をサービスとしてパブリッククラウドで実行して使用することも、組織独自のインフラストラクチャや自分のノート PC で使用することもできます。独自の自己完結型の開発環境を好む場合は、Red Hat CodeReady Containers をダウンロードして、事前構成済みで最小限の Red Hat OpenShift 環境をローカルで実行できます。

ハイブリッドクラウドの既存およびクラウドネイティブ・アプリケーション向けのプラットフォーム

既存のアプリケーションをコンテナに移行する際の課題は、アプリケーションがクラウドネイティブではなく、データ、ログ、場合によっては構成用の永続ストレージを必要とするということです。実際、コンテナの設計はステートフル・アプリケーション向けではありません。Red Hat OpenShift は、既存のアプリケーションの永続ストレージのニーズに対応できるように柔軟な永続ストレージボリュームを提供します。これは、稼働時にアプリケーションのコンテナに自動的にアタッチされます。Red Hat OpenShift Container Storage を使用すれば、ソフトウェア・デファインドの永続ストレージにブロック、ファイル、またはオブジェクトのアクセス手法を使えるようになります。 

規制、データの局所性、セキュリティ、パフォーマンス上の問題などのためにオンプレミスでの運用を維持する必要があるアプリケーションでも、アプリケーション・プラットフォームとして Red Hat OpenShift を利用できます。Red Hat OpenShift は組織のデータセンターにデプロイできます。また、コンテナ化が容易ではないアプリケーション向けに、Red Hat OpenShift は、仮想マシンとコンテナ化アプリケーションを単一のインタフェースで管理する手法も導入しています。

パブリッククラウドで Red Hat OpenShift を使用すると、基盤となるクラウドまたはコンテナ・プラットフォームの詳細が抽象化されますが、それは、組織がハイブリッドおよびマルチクラウドのデプロイメントに移行する際に、開発者と運用者にメリットをもたらします。コンテナベースのアプリケーションを構築およびデプロイするための環境として、開発者が学ぶ必要があるのは 1 つだけです。 

Red Hat OpenShift は、新旧両方のアプリケーションに共通の一貫したアプリケーション・プラットフォームを提供します。アプリケーションの可搬性とデプロイメントの柔軟性により、組織にとって最適な場所でアプリケーションを実行することができます。

クラウドネイティブ開発のためのツール

Red Hat は、開発者がコンテナで実行するアプリケーションを構築するのに役立つツールを数多く提供しています。これらのツールは、Red Hat OpenShift と統合されており、Red Hat OpenShift が提供する機能に基づいています。

クラウドネイティブ開発環境において、Red Hat CodeReady Workspaces は、Red Hat OpenShift 上で実行される Kubernetes ネイティブの開発者ワークスペースサーバーです。ブラウザーベースの統合開発環境 (IDE) が提供されるため、開発者はソフトウェアをインストールしたり、ローカルマシンにコードをコピーしたりする必要がありません。 

また、コンテナおよび複数のプログラミングモデル向けの広範なツールセットを備えた従来型のデスクトップ IDE として、Red Hat CodeReady Studio も用意されています。開発者は、使いたいツールを選ぶことができます。Red Hat は、Microsoft Visual Studio Code 用の拡張機能 (OpenShift Connector など) と、Java™、YAML、および XML の言語拡張機能を提供します。

アプリケーションを実行するコンテナを構築するには、アプリケーションを実行できるようにする言語、ランタイム、フレームワーク、およびアプリケーションサーバーが必要です。ベースイメージには多くのソースがありますが、定評のあるソースからそれらを取得することが課題になっています。Red Hat は、より安全で既知の脆弱性のない最新のベースイメージを提供する、信頼されるソースです。 

Red Hat Runtimes は、クラウドネイティブ開発を単純化する Red Hat OpenShift の統合ランタイムのコレクションです。ランタイムは、Quarkus、Spring Boot、Vert.x、Node.js、および Thorntail をサポートしており、開発者はタスクに応じて適切なツールを選択できます。Quarkus は高速で軽量のマイクロサービスおよびサーバーレス・アプリケーションを構築するための、Kubernetes ネイティブの Java スタックです。Red Hat Container Catalog は、開発者がベースイメージとして使用できるテスト済みコンテナイメージの追加ライブラリを提供します。

アプリケーション提供を効率化するために、Red Hat Middleware がコンテナにパッケージ化されており、Red Hat OpenShift で実行できるようになっています。Red Hat Middleware ポートフォリオには、ストリーミングおよびブローカーベースのメッセージング、統合サービス、シングルサインオン、API 管理、プロセス自動化、意思決定管理が含まれます。 

Red Hat OpenShift によるビルドとデプロイメントの自動化

マイクロサービスベースのアプリケーションを使用すると、数十あるいは数百ものサービスを個別にリリースしてデプロイすることができます。このコードをすべて自信を持ってもっと頻繁にデプロイできるようになるには、ビルド、テスト、デプロイメントの自動化が極めて重要です。開発者は Red Hat OpenShift を使用して、CI/CD のビルドの自動化を設定することができます。新しいコードがソースコードのバージョン管理システムにチェックインされるたびに、ビルドを自動的にトリガーできます。ビルドが正常に完了すると、以前のバージョンの代わりに新しいバージョンを自動的にデプロイできます。開発者は Jenkins などの使い慣れたツールを使用でき、ビルド環境をゼロから構築するような複雑な作業は必要ありません。強力なビルド自動化パイプラインは、Red Hat OpenShift コンソールを使用して作成できます。ビルドタスクは、Red Hat OpenShift が管理するコンテナで Kubernetes ジョブとして実行されます。 

Red Hat OpenShift は、プラットフォームで実行されているアプリケーションサービスにルーティングおよびロードバランシング機能を提供します。この機能によって、高度なデプロイメントパターンを使用することが可能になり、限られたユーザーだけで新しいリリースをテストできるようになるため、ソフトウェアリリースに伴うリスクを軽減できます。ローリング、ブルー/グリーン、カナリアデプロイなどのパターンを使用できます。

クラウドネイティブ開発への移行

クラウドネイティブ開発を開始するには、次のことが必要です。

  • 既存のアプリケーションをクラウド上またはオンプレミスの Red Hat OpenShift で実行されているコンテナに移行します。コンテナにデプロイされた先進的なランタイムおよびミドルウェアでアプリケーションを更新します。
  • 提供を迅速化するために、ビルドパイプラインとローリングデプロイメントを使用して CI/CD を実装します。
  • 既存のアプリケーションで、新しいマイクロサービスへの分割、またはアプリケーションサービスやサーバーレス機能への置き換えが可能な部分を特定します。さまざまなフレームワーク、アーキテクチャアプローチ、クラウドサービスなど、タスクに応じて適切なツールを使用して、新しい開発を高速化します。
  • DevOps プラクティスを実装し、メトリクスを使用して学習および改善します。サービスメッシュなどの Red Hat OpenShift のネットワーク機能を使用して、アプリケーション・コンポーネント間の通信を管理、監視、追跡します。

さらに詳しく

クラウドネイティブ・アプリケーション開発に対する Red Hat のアプローチは、既存のアプリケーションをモダナイズし、既存および新規のアプリケーションとデータを統合することによって、アプリケーションの開発とデプロイメントの迅速化を助けます。Red Hat のクラウドネイティブ開発ソリューションの詳細をご覧ください。

Stackalytics、「Kubernetes」、2020 年 8 月にアクセス。