« 【AWS発表】EC2 Container Serviceアップデート - Container Registry, ECS CLI, AZを意識したスケジュリング、その他 | メイン | 【AWS発表】AWS Mobile Hub – モバイルアプリケーションの構築、テスト、モニタリング »

【AWS発表】AWS Lambdaのアップデート – Python, VPC, 実行時間の延長, スケジュールなど

re:Invent 2014でAWS Lambdaをローンチし、その反応は信じられないくらいとなっています。開発者とシステムアーキテクトはすぐに、管理不要で非常に大量のリクエスト数を捌けるようスケールするサーバレスシステムを迅速・簡単に構築可能であることを理解しました。まとめると、Lambdaファンクションは以下のようなイベントに反応して処理を実行することができます。

この一年で、たくさんの新機能をLambdaに追加してきました。3つのAWSリージョン(US East (Northern Virginia), US West (Oregon), and Europe (Ireland)でローンチし、今年前半にはAsia Pacific (Tokyo) のサポートも追加しました。LambdaはNode.jsで記述されたファンクションをサポートする形でローンチし、今年前半にJavaファンクションのサポートを追加しました。上記リストから見てわかるように、LambdaとAWSの他の多くのパーツとの接続もしました。AWS Compute Blog上では、Lambdaを(個人的に好みである)サーバのないMicroserviceを含むパワフルでクリエイティブなやりかたで使う方法に関するいくつかの素晴らしい例を見ることができます。

re:Inventでの新機能
本日、Lambdaをより便利にするいくつかの機能を発表します。これらがステージからアナウンスしたことのサマリです。

  • VPCサポート
  • Pythonファンクション
  • ファンクション実行時間の増加
  • ファンクションのバージョニング
  • スケジュールされたファンクション


お分かりのように、全てファンクションに関することです。これらの新機能を1つずつ見ていきましょう。

LambdaファンクションからのVPC内リソースへのアクセス
多くのAWSの顧客はAmazon Virtual Private Cloud の中にマイクロサービスをホストしていて、Lambdaファンクションからそれらにアクセスできるようになることを望んでいます。もしかすると検索データでMongoDBクラスタを稼働させている、もしくはLambdaファンクションのステートフルなデータストアとしてAmazon ElastiCacheを使いたいと望んでいるかも知れませんが、インターネットへとこれらのリソースを露出させたくはありません。

まもなく、ターゲットとなるVPC内で1つ以上のセキュリティグループを用意し、Lambdaからのインバウンドトラフィックを許可するように構成し、ターゲットのVPCサブネットにアタッチすることでこういったタイプのリソースにアクセスできるようになります。そして、Lambdaファンクションを作成するときにVPC、サブネット、セキュリティグループを指定する必要があります(既存のファンクションに追加することもできます)。また、ファンクションに対してElastic Networkingに関するいくつかのEC2の機能へアクセスするパーミッションを(IAMロールを通して)与える必要もあります。

この機能は今年後半に利用可能となります。ローンチするときにさらなる情報(とウォークスルー)を提供します。

Pythonファンクション
既にNode.jsとJavaでLambdaファンクションを記述できます。本日、AWS SDK for Pythonへの組み込みアクセスを完備したPython 2.7のサポートを追加します。Pythonは学習が容易で、簡単に使え、すぐに起動して実行することができます。我々は多くの、とても多くのPythonサポートに対するリクエストを受け取っていたので、これらをお届け出来るのがとてもうれしいです。本日からPythonを使い始められます。実際に次のようになります。

ファンクション実行時間の延長
LambdaはExtract-Transform-Load (ETL)アプリケーションにとてもフィットします。大きいボリュームのデータを取り込み、処理するためにどんな固定的なインフラストラクチャも必要とせずに簡単にスケールアップできます。このとてもポピュラーなユースケースをサポートするために、Lambdaファンクションは最大5分まで実行できるようになります。ずっとそうであったように、ファンクションの作成時にお望みのタイムアウトを指定するだけです。ファンクションは利用可能な時間がどれだけあるかを確認するためにcontextオブジェクトを参照することができます。

これがPythonを使ってその値にアクセスし、ログ出力する方法です。

print(" Remaining time (ms): " + str(context.get_remaining_time_in_millis()) + "\n")

これまでと同じように時間を全て消費したファンクションは終了されます。

ファンクションのバージョニングとエイリアス
Lambdaで複雑なシステムを構築し始めるとき、コントロールされた基盤上で発展させたいと望むでしょう。開発とテストのこの重要な側面を簡潔にするため新しいバージョンニング機能を追加しました。

特定のファンクション用のコードの新しいコピーをアップロードするたびに、Lambdaは自動的に新しいバージョンを作成し、数字を割当てます(1、2、3など)。ファンクションのAmazon Resource Name (ARN) は末尾にオプショナルなバージョン修飾子を受け付けるようになります(":"のあとにバージョン番号)。使いやすさと広報互換性のために修飾子なしのARNは常に最新バージョンに関連付けられます。“arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:2′′のような修飾子付きのARNは特定のバージョンに関連付けられます(この場合は2)。

この新機能に関して考え始めるのに気をつけることがいくつかあります。

ファンクションの各バージョンはそれぞれ説明と設定(言語/ランタイム、メモリサイズ、タイムアウト、IAMロールなど)を持ちます
与えられたファンクションの各バージョンはCloudWatchメトリクスのユニークなセットを生成します
各ファンクションのCloudWatch Logsはストリーム名の一部としてファンクションのバージョンを含みます
Lambdaは各ファンクションの複数バージョンを保存します。各Lambdaアカウントは最大1.5GBまでのコードを保存でき、必要に応じて古いバージョンを削除できます
名前付きエイリアスの作成とファンクションの特定バージョンのコードに対する割当ても可能です。例えば、最初にバージョン3に対して"prod"、バージョン5に"test"、バージョン7に"dev"を割り当てられます。その後、以下のようにファンクションを実行する際のARNの一部としてエイリアスを利用できます。

Production – “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:prod”
Testing – “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:test”
Development – “arn:aws:lambda:us-west-2:123456789012:function:PyFunc1:dev”



既存のバージョンなし、もしくはエイリアスなしのARNを使いたい場所どこでも、バージョンもしくはエイリアス(修飾子付きARNと呼びます)を用いてARNを利用可能です。事実、我々はベストプラクティスとしてこれらを利用することをおすすめします。

この機能はコードをステージ間で昇格させたり、問題が起きたら以前のバージョンにロールバックしたりを簡単にします。例えば、クライアントアプリケーションやファンクションの実行をトリガーするイベントソースへのいかなる修正も行うことなく、prodというエイリアスをコードのバージョン3に指定し、その後バージョン5に再マッピングできます(テストから本番への実質上の昇格)。

スケジュール化されたファンクション(Cron)
Lambdaファンクションを規則的にスケジュールベースで実行可能です。固定のレート(分、時間もしくは日の数)もしくはCronのような形式で指定することができます。

この機能は現在はコンソール上で使え、APIとCLIのサポートは現在準備中です。

— Jeff;(翻訳は西谷が担当しました。原文はAWS Lambda Update – Python, VPC, Increased Function Duration, Scheduling, and More

 

コメント

Featured Event

2016年3 月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31