私とAWSの15年 あるいはThe Bezos Mandateの話

 こんにちは佐々木です。
本日よりNRIネットコムのメンバーによるイベント、「APN AWS Top Engineers/APN Ambassadors Week」を開催します!!!一番手を担当することになったので、昔を振り返りながらAWSについて考えてみます。

最初のAWSはいつだったのか?

 振り返るうえで、まずAWSは始まりはいつだったのかを探ってみましょう。最初のAWSを探ろうとすると、もはや考古学の領域になりそうですが、一般的には2004年のSQSを持って(今の)AWSの始まりとしているようです。この記事を書くにあたって裏を取ろうと思って『最初のAWS』でググると、過去に自分が寄稿した記事が出てきました。本当に、ありがとうございます。

dev.classmethod.jp

 ただ、AWSの名前で一般的に認知されだしたのは、S3やEC2が登場した2006年です。私がAWSに出会ったのも2006年でした。以来15年AWSと共に歩んできて、プライベートのデータの保存や趣味のプログラミング、あるいは本業であるシステムの構築や運用、そしてAWS関連の書籍の執筆など、公私ともどもAWSにどっぷりという生活を送ってきました。そして今ふと気になっているのは、なぜAWSがこんなに隆盛を誇っているのか、何が画期的だったのかという点です。

AWSの何が画期的だったのか?

 AWSはクラウドという概念が存在する前から、クラウドを具現化しつづけてきました。一方で個々のサービスだけみると、必ずしも画期的という訳でもなかったです。例えば、EC2をとってみてもそれ以前からレンタルサーバーという業態はあったし、仮想サーバの概念もありました。そんな事を考えながら呟いてみると、いくつかのリプライを頂きました。

 わりと満場一致の意見としては、APIで操作するという点でした。確かにそうですね。AWS以前はサービス契約する際は、営業マンを読んで契約してましたし、そのサービスを操作する場合も、メールで依頼していたり良くてもWebの管理画面で操作をしていました。APIを通じて操作するといった類のものは見た記憶がなかったです。ちなみに初期のAWSはAPIのみ提供されていて、Webの管理画面なるものは一切存在しなかったです。AWS Management Consoleが出たのは、なんとS3やEC2の3年遅れの2009年からです。ストイックな世界だったのですよね。

blog.takuros.net

ジェフ・ベゾスの掟(The Bezos Mandate)からAWSが生まれた

 じゃぁ、その特異点というべきAPIを介して操作するという考え方は、どこから来ているのでしょうか?実はこれ、Amazonの創業者のジェフ・ベゾスの宣言(The Bezos Mandate)から来ています。Mandateというとあまり聞き慣れない単語かもしれませんが、ビジネスの世界では割とよく聞きます。例えば、ウォルマートが納入業者にICタグの貼り付けを義務付けたWalmart Mandateなどがありますね。

 で、そのジェフ・ベゾスの掟とは何だったのでしょうか?2002年前後に宣言されたものが、2011年に元Amazonのエンジニアにより公開されていました。内容は次のような7か条だったようです。

The Bezos Mandate

  1. All teams will henceforth expose their data and functionality through service interfaces.
  2. Teams must communicate with each other through these interfaces.
  3. There will be no other form of interprocess communication allowed: no direct linking, no direct reads of another team's data store, no shared-memory model, no back-doors whatsoever. The only communication allowed is via service interface calls over the network.
  4. It doesn't matter what technology they use. HTTP, Corba, Pubsub, custom protocols --doesn't matter. Bezos doesn't care.
  5. All service interfaces, without exception, must be designed from the ground up to be externalizable. That is to say, the team must plan and design to be able to expose the interface to developers in the outside world. No exceptions.
  6. Anyone who doesn't do this will be fired.
  7. Thank you; have a nice day!

