AWSを10年運用してわかったことをAmazonの最高技術責任者が語る

By Robert Scoble

Amazonが提供するクラウドコンピューティングサービスの「アマゾン ウェブ サービス(AWS)」が登場してから10年を迎えました。これを運用する中で得られた教訓を、Amazon.comおよびAWSのCTOであるワーナー・ヴォーゲル氏が自身のブログの中で公開しています。

10 Lessons from 10 Years of Amazon Web Services - All Things Distributed
http://www.allthingsdistributed.com/2016/03/10-lessons-from-10-years-of-aws.html


◆発展可能なシステムを構築する
我々が構築するソフトウェアは、1年後も継続しているソフトウェアでなければいけません、とヴォーゲル氏。ヴォーゲル氏はAWSではサービス開始当初から「アーキテクチャーの再考と修正の必要性」を感じていたそうですが、「メンテナンスのためにサービスを停止する」といった古いアプローチ方法でシステムをアップグレードすることはできなかった、と明かしています。なぜAWSのサービスを停止することができなかったのかは至極単純で、世界中の多くのサービスが年中無休で使用できるAWSを採用していたためです。

そこで、ヴォーゲル氏らAWSの運用・開発に関わるエンジニアたちは、サービスダウンがなくなるようなソフトウェアコンポーネントを新しくアーキテクチャーに組み込むことにしました。Amazonで働くエンジニアのひとりであるマービン氏は、AWSの中のサービスのひとつであるAmazon S3の進化は「シングルエンジンのセスナ機のよう」と例えています。これは、航続可能距離を超える運航の際に航空機が空中で燃料補給する様子が、サービスを停止せずにアップグレードを繰り返すAWSのサービスと似ていることから言ったものと思われます。

◆予期せぬことを予測せよ
ルーターやハードディスク、OSにメモリユニットなど、AWSの開発・運用で使用される機器はさまざまですが、最高級のハードウェアであろうと、低価格のコンポーネントであろうと、いずれにせよどこかのタイミングでそれらが故障してしまうのは当然のこと、とヴォーゲル氏。そして、この当然のことが重要なレッスンになります。

例えば、S3で行われる莫大な量のデータ処理プロセスの中でなら、ごくごくわずかな確率でしか起きないようなエラーも数件は起きるものです。しかし、そういった失敗の可能性は前もって予測しておくことができる、とヴォーゲル氏。ただし、前もって知っておける失敗(エラー)よりも多くの未知が設計・構築の間に発生している、とも言います。さらに、ヴォーゲル氏は「失敗が何を指すのかわからなかったとしても、我々は自然発生する失敗を包含できるようなシステムを構築する必要がある」と語り、加えて「家が火事でもシステムは動作し続ける必要がある」として、個々で大きな障害が起きてもシステム全体がダウンしないようなシステムが重要であるとしています。

なお、ヴォーゲル氏はシステム全体を健全に維持するために、失敗が起きる範囲を予測する方法を編み出したとしています。

By kathyturner1

◆原始的ではないフレームワーク
多くの顧客がまだ古いハードウェアやデータセンターを頼りにしていたことから、我々は誰もが見たことのないような新しくて興味深い使い方ができるようなシステムの開発に取り組んでいた、とヴォーゲル氏。そのために必要なのは「自分の提供しているサービスが顧客のニーズをどう満たすのか」に敏感になることだったそうです。

ヴォーゲル氏が提供してきたサービスのメカニズムで最も重要なもののひとつが、顧客にプリミティブやツールのコレクションを提供する、というもの。もしも単一のフレームワークを提供するだけなら、顧客はひとつのものに集中してしまいますが、多くの手段の中から顧客が自分で好みの手段を選択できるようにしたことで、より顧客の満足を得られるようになったそうです。その後の世代のAWS関連サービスでも、同様の方法が使われるようになりました。

ここからヴォーゲル氏は、「顧客にとっての優先事項を予測するのは難しいと理解した上で、実際のサービス構築をスタートすることが重要」としています。

◆自動化は重要
サービスがスタートしたあとも管理し続ける必要のあるソフトウェアサービスの開発は、顧客に提供するだけで終わるソフトウェアの開発とは根本的に異なります。重要なことは、可能な限りの管理を自動化し、エラーやマニュアルでのオペレーションを極力排除すること、とヴォーゲル氏。

これを実現するため、AWSでは人間が行う部分をこなせるような管理APIを構築する必要があったとのこと。そして、AWSではこのAPIが人間の代わりに顧客ユーザーを手助けできるようになった模様。これを構築するために、人が行う作業を本質的な構成要素にまで分解し、確実で予測可能なパフォーマンスを維持するための自動化ルールを適用したそうです。

By machu.

◆APIよ永久に
APIが重要なことはAmazon.comを運用する中で既に学んだ事柄であったそうですが、AWSではAPIがより重要な働きを担うことになったとのこと。一度顧客がAmazonの用意したAPIを使用してアプリケーションやサービスを構築し始めたとすると、そのAPIを変更することは不可能になります。もしもAPIを変更してしまえば、それは顧客のビジネスに大打撃を与える、とヴォーゲル氏。つまり、APIの設計はそのAPIを優れたものにするたった一回きりの重要なチャンスである、とのこと。

By Tsahi Levent-Levi

◆リソースの使用法を知ること
AWSは「サービスプロバイダーがAWSを使用することで必要になるコスト」がどの程度になるのかを意識する必要がある、とのこと。顧客に余裕があるのかないのかをよく知り、ないなら効率性を上げたりコストをカットしたりすることで、顧客になるべく低価格でサービスを提供できるよう努力するべき、とヴォーゲル氏。

◆徹底的にセキュリティを構築する
ヴォーゲル氏は「顧客のセキュリティを保つことが最も重要なこと」とし、この分野に対する投資はAWSが最もお金をかける部分であるとのこと。

なお、ヴォーゲル氏がAWS開発・運用の初期段階で学んだことのひとつは、「セキュアなサービスを構築するには、セキュリティ設計をサービス設計の初期段階に組み込む必要がある」ということだそうです。

By Aaron Patterson

◆暗号化は最重要事項のひとつ
暗号化は顧客がデータへのアクセスを完全にコントロール可能である、ということを保証するために必要なメカニズムです。10年前、暗号化用のツールとサービスは使用するのが非常に難しく、この暗号化の仕組みをAWSに組み込むには数年の時間を必要とした、とヴォーゲル氏。しかし、現在は暗号化関連のツールとしてAWS CloudHSMAWS Key Management Serviceが存在しており、暗号化鍵を顧客側で管理できるようになっています。

AWS Key Management Service の発表(日本語字幕) - YouTube


◆ゲートキーパーは不要
AWSにはサービスの中で何ができて何ができないのかを顧客に伝えるゲートキーパーが存在しません。これがAWSの、革新的なプロセスや予期せぬ発明につながっているとのこと。実際に、PhilipsのHealthSuite Digital PlatformOhpenのリテール・バンキング・プラットフォームはAWS上に構築されています。

・関連記事
将来をハッピーに過ごすために30歳になったら実行すべき10のこと - GIGAZINE

スタートアップを成功させた企業創設者が絶対に言わない10のこと - GIGAZINE

人工知能について今知っておくべき10の事柄 - GIGAZINE

タランティーノ映画に隠された10の真実 - GIGAZINE

116

in メモ, Posted by logu_ii