« 新アップグレード:Identity and Access Management(IAM)のポリシー評価 | メイン | ExpeDat Gateway for Amazon S3を使ったビッグデータのクラウド移行 »

Visual StudioによるAWS Lambdaサポート

AWS Lambdaをサポートした、AWS Toolkit for Visual Studioのバージョン1.9.0をリリースしました。AWS Lambdaはプレビュー中のあたらしいコンピュートサービスで、イベントに対応した自分のコードの実行と、コンピュートリソースの自動的な管理によりあたらしい情報に迅速に対応するアプリケーションを作成することがかんたんにできるようになります。

Lambda functionはNode.jsで書かれますが、Visual StudioデベロッパーのためここからダウンロードできるNode.js for Visual Studioプラグインと統合されています。Node.jsプラグインと最新のAWS Toolkitがインストールされていれば、ローカルでの開発とデバッグ、準備ができたらAWS Lambdaへのデプロイがかんたんにできます。では、Lambdaファンクションの開発とデプロイのプロセスをウォークスルーしていきましょう。

プロジェクトのセットアップ

はじめるためには、新しいプロジェクトを作成する必要があります。Visual StudioのNew ProjectダイアログにあたらしいAWS Lambdaプロジェクトのテンプレートがあります。

Lambdaプロジェクトウィザードをはじめるには3通りのやり方があります。ひとつめのオプションは開発とテストをはじめるための最低限をみたすだけのシンプルなプロジェクトを作成することです。ふたつめのオプションとしてすでにデプロイされたファンクションのソースをプルダウンで選択できます。最後のオプションはサンプルからプロジェクトを作成することです。このウォークスルーでは、「Thumnail Creator」のサンプルを選択してFinishをえらびます。

ファンクションがデプロイされると、画像がS3バケットにアップロードされたときに呼び出せるようになります。このファンクションは画像をサムネイルにリサイズして、そのサムネイルを別のバケットにアップロードします。サムネイルの宛先のバケットはオリジナルの画像があるバケットと同じ名前に"-thumbnails"サフィックスがついたものになります。

プロジェクトは3つのファイルとそれが依存するNode.jsパッケージをセットアップします。このサンプルはhttp://www.imagemagick.org/からダウンロードできるImageMagick CLIと依存関係があります。LambdaはLambdaファンクションを実行できるようにコンピュートインスタンス上にImageMagickを事前に構成します。

それでは、プロジェクトに追加されたファイルを見てみましょう。

app.js

イベントを受け取ったときにLambdaが呼び出すファンクションを定義します。

_sampleEvent.json

S3からのイベントがどうなっているかをしめす例です。

_testdriver.js

Lambdaファンクションがローカルに実行する実際のコードです。_sampleEvent.jsonファイルを読んでapp.jsで定義されたLambdaファンクションに渡します。

クレデンシャル

AWSリソースにLambdaからアクセスするためには、AWS SDK for Node.jsをファンクションが利用しますのでクレデンシャルはAWS SDK for .NETとは別のパスから探索されます。AWS SDK for Node.jsはクレデンシャルとして環境変数AWS_ACCESS_KEY_IDとAWS_SECRET_ACCES_KEYまたはShared Credentialsファイルをみています。AWS SDK for Node.jsの構成についてより詳細な情報は、AWS SDK for Node.js documentationを参照してください。

ローカルで実行する

サンプルを動かすためには、ソースとターゲットのS3バケットを作成する必要があります。ソースバケットのバケット名をきめて、AWS Explorerによりバケットを作成します。2つめのバケットはソースと同じ名前に"-thumnails"サフィックスをつけて作成します。たとえば、foobarとfoobar-thumbnaisという名前の組み合わせでバケットをつくることができます。注:_testdriver.jsではus-west-2リージョンがデフォルトになりますので、バケットを作成したリージョンにあわせて更新するようにしてください。バケットがを作成してからソースのバケットに画像をアップロードしますので、テスト用の画像を用意しておいてください。