DeepLによる日本語訳

  1. すべてのチームは、今後、サービスインターフェースを通じてデータや機能を公開することになります。
  2. チームは、これらのインターフェイスを介して相互に通信しなければなりません。
  3. 他の形式のプロセス間通信は一切認められません。直接リンク、他のチームのデータストアの直接読み込み、共有メモリモデル、バックドアなどは一切認められません。唯一許される通信は、ネットワーク上のサービス・インターフェース・コールによるものです。
  4. どのような技術を使うかは問題ではありません。HTTP、Corba、Pubsub、カスタムプロトコル......何でもいい。ベゾスも気にしない。
  5. すべてのサービスインターフェースは、例外なく、外部化可能なように一から設計しなければならない。つまり、外の世界の開発者にインターフェイスを公開できるように計画し、設計しなければならない。例外はありません。
  6. これをしない者はクビになる。
  7. ありがとうございました。良い一日をお過ごしください。

 チーム間のやり取りを、全てインターフェース(API)を通じてやりなさいと。ファイル共有やデータベースの参照などプロセス間通信は一切許しませんよと。守れなければクビとのことです。激しいですね。面白いのは、インターフェースを通じてやりとりをするという事だけを決めていて、その実装方法は問わない点です。HTTPでもCorbaでも独自のプロトコルでも何でもいいよと。この規定のお陰で、Mandate が時代を超えて通じるものになっています。この辺りが、ベゾスのバランス感覚なんでしょうね。知らんけど

そしてS3の開発の経緯

 じゃぁ、その宣言があって、AWSのサービスはどのように開発されてきたのでしょうか?調べていると、次のような逸話が出てきました。Jeff Barrのブログに、S3の開発時の仕様について言及していました。

aws.amazon.com

We launched S3 in early 2006. Jeff Bezos’ original spec for S3 was very succinct – he wanted malloc (a key memory allocation function for C programs) for the Internet. From that starting point, S3 has grown to the point where it now stores many trillions of objects and processes millions of requests per second for them. Over the intervening 13 years, we have added many new storage options, features, and security controls to S3.

なんと、これもベゾスが仕様を提示していたようです。そして、それは非常にシンプルなものだったようです。

「インターネットにおけるmallocを作れ」

mallocとは、C言語におけるメモリ割り当ての関数です。非常にプリミティブな機能で、言語の根幹となっています。ベゾスはS3はインターネットにおけるプリミティブな機能になるようなものとして作れと指示を出していたようです。凄いですね。

S3はAWSのサービス群の中で非常に重要な機能です。ほとんど全てのサービスは、元を辿ればEC2とS3で構築されているといっても過言ではないでしょう。そして、今では世の中のサービスの多くにAWSが利用されています。ある意味、S3はインターネットにおけるmallocと言ってもよいくらいに重要な役割を果たしているのでしょう。

この一連の逸話を聞いていて感心するのは、ベゾスのビジョンを示す巧みさと、それを実現するAWSのエンジニア陣の優秀さです。内情はまったく解らないので想像ですが、ベゾスがビジョンや考え方じゃなくて具体的なサービスの仕様を指示していたら、今のAWSあるいはクラウドはもっとこじんまりとしたものだったかもしれません。あるいはそれを受け止められるエンジニア陣がいないと、ただの誇大妄想で終わったでしょう。ビジョンとそれを実現できる組織を作ったという事実に、ただただ驚かされます。

AWSを見続けてきた15年

 書いているうちにドンドン横道に逸れてきたので、主題が何か解らなくなってきました。外の人間としてAWSを見続けてきた人間としては、その当時AWSが何を考えて開発していたのか解らなかったものが段々紐解かれていくのが面白いですが、ほぼほぼ傍観者としての存在です。個人的には、AWSの大きな可能性を感じながら、その波に充分乗り切れなかったのは残念でなりません。
 一方で、さらに15年後からみると、今はまだまだ始まりに過ぎないのかもしれません。何事も始めるのに遅すぎることはないと思い定め、新たなスタートをきっていこうと思います。幸いにして、NRIネットコムはAWSのアンバサダー2名、Top Engineer 7名と、AWSからも評価&期待されています。またその予備軍も沢山います。もっともっとビジネスとしても大きくできるはずなので、これからもチャレンジしていくので、よろしくお願いいたします。

明日は、小西さんのブログに続きます。お楽しみに~!!

f:id:takurosasaki:20210326005216p:plain

執筆者佐々木拓郎

Japan APN Ambassador 2019
ワイン飲みながら技術書を書くのが趣味なおじさんです

Twitter:https://twitter.com/dkfj

Facebook:https://www.facebook.com/takuro.sasaki

個人ブログ:https://blog.takuros.net/

Amazon著者ページ:Amazon.co.jp: 佐々木 拓郎:作品一覧、著者略歴

Booth:https://takuros.booth.pm/