クラウドコンピューティング
基礎
- CPU やメモリ、ディスク、その他の様々なインフラや実機などを仮想化し、ユーザが
必要なときに
必要な分だけ
をインターネットを通じて1利用することができるサービス - クラウドコンピューティング定義
提供されるサービスの種類
IaaS(Infrastructure as a Service)
- ユーザが各種必要なハードウェアリソースを選択し、OS やミドルウェアをユーザ側で構築、運用するサービス
- 例
PaaS(Platform as a Service)
- アプリケーションが動作するためのプラットフォームを提供
- ミドルウェアまでをサービスとして利用できる
- 例
- Heroku
SaaS(Software as a Service)
- アプリケーションを直接利用できる
- 例
- Gmail
- Dropbox
- Evernote
クラウド事業者
- Amazon
- AWS(Amazon Web Services)
- Microsoft
- Microsoft Azure
- Google
- Google Cloud Platform
- IBM
クラウドコントローラー
- 複数のクラウドサービスを一元的に管理・運用するための管理専用ソフトウェア
- Windows Azure Pack
- OpenStack
- クラウド管理ツール
- OpenStack, CloudStack
- 独自のIaaS を構築、運用するためのクラウド管理ツール
- 対応するハイパーバイザーなどは多岐に渡っており、企業のプライベートクラウド構築や商用クラウドサービスの提供などにも利用
- Eucalyptus
- AWS 互換の API を提供することを目的としたクラウド管理ツール
- OpenNebula
- Xen や KVM といったハイパーバイザーに対応したクラウド管理ツール
- その他のクラウド管理ツールに比べてシンプルな構成であるのが特徴
- OpenStack, CloudStack
Immutable Infrastructure
従来のシステムのライフサイクル
- 構成するハードウェアやソフトウェアの保守期限が重要な要素
- システム構築を計画する際に企業のシステム部は、そのシステムが実現する業務プロセスやサービスに見合ったシステム投資額を決定し、そのシステムを何年利用するかを決める
- アーキテクチャやソフトウェアはハードウェアの保守期限より早いライフサイクル
ビジネスに沿ったライフサイクル
- ビジネススピードに沿って、素早く投入、素早く撤退(資産を残さない)を実現できるようにしたい
- インフラ環境の構成情報をコードとして定義し、自動構築の仕組みを使って、構成を再現できるようにすることが必要
- Infrastructure as Code
- Chef, Puppet, Ansible, Serverspec
- Infrastructure as Code
デプロイメント
- インプレース更新
- すでに動作している実行環境に、新しいアプリケーションモジュールを配布する方法
- リクエストの受付が一時的にできなくなるという欠点がある
- リリースするまでアプリケーションの動作は確認できないので、性能問題を引き起こすアプリケーションの問題を抱えていても、それが分かるのはリクエストが来てから
- Blue-Green
- アプリケーションの更新や、実行基盤の更新の際に、新しいバージョンのアプリケーションを実行環境毎に別に構築し、動作確認まで行った上で、現行の環境と URL スワップを行い、リクエストを受け付けられる状態を継続していく方法
- 2 つの本番環境に相当する 2 つの環境を切り替えて利用
- 問題点
- インフラを 2 重で保持しておく必要性
- ステートフルなサーバに対しては利用が難しい
- 実現方法
- DNS による切り替え
- LB による切り替え
- Cookie による切り替え
- 接続先の制御を細かくできる
- A/B テスト
- インプレース更新
cloud-init
- 再起動後に hostname が更新されないように /etc/cloud/cloud.cfg の update_hostname をコメントアウト