【連載】「ソフトウェア開発自動化入門」 のなかで、 筆者が執筆を担当した 第4回「基盤・デプロイ自動化」 では、近年のトレンドである マイクロサービスアーキテクチャアプリケーションの基盤構築自動化・継続的インテグレーション・デプロイ(CI/CD)自動化の実現例を紹介しました。
本連載では、そこで紹介した例にならって、アプリケーションの実装とCI/CD自動化、基盤自動化を実際に構築してきます。
具体的には、以下の流れで進めていく予定です。
第一回はマイクロサービスアーキテクチャにおけるアプリケーション構成のポイントを説明します。なお、本稿は以下の前提知識がある開発者を想定しています。
対象読者 | 前提知識 |
エンタープライズ開発者 | Java言語及びSpringFrameworkを使った開発に従事したことがある経験者。経験がなければ、 こちらのチュートリアル を実施することを推奨します。TERASOLUNAはSpringのベストプラクティスをまとめた開発方法論で、このチュートリアルでは、JavaやSpring Frameworkを使った開発に必要な最低限の知識を得ることができます。 |
GitHubなどのバージョン管理ツールやApache Mavenなどのライブラリ管理ツールを使った開発に従事したことがある経験者。 | |
AWS開発経験者 | AWSアカウントをもち、コンソール上で各サービスを実行したことがある経験者 |
コンテナ及びUnix・Linux経験者 | Dockerなどのコンテナ技術を使用した経験がある、またはPOSIXコマンドによるUNIX、LINUX系OSを操作したことがある経験者。 |
また、動作環境は以下のバージョンで実施しています、将来的には、AWSコンソール上の画面イメージや操作、バージョンアップによりJavaのソースコード内で使用するクラスが異なる可能性があります。
動作対象 | バージョン |
Java | 1.8 |
Spring Boot | 2.1.2.RELEASE |
Docker | 18.09.2, build 6247962 |
CentOS | 7.6.1810 |
SonarQube | 7.7 |
SonarLint | 4.0.2.3009 for IntelliJ |
SonarScanner | 3.3.0.1492 |
マイクロサービスアーキテクチャでは、従来のモノリシックなアプリケーション(全ての機能が一つのアプリケーションパッケージにまとまっている形)に比べ、 アプリケーション構成はもとより、チーム間での開発体制からリリースの単位までこれまでとは異なるかたちで行うことを要求されます。
一般にマイクロサービスアーキテクチャにすることで、以下の様なメリットがあるとされています。
ただし、モノリシックなアプリケーションを、機能単位などで単純にサービス分割しただけでは、上記の様な恩恵は得られません。 鶏卵論争ではありませんが、歴史的に見るとむしろ、次々と登場してくるクラウドなどの新しいテクノロジーを活用し、上記の様なメリットを目指して考えられた結果が、マイクロサービスアーキテクチャだったと言えます。 したがって、上記のメリットを実現するには、サービスの分割・アプリケーションの作成・実行単位、プロジェクト構成、開発のスコープやスパン・体制、リリースの最適な単位を、個々のアプリケーションごとに検討する必要があります。 当然、唯一解はないのですが、1つの構成例としては、以下の様なアプリケーションアーキテクチャが挙げられるでしょう。
[アプリケーションの構成]
この例では、各マイクロサービスはDockerをベースとするECSコンテナ単位で作成していますが、サービスの単位は主に以下の基本原則・考え方により、適切な粒度や分割単位を決定します。
また、セキュリティの観点やサービスのスケーラビリティ、ポータビリティ・再利用性を考慮し、サービスを論理的にBFFとバックエンドに分割していますが、それぞれの役割は以下の通りです。
BFFの役割 | バックエンドの役割 |
|
|
注釈
クライアントはSPA(シングルページアーキテクチャ)で、サーバ側は単純なAPIを提供する場合など、フロントエンド部分をAPI Gatewayなどの商用のプロダクト・サービスで代替する例も多くあります。
各マイクロサービスがECSコンテナにより管理、ApplicationLoadBalancer(ALB)を介することで、以下のようなマイクロサービスアーキテクチャで考慮しなければならない設計要素をカバーできます。
上記の構成で実際にアプリケーションを構築する場合は、「 第4回 ECSコンテナアプリケーションの構築 」を参考に進めてみてください。 セッションキャッシュやバックエンドのデータベース構築については盛り込んでいませんが、本連載の趣旨からは問題ありませんし、 各々構築方法は、連載「AWSで作るクラウドネイティブアプリケーションの基本」の今後、解説する予定です。
さて、次回以降は、上述のアプリケーション環境を前提とした継続的インテグレーション(CI)環境を以下のイメージのようなかたちで、 AWSのビルドツールであるCodeBuildおよび、SonarSourceにより提供されているオープンソースの静的解析プラットフォームである SonarQube を使って構築してみます。
上記のCI環境では、以下のようなことが実現できます。
次回はVPC環境内にECSおよびRDSを使って、SonarQubeServer環境を構築する方法を詳述していきます。
川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理
金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。
Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなど様々な開発プロジェクト支援にも携わる。