AWSで実現するクラウドネイティブ
目次
クラウドネイティブとは?
クラウドにITシステムを構築していくうえで、「クラウドネイティブ」というキーワードが登場することがよくあります。クラウドネイティブとは、CNCFと呼ばれる団体が定義している言葉です。本記事では、クラウドネイティブがどのような考え方なのか、どのような技術が中心に使われているのかを、解説していきます。
CNCFとは?
CNCF (Cloud Native Computing Foundation) は、クラウドネイティブを推進する業界団体で、2015年に発足しました。現在は500団体以上が加盟しています。主な活動内容としては、ベンダーに依存しないオープンソースのソフトウェア開発活動を促進し、これらのオープンソースソフトウェアによる技術革新を誰でも利用できるよう環境整備を行っています。
CNCFが定義する”クラウドネイティブ”とは?
CNCF(https://github.com/cncf/toc/blob/main/DEFINITION.md)によると、クラウドネイティブは『クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。
このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。』と説明されています。
つまり、クラウドにマッチした技術や考え方を徹底的に採用することで、クラウドの利点を最大限に引き出し、運用の効率性とビジネスのスピードを両立させる、ということになります。
クラウドネイティブへのアプローチ
CNCFが定義しているクラウドネイティブを実現するための技術として、
- コンテナ
- イミュータブルインフラストラクチャ
- マイクロサービス
が言及されています。また、これらをITシステムに組み込むための技術として、CI/CDの活用が考えられます。それらの技術の概要と、どのように活用していけばいいかについてを記載していきます。
コンテナ
コンテナとは、サーバー仮想化技術の1つです。従来の仮想化技術は、仮想サーバーそのものを構築していたため、後続作業としてサーバー内でOSやミドルウェアの設定を行い、アプリケーションを構築していく、といったことを行っていました。一方で、コンテナは、起動するとOSやアプリケーションも同時に設定済みの状態で起動してくる、という特徴があります。
そのため、どのような環境でも稼働する、という可搬性のメリットや、コンテナの増減が容易、という拡張性のメリットがあります。クラウドネイティブなシステムにおいては、主にアプリケーションをデプロイする対象として活用されていきます。
イミュータブル・インフラストラクチャー
イミュータブル・インフラストラクチャー(Immutable Infrastructure)はITインフラを管理する手法の一つです。Immutable=「不変」の言葉が表す通り、「一度構築した本番環境には更新やパッチの提供などの変更を加えず稼働させる」という考え方に基づいたインフラ運用管理手法のことを指します。
従来のオンプレミスサーバーでは、アプリケーションの変更のたびにパッケージの追加やパッチ適用を行っていたため、アプリケーションリリースのたびにサーバーなどのITインフラが複雑化し、システム障害の潜在的な原因となっていました。クラウドネイティブでは、コンテナやPaaS、SaaSをフル活用することで、サーバーなどのITインフラに対する変更を最小限にし、アプリケーションの更新をより楽にすることが推奨されます。
AWS上でサーバーレスを活用してDXを実現するスタイルズのサーバーレス開発サービスはこちら→
マイクロサービス
マイクロサービスとは、疎結合な最小限の機能(サービス)を組み合わせてひとつの大きなアプリケーションを構成する、ソフトウェア開発の技法のひとつです。機能を分割・疎結合にすることで、テストやコーディング、機能確認に関する工数が削減可能になります。
また、疎結合化することでリリース失敗時の影響を少なくし、安全なリリースが可能になります。したがって、開発サイクルを短くすることができ、より早くビジネスの要求に対応することが可能になります。クラウドネイティブでは、アプリケーションの設計時に技法・システムアーキテクチャとして採用します。
CI/CD
CI/CDとは、「Continuous Integration/Continuous Delivery」の略で、日本語では継続的インティグレーション/継続的デリバリーと呼ばれています。CI/CDはシステムやアプリケーションの変更を常に自動でテスト、自動で本番環境にリリースを行う、といったシステム運用の手法です。パイプラインと呼ばれるフローを定義し、システム開発におけるリリース作業を極力自動化します。CI/CDを取り入れることで、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。クラウドネイティブでは、コンテナやマイクロサービス化したアプリケーションを運用していく際に手法として取り入れます。
The Twelve-Factor Appを振り返る
The Twelve-Factor Appとは、Herokuのエンジニアが2011に提唱したアプリ開発の手法・考え方です。この考え方が文書化されている目的としては『私たちがモダンなアプリケーション開発で見てきたある種のシステム的な問題への関心を高めること、この問題を議論するための共通の語彙を提供すること、そしてこの問題に対する広い概念的な解決策と専門用語を提供することである。』とあり、アプリケーション開発における一定のベストプラクティスを文書化しています。12種類の要素が記載されていますが、大まかに分類化すると、
- アプリケーションの単位は小さくすること(VI. プロセス、VII. ポートバインディング)
- アプリケーションは疎結合化すること(IV. バックエンドサービス)
- アプリケーションに可搬性・柔軟性を持たせること(II. 依存関係、III. 設定、VIII. 並行性、IX. 廃棄容易性)
- 矛盾なくリリースできる環境を整備すること(I. コードベース、V. ビルド、リリース、実行、X. 開発/本番一致)
- 運用上のミスをなくす仕組みがあること(XI. ログ、XII. 管理プロセス)
が挙げられます。上記の分類は、マイクロサービスやコンテナ化と矛盾せず、クラウドネイティブなアプリケーションとマッチする考え方になっています。
AWSにおけるクラウドネイティブのサービス
AWSでクラウドネイティブを実現するにはどのようなサービスを活用していけばいいのでしょうか。『クラウドネイティブへのアプローチ』で挙げた要素に当てはめてみると、下記のようになります。
- コンテナ
ECS、EKS、ECR - イミュータブルインフラストラクチャ
ECS、EKS、サーバーレスサービス - マイクロサービス
ECS、EKS、サーバーレスサービス - CI/CD
Codeシリーズ(CodeCommit、CodeBuild、CodeDeploy、CodePipeline)、Cloudformation
このように、アプリケーション開発にはコンテナや、Lambda、DynamoDB、API Gateway等のサーバーレスサービスを利用し、アプリケーション運用にはCodeシリーズを利用して高速開発の環境を整える、といった方向性になります。
まとめ
クラウドネイティブとは、クラウドにマッチした技術や考え方を徹底的に採用し、ITシステムをより楽に、高速に、活用していくための考え方です。そのためにはコンテナやサーバーレスといったツールのほかに、Twelve-Factor Appなどの考え方も重要です。
AWSでは、クラウドネイティブなITシステムを構築するための様々なサービスが用意されています。また、サーバーレス(https://www.stylez.co.jp/columns/what_is_a_serverless/)についても、クラウドネイティブを推進する上で重要な選択肢であるため、併せて考慮に入れておくといいでしょう。
AWS上でサーバーレスを活用してDXを実現するスタイルズのサーバーレス開発サービスはこちら→