3つの新機能をピックアップして紹介します

ティム・ワグナー氏:サーバーレスアプリケーションの開発を開始されている方々に対して、最近導入した新機能、そしてみなさんの仕事に活用していただけるベストプラクティスを紹介していきたいと思います。

re:Invent以降チームはスピーディーにさまざまな新機能を導入してきました。その中から3つほどご紹介したいと思います。

まずNode.jsを4.3.2のバージョンにアップグレードしました。これは継続的なNodeに対してのコミットメントを示しています。そして、この言語の重要性を示しています。

Lambdaで投入した最初の言語で、急成長を遂げている大変エキサイティングな言語です。Nodeのコミュニティで常にキープアップし、Lambdaの中で使われるバージョンを展開したいと思っています。

ステージ変数というのはAPI Gatewayの機能ですけれど、これを使うことによってさまざまなバージョンを導入し、ステージングすることができます。APIのバージョンを導入する時に活用いただけます。

そしてまたAPI Gatewayの中で、最近Swaggerのサポートを導入しました。Swaggerのファン、あるいはSwaggerのハブを使ってAPIを公開したり、あるいはチームとしてAPI定義についてコラボレーションする時にはこのケイパビリティを使うことができます。API Gatewayでさらに簡単に使えるようになりました。

スケジュール機能入門ガイド

それでは、こういった新しい機能がどう使えるのかということについて詳しくご紹介していきます。

スケジュールを使うことによって、Lambda関数をいつでも実行できるようになります。例えば、未来の時点で実行できますし、継続的にくり返し実行することもできます。あるいはそれ以上のこともできるようになっています。

例えば、もし関数をウォーム状態に保ちたい場合、コールドスタートのレイテンシーを避けたいということであればスケジュール化することができます。

そして、大変大きな無料利用枠がありますので、その関数をほぼ無料で使える期間があります。そしてまた関数を使ってキューのポーリングなどもできるようになっています。

SQSとか、ラピートMQを使っていて、そしてそこからデータを抽出したいといったことであればLambdaをスケジュールと組み合わせることで、そのデータをキューから抽出することができます。

そして、それを必要に応じて高速、あるいは低速でデータの生成に応じて使うことができます。

ほかにもいろいろできます。例えば、1つの関数をほかから呼び出すということ。タイマーがオフになったら、簡単にファンアートできるということです。いろんな興味深いアイデア、スケジュールの設計パターンがあります。

関数のバージョニングとは?

もう1つ、私どもが最近発表したバージョニングという機能があります。バージョニングというのは大変シンプルです。

複数の関数のコピーが時間と共に変化します。それぞれのバージョンは個々にイミュータブルです。つまり、わざわざその下でどういった変更、あるいはクライアントの下からどのような変更があるかは気にする必要がありません。

もし、その一部をミュートしたい場合はどうすればよいのでしょう? あるいは、設計をコードと切り離したい場合はどうすればいいのでしょうか? 簡単なやり方としては、2つの関数を持つことです。

1つは構成データを代表し、もう1つは実際のコードを表します。そして1つをもう1つから呼び出して、必要なコンフィグを入手するということです。そのコンフィグレーションデータをS3にストアする、あるいはDynamoにストアし、そして必要な時に呼び出すこともできます。

そしてまたバージョニングに関して、もう1つエイリアスという機能もあります。エイリアスというのはシンボリックなリンクです。例えば、ロールバックすることができます。Lambda関数のロールバックです。

ある1つのファンクションをリリースして前のバージョンに戻したいという時、すばやくエイリアスのポイントを変えることができます。前のバージョンにポイントを切り替えることができます。

このLambdaのすばらしいところは、我々が大変な作業はすべて行うという点です。例えば、全フリートでロールバックをします。後はみなさまがエイリアスを使って、すべてのコードなどを機械で切り替えるということをします。つまりサーバーレスによって、みなさんの仕事が簡単になるということです。

それに関連して、Blue/Greenデブロイメントはどのように行うのか、という質問があります。もちろんコードをマシンをのせることを心配する必要はありません。それは私たちが行います。

ただ、トラフィックのコードを変更することによってシェイプしたいという場合、シェイピングの方法としてはトラフィックシェイピングの関数を使います。Lambda関数です。

あるリクエストに対して、古いバージョンを呼び出すのか、新しいバージョンを呼び出すのか決めます。時間が経てば、その比率を変えることもできます。