_sampleEvent.jsファイルを開いてbucket nameプロパティをソースバケットに、object keyプロパティをアップロードした画像にあわせて更新します。

さて、ほかのVisual Studioプロジェクトと同じようにして実行とデバッグができるようになりました。_testdriver.jsを開いてブレイクポイントをセットし、F5を押してデバッガを起動します。

AWS Lambdaにファンクションをデプロイする

ファンクションがローカルで正常に動作することを確認したら、デプロイの時間です。そのためには、プロジェクトを右クリックしてUpload to AWS Lambdaを選択します。

Upload Lambda Functionダイアログが開きます。

ファンクションを識別するためにはFunction Nameを入力する必要があります。イベントに対応してどのファンクションが呼ばれるかを識別するFile NameHandlerフィールドはデフォルトのままにしておけます。そしてLambdaがファンクションを呼び出すためのIAMロールを構成する必要があります。このウォークスルーでは、Amazon S3とAmazon CloudWatchへのアクセスを選択したあたらしいロールを作成しています。Lambdaはデバッグ情報をAmazon CloudWatch Logsに書き込むことができるため、CloudWatchへのアクセスをつけると、ファンクションの利用状況の監視がとても便利になります。ファンクションをアップロードしてからもいつでもこれらの権限を変更することができます。すべてをセットしたらOKをえらんですすみましょう。

アップロードか完了すると、Lambdaファンクションのステータスビューが表示されます。最後のステップはLambdaファンクションにイベントを送信するAmazon S3の指定になります。そのためには、Addボタンをクリックしてイベントソースを追加します。

Source TypeをAmazon S3にセットしたままSource bucketを選択します。S3にはイベントをLambdaに送るための権限が必要になります。これはロールをイベントソースに関連付けることでおこないます。デフォルトでは、ダイアログによりS3に権限を付与するロールを作成します。イベントソースからS3への構成は実際にはS3バケットの通知設定でなされるため一意になります。このダイアログでOKをえらぶと、イベントソースはここにでてこなくなりますが、バケットを右クリックしてプロパティを選択すると表示されます。

ファンクションがデプロイされてS3がファンクションにイベントを送れるように構成され、画像をソースバケットにアップロードしてテストできるようになりました。画像をソースバケットにアップロードしてすぐに、サムネイルがサムネイルバケットに表示されるようになります。

S3ブラウザを呼び出す

ファンクションがあたらしいアップロードされた画像のサムネイルを作成するようにセットアップされました。ですが、すでにアップロードされた画像にたいしてLambdaファンクションを動かしたい場合はどうでしょうか?これはAWS ExplorerからS3バケットをひらいてLambdaファンクションを動かしたい画像でInvoke Lambda Functionをえらぶことでできるようになります。

つぎに呼び出したいファンクションを選択してOKをえらびます。するとToolkitがS3がLambdaにおくるイベントオブジェクトを作成してファンクションを呼び出します。

これはS3ブラウザから複数のファイルやフォルダを選択することでそれぞれのファイルに対しておこなうことができます、これはLambdaファンクションに対してコード変更をしてバケットにあるすべてのオブジェクトにあたらしいコードで再処理させたい場合に便利です。

結論

サムネイルの作成はAWS Lambdaでつかえる単なるひとつの例ですが、Lambdaのイベントベースのコンピュートパワーの力を利用する多くのやり方が思い浮かぶのではないかと思います。現在、プレビューではAmazon S3、Amazon Kinesis、そしてAmazon DynamoDB Streamsにイベントソースを作成することができます。Lambdaファンクションを任意のAWS SDKをつかった自分自身のカスタムイベントから呼び出すことも可能です。

ToolkitのあたらしいLambdaの機能をためしてどう思うかをお知らせください。AWS Lambdaはプレビューなので、新機能やLambdaをうまくつかうために追加できるものがあればフィードバックを熱烈におまちしています。

(このブログはNorm JahansonによるAWS Lambda Support in Visual Studioの翻訳です)

コメント

Twitter, Facebook

このブログの最新情報はTwitterFacebookでもお知らせしています。お気軽にフォローください。

2017年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