LambdaからSkyOnDemand(EAI)を呼び出してみた

こんにちは。 昨年AWSから発表されたLambdaが気になっていたにも関わらず長い間触れませんでした。 でも遅ればせながら年明けにやっと触ることができたので今回はLambdaに関する事をお話ししたいと思います。

Lambdaとは

Lambdaにつきましては既に色んな方が記事でまとめられているので、今更AWSペーペーの私が書く必要はないのですが、自分なりに少しまとめてみました。

  • プログラムをデプロイして、ちょこっと設定するだけでOK(簡単)
  • S3、DynamoDb、Kinessisのイベントを元に配置したプログラムが動作(簡単)
  • API経由でもプログラムの実行が可能
  • インフラを気にする必要がない(色々楽)
  • EC2とは異なり動作した分の課金(安い)
  • 勝手にスケールされるらしく並列処理もなんのその(アクセス集中してもある程度は余裕かな)
  • プレビュー版としてのみの提供(2015/01/20現在)
  • 対応言語はjavascriptのみ(2005/01/20現在)

早速触ってみた

折角なので、Lambdaを使用して何か試してみようと思います。 LambdaからHTTPリクエストを送信できるということですので、今回はS3にファイルが置かれたタイミングで弊社のクラウド連携サービス「SkyOnDemand」をLambdaから呼び出してみます。

all

動作イメージとしましては、データファイルが連携元からS3に配置されたのを契機に、Lambda経由でSkyOnDemandを呼び出して、SkyOnDemandはS3に配置されたデータファイルを読み込んで連携処理を行う、という感じでしょうか。

ちなみに、連携元がS3にファイルが配置できるということはHTTPリクエストを送信することができるということなので、この場合別にLambdaを経由しなくても連携元から直接SkyOnDemandを呼び出すことは可能だとは思いますが、色々な都合?で今回想定している連携元はセキュリティ上SkyOnDemandを直接叩けないという前提にしておきます。 できればDynamoDBやKinesisでやりたかった・・・

SkyOnDemandの準備

まずは、SkyOnDemand側でスクリプトの作成とHTTPトリガの設定をしておきます。

sod

SkyOnDemandをご存じない方もいらっしゃいますので簡単に説明しますと、プログラム自体の作成と、URLとプログラムの紐づけを行っております。 尚、SkyOnDemandではプログラムの作成もURLとプログラムの紐づけも、ブラウザ上でドラッグ&ドロップで簡単に連携処理を実装できちゃいます(宣伝)

バケットの準備

次に、S3に今回使用するバケットを作成します。

S3

Lambdaの準備

最後にLambdaです。 今回はこんなjavascriptを書いてみました。

これで準備は完了です。

実行

実行してみましょう。 作成したS3のバケットにファイルをUPLOADします。

s3up

SkyOnDemandのログを確認してみます。

sodlog

SkyOnDemandのプログラムの呼び出しに成功し、バケット名等のパラメータも渡せていることが確認できました。

これで、SkyOnDemandのスクリプトでS3にUPLOADされたデータファイルを読込、Salesforceに連携するなり、煮るなり焼くなり好きにすることができそうです。

ちなみに、Lambdaのタイムアウトは最長60秒のようなので、SkyOnDemandで処理する時間が長くなることが想定されるのであれば、SkyOnDemand側の処理を非同期にした方がよさそうです。 あと、Lambda側のエラーハンドリングをちゃんと考えて実装しないといけないんだろうなあ・・・

最後に

今回はS3と弊社のクラウド連携サービス「SkyOnDemand」をLambdaを介して繋げてみました。

この後、正式リリースが控えておりLambdaと対応するAWSのサービスが増えるのではないかと言われております。

何かしらのイベントを受けてLambda単体で処理するのが基本的な用途だとは思いますが、AWSの色々なサービスと弊社のクラウド連携サービスのようなものだったり、またはその他の各種サービス等、サービス間の繋がりをよりシンプルに実現する用途でLambdaを活用する場面も今後出てくるのではないでしょうか。

あと個人的には、Lambdaの実行サーバのIPアドレスが一定の範囲に限定されれば嬉しいです(難しいのかな) もしIPアドレスが限定されるのであれば、例えばRDSに保持しているデータをLamdbdaからセキュアに引っ張ることが可能になるからです(別に何がしたいってわけではないのですが、何かできそうな気がしてます)

ちなみにLambdaからセキュアにRDSにアクセスする方法を考え出した方もいらっしゃるようです

Lambda、面白いサービスですよね。今後に注目です。