クラウド技術
クラウドコンピューティングは、インターネットを通じてネットワーク上にある複数のコンピューターを利用して、コンピューティングリソースを提供するサービスとなる。このサービスは、ユーザーがインターネットに接続している任意の場所から、必要なコンピューティングリソースを必要な時に利用することができる。
クラウドコンピューティングは、次のようなメリットを持つ。
- スケーラビリティー:必要に応じて、必要なだけのコンピューティングリソースを追加できる。
- コスト効率:クラウドコンピューティングは、必要なときに必要なだけのリソースを提供するため、コスト効率が高くなる傾向がある。
- モビリティー:インターネットに接続している場所から、必要な時に必要なだけのリソースを利用することができるため、ユーザーにとって利便性が高くなる。
- セキュリティー:一部のクラウドコンピューティングサービスは、データのセキュリティーを確保するために暗号化技術を使用している。
一方でクラウドには以下のようなデメリットがある。
- 企業にはハードウェアの管理権限がない : 前述したように、クラウド化されたサービスの利用にあたっては、企業はサービス提供会社が用意したICTリソースを使用することとなる。ハードウェアに関するさまざまな設定やトラブル対処はサービス提供会社に責任があり、ユーザ―側の企業には権限がない。
- カスタマイズの自由度が低い : 企業にはハードウェアの管理権限がないことにに起因し、企業にはICTリソースやサービス内容に関する決定権がないため、場合によっては自社のビジネスに必要なサービスを受けられないこともある。
- パフォーマンスが他ユーザーに左右される : クラウドサービスのベンダー側は、1つのサーバーやネットワークを利用して複数のユーザーと契約していることがほとんどで、とあるユーザーが負荷の大きい作業を行うと、他のユーザーのパフォーマンスに支障が出るおそれがある。
クラウドコンピューティングには、以下の4つの主要なモデルがある。
- ソフトウェアサービス(SaaS):アプリケーションやソフトウェアを提供するサービス。SaaSを利用した代表的なクラウドサービスには「Gmail」や「GoogleWorkspace」のほか、各種の地図サービスや乗換案内サービスなどがある。
- プラットフォームサービス(PaaS):アプリケーションを開発するためのツールやプラットフォームを提供するサービス。PaaSを利用した代表的なサービスには「Google App Engine」「Microsoft Azure」「IBM Cloud」がある。
- インフラストラクチャサービス(IaaS):仮想化されたインフラストラクチャを提供するサービスであり、仮想マシンやストレージ、ネットワークなどのリソースを提供する。IaaSの代表的なサービスには「Amazon Web Service」、「Microsoft Azure」「Google Compute Engine 」などがある。
- ハードウェアサービス(HaaS) : インターネット経由でハードウェアを利用できるサービスとなる。具体的には仮想サーバーのインターネット上での提供で、仮想サーバーが、「CPU」「メモリー」「ストレージ容量」などから目的に応じて選択できるものから、IOTサービス等も含まれる。
本ブログではこのクラウド技術の詳細に対して以下に述べている。
技術詳細
クラウドコンピューティングは、インターネットを通じてリソースやサービスを提供するコンピューティングモデルとなる。AWS(Amazon Web Services)は、Amazon.comが提供しているクラウドコンピューティングプラットフォームとなる。AWSはさまざまな実装パターンを提供している。以下にいくつかの代表的な実装パターンとその手順について述べる。
機械学習における並列分散処理は、データや計算を複数の処理ユニット(CPU、GPU、コンピュータクラスタなど)に分散し、同時に処理することで処理時間の短縮やスケーラビリティの向上を実現するもので、大規模なデータセットや複雑なモデルを処理する際に重要な役割を果たすものとなる。ここではこの機械学習における並列分散処理に対して、オンプレ/クラウド環境での具体的な実装例について述べている。
- オペレーティングシステムの概要とLinux OS(CentOS,Ubuntu)の環境設定
オペレーティングシステム(Operating System)は、コンピューターシステムの基本的なソフトウェアの一部であり、ハードウェアとアプリケーションソフトウェアの間のインタフェースを提供するものとなる。オペレーティングシステムは、コンピューターのリソース(プロセッサ、メモリ、ディスクスペースなど)の管理や、ユーザーとコンピューターシステムとの対話のための環境を提供している。
ここではこのOSに関してはLinuxとLinuxのディストリビューションであるCentOS、Ubuntuの具体的な実装方法とクラウド環境(AWS)でのOSについて述べている。
マイクロサービスは、ソフトウェア開発アーキテクチャのアプローチの一つであり、アプリケーションを複数の小さな独立したサービス(マイクロサービス)に分割することを特徴としたものとなる。各マイクロサービスは、個別に開発、展開、拡張、保守が可能であり、独自の機能を持っている。ここではこのマイクロサービスを構成する要素の概要について述べている。
“マイクロサービスのデプロイと運用-DockerとKubernetes“でも述べたが、Kubernetesはクバネティス/クバネテス/クーべネティス、K8sと略記される技術プラットフォームであり、今点中したアプリケーションのデプロイ、スケーリング、および管理を行うためのオープンソースのコンテナオーケストレーションシステムとなる。元々Googleが設計したシステムだが、現在では、Cloud Native Computing Foundation(CNCF)がメンテナンスを行っている。
CNCFの掲げるクラウドネイティブとは、「回復力、管理力、および可観測性のある疎結合システムと、堅牢な自動化を組み合わせることにより、システム変更を最小限の努力で、頻繁かつ予測通りに行う設計思想」となる。
前回は、企業のクラウドネイティブへの歩みとともに、その中で期待されているコンテナオーケストレーションについて述べた。しかし、クラウドネイティブを実装する上での大きな課題は、クラウド技術に対する環境依存となる。例えば、特定のクラウドベンダーサービスを利用すると、そのサービスの機能やサービスレベルによって、アプリケーションのアーキテクチャ変更が強いられる。これでは、いくらクラウドを利用しても、ビジネス変化に迅速に対応できるとは限らない。
コンテナ技術が注目されている一つの理由は、こうしたベンダー依存からの解放となる。その技術的要素には、Linux Kernelの機能が活用されており、これまでのアプリケーション実行環境と大きく変わるものはない。しかし、コンテナ技術の標準化への対応によって、クラウドが特定のベンダーによって占有されることなく利用できることに、クラウドネイティブへの第一歩がある。
ここでは、こうしたコンテナを支える技術について述べるとともに、コンテナやKubernatesがどういった仕組みによって、ビジネス価値を提供しているのかについて述べる。
CDPは、クラウドを利用したシステムのアーキテクチャ設計時に起こる、典型的な問題とそれに対する解決策を、その本質を抽象化して再利用できるように整理・分類したものとなり、これまでアーキテクトが発見してきた、もしくは編み出してきた設計・運用のノウハウを、再利用が可能なデザインパターンという形式で、暗黙知から形式知に変換したものといえる。CDPのパターンのうち、「基本パターン」「可用性向上パターン」「動的コンテンツの処理パターン」「静的コンテンツの処理パターン」について述べる。
CDPは、クラウドを利用したシステムのアーキテクチャ設計時に起こる、典型的な問題とそれに対する解決策を、その本質を抽象化して再利用できるように整理・分類したものとなり、これまでアーキテクトが発見してきた、もしくは編み出してきた設計・運用のノウハウを、再利用が可能なデザインパターンという形式で、暗黙知から形式知に変換したものといえる。CDPのパターンのうち、「データアップロードのパターン」「リレーショナルデータベースのパターン」「非同期処理/バッチ処理のパターン」について述べる。
CDPは、クラウドを利用したシステムのアーキテクチャ設計時に起こる、典型的な問題とそれに対する解決策を、その本質を抽象化して再利用できるように整理・分類したものとなり、これまでアーキテクトが発見してきた、もしくは編み出してきた設計・運用のノウハウを、再利用が可能なデザインパターンという形式で、暗黙知から形式知に変換したものといえる。CDPのパターンのうち、「運用保守のパターン」「ネットワークのパターン」について述べる。
今回は、webサーバー一台とデータベースサーバー1台で構成されたオンプレミスのシステムをAWSで実現するにはどうすれば良いかについて述べる。
Amazon Web Services(以下AWS)は、クラウドで構成された仮想的なシステムとなる。当然のことながら、コンピューターやストレージ、ネットワークも仮想的となる。AWSと契約直後は、サーバーはおろかネットワーク自体もない状態となる。
システムを作るためには、まず仮想的なネットワークを構築することら始める必要がある。仮想的なシステム構築は、従来の物理的なシステム構築と基本的な考え方は同じだが、異なる部分も少なくない。そのため、AWSの仮想的なシステムやネットワークの構築には、最初にその違いを十分に理解しておく必要がある。そこで今回ははレガシーな物理インフラとAWSにおけるデータセンター環境の違いについての概要について述べる。
Amazon VPC(Virtual private Cloud)は、クラウド上に仮想的なネットワークを構成するサービスとなる。サーバーなどのリソースを配置するときには、まずVPC領域の作成が必要となる。さらに仮想マシンをVPC領域内で稼働さらるには、VPCにサブネットを作成し、いくつかのネットワークの設定を行うコツようがある。ユーザーにとっては、最も基本的なAWSのサービスの一つとなる。
VPCは仮想的なネットワーク環境なので、ハードウェアに一切触れることなく、遠隔地からでもwebブラウザを利用したユーザーインターフェースを利用して自由に設定できる。AWSクラウド内であれば、たとえ大規模なネットワークであっても、膨大なリソースの管理を少人数で対応可能となる。ただし、AWSの仮想ネットワークの構築には、独自の設定内容も少なくないため、ここでは、そうした点に注意しながら、実際にVPC領域を作成し、その中にサブネットを作成していく。
サブネットにEC2インスタンスを配置すると、プライベートIPアドレスが一つ以上、自動で割り付けられる。まずはその割り当てルールと仕組みについて述べる。
上記までのIPアドレスの割り当てルールをベースにして、実際にサブネットにEC2インスタンスを配置して、その動作を見てみる。ここでは前述した「mysubnet01」というサブネットに、EC2インスタンスを設置する例について述べる。
AWSでは、性能が異なるさまざまなEC2インスタンスタイプが提供されている。EC2インスタンスは、稼働時間1時間あたりの従量課金で、高性能なインスタンスほど高価となる。今回実験で用いるだけなら、低スペックで価格の安いインスタンスタイプを選べば十分となる。しかし、実際に運用する際には、コストとパフォーマンスの兼ね合いで求められるシステムの要求に応じた適切なインスタンスタイプを選ぶ必要がある。インスタンスの性能は、主に以下の7項目で決まる
インターネットからEc2インスタンスに接続するには、パブリックIPアドレスの割り当てとインターネットゲートウェイが必要となる。このこと自体は、通常のネットワーク環境と変わらないが、AWSにおけるパブリックIPアドレスは、少し特殊な扱いになっており、インスタンスに本当にパブリックIPアドレスを割り当てるのではなく、プライベートIPアドレスのままNATで変換して通信する。
今回はパブリックIPの割り当てとインターネットゲートウェイの設定方法について述べる。そして、SSHでEC2インスタンスにログインし、ネットワークインターフェースの設定を確認することで、割り当てたIPアドレスは、インスタンスからどのように見えるのかについて述べる。
VPC上のEC2インスタンスをインターネットに接続するには、パブリックIPアドレスを割り当てるだけでは十分でない。インターネットゲートウェイを用意し、ルートテーブルも変更しなければならない。
インターネットに接続されるEC2インスタンスには、外部からの攻撃に対処するため、通信ポートを制御するファイアーウォール機能が必要となる。AWSのファイアーウォール機能には2つのしくみが用意されている。一つは「セキュリティグループ」もう一つが「ネットワークACL」となる。前者はEC2インスタンスごに設定され、後者はサブネットごとに設定されるものとなる。
セキュリティレベルの異なる仕組みが用意されているのは、両者を使い分ける必要があるためで、大雑把に言うと、サブネット単位のセキュリティにはネットワークACLを使い、インスタンスごとに個別の対応が必要なポートの制御は、セキュリティグループを使う。
今回は、この2つのファイアーウォール機能について述べ、Apache HTTP ServerやnginxなどのWebサーバーソフトウェアをEC2インスタンスにインストールしたときに必要となる、セキュリティグループの変更方法について述べる。
バックエンドにデータベースをかかえるよえなWebサイトでは、セキュリティ上の理由から、インターネットから直接アクセスできないサブネットにデータベースサーバーを設置するのはよくある実装となる。AWSの場合も、プライベートサブネットにEC2インスタンスを設置できる。
EC2インスタンスに対して何か作業するには、SSHなどを使ってリモートから接続する必要がある。しかし、プライベートなIPアドレスしか割り当てられていないインスタンスには、インターネットから到達できないため、直接インスタンスをリモートから操作できない。これに対する法則としては以下の2つがある。(1)踏み台サーバーを使う、(2)VPNを構成する 今回は(1)の手段についてWordPressとMySQLの構築を例として具体的な実装について述べる。
ビジネスで利用されるWebサーバーは、通常は「http://www.example.co.jp/」などの、独自ドメインを使ったURLで運用される。そのとき必要となるのが「パブリックな固定IPアドレス」と「DNSサーバー」となる。
オンプレミスの通信環境であれば、DNSが必要となればBINDを利用するのが当たり前なので、AWSでもEC2インスタンスにBINDをインストールすると考えるのが普通となる。もちろんこの方法でも名前解決を行う仕組みを構築できるが、AWSでは通常DNSサービスを提供するマネージドサービス(AWSに運用管理を任せてしまうサービス)である、Route53を利用する。
Terraformとは、 HashiCorp社によって開発された オープンソースのサービス で、 開発環境を効率的に構築できるIaC(Infrastructure as Code)ツールの一種となり、クラウドサーバーなどシステム開発に必要なインフラを、コードを記述することにより自動で構築でき、インフラの構成管理などもTerraformのコードによる宣言が可能な事も特徴なものとなる。
Terraformは宣言的なコードでインフラストラクチャを記述でき、コードをバージョン管理することで、システムの変更履歴を簡単に追跡できるようになり、また自動的に依存関係を解決することができるため、手作業にありがちなヒューマンエラーを大幅に削減することができる。
Terraformは、クラウドインフラストラクチャやその他のITリソースを自動化するためのオープンソースのツールとなる。Terraformは、プログラマブルな方法でリソースを作成、変更、バージョン管理することができる。
Kubernetesは、Dockerやその他のコンテナランタイムで実行されるアプリケーションを管理するためのオープンソースのオーケストレーションツールとなる。Kubernetesは、複数のノードにまたがるアプリケーションのデプロイ、スケーリング、管理、そしてフェイルオーバーを簡単に行うことができる。
マイクロサービスは、1つのコマンドで複製やデプロイができる自己完結型のアーティファクトとしてパッケージ化されている必要がある。また、サービスは数秒以内に稼働できるように、起動時間が短く軽量である必要もある。コンテナは、ホストOSと必要な依存関係を持つベアメタルマシンをセットアップするのに比べ、固有の実装により迅速にデプロイすることができる。また、コンテナ内にマイクロサービスをパッケージ化することで、開発から本番環境への移行をより速く、自動化することも可能となる。よってマイクロサービスはコンテナ内にパッケージ化することが推奨されている。
コメント
[…] 暗号化とセキュリティ技術およびデータ圧縮技術 マイクロサービス技術 クラウド技術 DevOpsについて […]
[…] ードウェアリソースやGPU、TPUなどの高性能なハードウェアを利用することで、DenseNetを効率的に訓練および評価できる。クラウドの利用に関しては”クラウド技術“も参照のこと。 […]
[…] 分散コンピューティング: 計算リソースを効果的に活用するために、GPU、TPU、クラウドコンピューティングなどの高性能なハードウェアを利用することが考えられる。機械学習による並列分散処理に関しては”機械学習における並列分散処理“を、クラウドの利用に関しては”クラウド技術“、GPU等のアクセラレーションに関しては”コンピューターにおけるハードウェア“を参照のこと。 […]
[…] ードウェアリソースやGPU、TPUなどの高性能なハードウェアを利用することで、GoogLeNetを効率的に訓練および評価できる。クラウドの利用に関しては”クラウド技術“も参照のこと。 […]
[…] ハードウェアリソースやGPU、TPUなどの高性能なハードウェアを利用することで、ResNetを効率的に訓練および評価できる。クラウドの利用に関しては”クラウド技術“も参照のこと。 […]