話題の記事

AWS LambdaのSNS対応でクラウドは”シナプス化”する

2015.04.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
昨日未明に行われたAWS Summit San FranciscoでLambdaのSNS対応が発表されました。この機能によって「AWSは"シナプス化"された次世代のクラウドを提示している」のでは、ということを思いついたので説明してみたいと思います。

これまでのクラウドコンピューティング

クラウドコンピューティングが広く使われるようになって久しいですが、まずはこれまでのクラウドコンピューティングに求められている機能を挙げてみます。

  1. オンデマンドのリソース
  2. APIによるコントロール

従来のオンプレミスのコンピュータシステムでは、プログラムを実行するコンピュータリソースとしてサーバーマシンをはじめとするハードウェアを事前に購入、所有しながらそれらを利用する形態が一般的でした。クラウドでは、クラウドベンダーと呼ばれるデータセンター事業者が所有するコンピュータリソースをオンラインサービスとして提供します。利用者はそれらのサービスを必要に応じて選択し、時間貸しでレンタルするわけです。クラウドでは、オンラインサービスを迅速に提供および利用するためにサービスへのアクセス方法としてAPIを採用しています。これにより、利用者はクラウドのリソースをプログラマブルに利用できるため、大規模なリソースを少ない労力でデプロイし、運用できるようになりました。

ただ、クラウドのインフラ管理は、以下の図のように利用者による中央集権的なコントロールになるため、コントロールノードがSPOFになったりスケールしないなどの問題点がありました。

synapsized-cloud01_1

シナプス化されたクラウドコンピューティングとは

"シナプス化"とは、シナプス(神経)のようにクラウドサービス同士でイベント情報を伝達し、協調動作する様子を指します。AWSでは、以下のイベントの発火と伝達、協調動作の基礎となる要素が全て整備され、非常に自由度の高い実装が可能です。

  • イベントの発火と伝達 : 多くのサービスで発生するイベント(例:インスタンス作成や障害検知など)でSNS(Simple Notification Service)通知をサポートし、後述のLambda関数をキックできる
  • 協調動作 : Lambdaでは、多くのサービス操作(例:インスタンス数の変更やバックアップなど)をサポートするAWS SDK for Javascriptで任意のコード実行が可能。Lambda自体は高可用性、高スケーラビリティを備える

synapsized-cloud02_1

クラウドオーケストレーションとの違い

クラウドサービス同士の協調動作自体は、既存のクラウドでもクラウドオーケストレーションやクラウドオートメーションなどで実現しているものもあります。しかし、それらは特定のサービス間で特定の動作をサポートするものであり、実現できることは限定されたものでした。SNS+LambdaではAWSでの多くのイベントおよび操作をサポートするもので、その網羅性と自由度が大きく異なります。

また、オーケストレーションは中央集権的にコントロールノードが中心となって動作するアーキテクチャのため、前述の通りSPOFになり、またスケールしません。シナプス化クラウドは、各サービスが分散的に協調動作するため高可用性、高スケーラビリティとみなすことができます。(オーケストレーションと対比する言葉として、コレオグラフィと呼ばれることを@ar1さんからFacebookで教えていただきました。)

Webhookとの違い

サービス同士の情報伝達というと、GitHubやTravis CIといったソーシャルコーティング、継続的インテグレーション(CI)で用いられるWebhookが連想されます。Webhookでは特定のサービス(エンドポイント)に対して通知(POSTリクエスト)を行うものであり、その通知を受け取るWebサービスを個別に開発、公開する必要があります。SNS+Lambdaでは通知時にオンデマンドでLambdaの処理を実行する仕組みのため、受け取るWebサービスを準備・運用する必要がありません。また、AWS IAM(Identity and Access Management)によるシンプルでセキュアな統合認証でAPIキーなしで認証に対応できます。

まとめ

これからのクラウドでは、新しいアプリケーション/サービスのキャッチアップとともに、サービス間での連携の自由度も評価するポイントになっていくと考えられます。Lambdaでは、管理者に代わって実質的に何でもできるので、AWSのサービス間連携のノウハウや事例の公開、情報交換が今後活発になっていくでしょう。

おまけ

Lambdaについては、最近のプログラミングのトレンドであるリアクティブアーキテクチャに沿っているとも言えます。アプリケーションの高可用性、スケーラビリティが考慮された優れたアーキテクチャと言えます。