どのバージョンがリクエストストリームの主流となるのか、リクエストがユーザーから入ってくる時に調整できます。いろんな柔軟性があります。追加の関数を使うことによって、これらのすべての関数が自動的にデプロイされます。

AWS LambdaのVPCの基礎

では次に、私どものもっとも大きな、パワフルな機能についてご紹介します。多少そこに複雑さもあります。それがVPCです。最初にいくつか基本的なところをご紹介します。

すべてのLambda関数はVPC内で実行されます。常にです。したがって、わざわざセキュリティを有効にする必要はありません。常にセキュアです。

しかし、場合によってはLambda関数を自分たちのVPCの中で実行したいということもあるでしょう。

そういう時にはリレーショナルデータベースにアクセスをさせたり、あるいはElasticCache、プライベートのエンドポイント、あるいはそのほかのVPCの中のリソースを使えばいいわけです。

それをオンにすると、すべてのVPCの機能にアクセスが与えられます。ピアリング、プライベートS3のエンドポイント、すべてLambda関数からアクセス可能になります。

1つ重要なのは、もしほかになにもしなければLambda関数はインターネットにアクセスできません。もしかしたら、プライベートにやりたいかもしれないのでそれを希望しているかもしれません。

しかし、インターネットにアクセスをしたい時にはNATサービス、あるいは自分のNATインスタンスをVPCの中に入れることになります。重要なのは、関数をどういうふうに挙動させたいのかということです。

VPCのベストプラクティス

ほかにもいくつかVPCのベストプラクティスがあります。まず、オプションだと申しました。必要でなければ有効にしないことをお薦めします。

ENIは、LambdaのVPC機能によって使われています。これはENIクォーターによってカウントします。つまり、リミットがじゅうぶんに高い上限に設定され、そしてLambda関数の中でコンカンレンシーを有効にしてください。

これらのENIを私たちのほうで管理します。Lambda関数に関連しているのであれば、削除、あるいはリネームする必要はありません。私たちがきれいにします。例え、関数を削除しても、あるいは使わなくなったとしても数時間でできます。

じゅうぶんなIPがあることを確認してください。そして最後に少なくとも1つのサブネットをそれぞれのアベイラビリティゾーンで指定してください。これは要件ではありませんが、Lambdaはこれによって耐障害性が高まることになります。

サーバレスマイクロサービスの作成方法

これまでLambda関数とその機能について説明してまいりましたが、次は全アプリケーションをまとめてみましょう。つまり関数をまとめ、APIを統合し、そしてイベントソースを統合するということです。

いくつかの方法があります。現在ある2つのオプションは、AWS CloudFormation。オープンソースフレームワークです。

CloudFormationをここで見たいと思います。デモでご紹介します。これはデプロイメントのテクノロジーです。これを使うことによって、さまざまなAWSのサービス、そしてリソースをデプロイすることができます。インフラストラクチャ、そしてサーバーレスが入っています。

ここでいくつかCloudFormationを使ってLambda関数をデプロイしてみましょう。APIと一緒に、そしてデータベースと一緒にデプロイしてみます。

また大量のオープンソースのフレームワークがあります。Severless.comのようなソリューションもあります。クライアントサイドのソリューションを提供しているものです。

それぞれ違う動き方をしますが、一般的にはみなさまがどのコードが一緒になるのか、どの関数、あるいはAPIのグループに属するのかを判断できます。そして、ステージ、テスト、デプロイをユニット、単位としてできるようになっています。

1つ、オープンソースフレームワークの課題は、これは純粋にクライアントサイドにあります。そして、Lambdaのところではアプリケーションの知識、あるいはどういったコレクションを表しているのかわかりません。

従って先週、発表したのが新しいオープンソースプロジェクトです。私たちがこれから作るFlourishと呼ばれるものです。

Flourishは、エコシステム、サーバーレスのアプリケーションモデルとして、Lambdaが知っているAPIを使って個々の関数だけでなく、バージョン管理をアプリケーション全体で行うことができます。APIの中に10個関数があったとしたら、それをすべてロールバックします。1つの単位としてロールバックするわけです。

オープンソースプロジェクトをGitHubのAWSラボの中で行っています。これによってほかのオープンソースのプロジェクト、あるいはほかのベンダーと全エコシステムの中でFlourishを構築することを協力して行うことができます。