LoginSignup
2
1

More than 5 years have passed since last update.

sbt-aws-serverlessプラグインでKinesis StreamとLambdaをTriggerできるようにした

Posted at

sbt-aws-serverlessプラグインを作った って言うてましたが、地味にちょっとずつですが、拡張していってます。

今回は、Serverlessアーキテクチャの要とも言える、非同期処理を支えるKinesis Stream + Lambdaのパターンにおいて、環境を構築するの面倒だなー、sbtから簡単にデプロイできると便利なのになー、って迷える方に楽に扱えるよーにしましたので、その手順を紹介します。

Deploy手順

LambdaとAliasをDeployします。

Scalaで作成したLambdaモジュールをデプロイします。

また、デプロイしただけだと、開発環境やテスト環境、ステージング環境、プロダクション環境と構築するのに、同じモジュールを使って何個もLambdaを作ることになるので、手間です。

Lambdaは、Aliasを作ると、Alias単位でTriggerを設定できますので、Aliasを作って、そいつに良い感じにKinesis StreamをTriggerするようにすれば、環境ごとにLambdaを作る手間を削減できます。

$ sbt
> deployLambda
...
[info] Assembly up to date: .../$name-$version.jar
[success]

> deployLambdaAlias <aliasName> [publishVersion] [description]
Create Alias: arn:aws:lambda:$region:$awsAccount:function:$name:$aliasName
[success]

DeployしたLambdaの状況を見ます。

Deployしたはいいものの、今、どうなってんの?ってなると思います。

ので、以下のコマンドで、Lambdaそもそも出来てますかー?とか、Publish状況はー?とか、Alias何個つくって、どのpublishとくっついてたっけーとかを確認します。

> listLambdaVersions
=================================================================================================
$name
=================================================================================================
| Last modified                  | Ver          | Description                                   |
|--------------------------------|--------------|-----------------------------------------------|
| 2016-12-09T03:37:36.085+0000   | $LATEST      | $projectName                                  |

> listLambdaAliases
=======================================================================================
$name
=======================================================================================
| Alias name           | Ver          | Description                                   |
|----------------------|--------------|-----------------------------------------------|
| $aliasName           | $LATEST      |                                               |

Kinesis Streamが存在するか確認します。

Lambdaは出来たので、じゃあ、Kinesis StreamとTriggerしたいんだけど、そもそもどのKinesis StreamとTriggerするんだっけ?、あと、前もって作ってたっけ? ってことよくあると思います。

そんなときに、いちいち、コンソールやCLI実行したくないので、sbtでやれるよーにしました。

そもそも、どのKinesis StreamとTriggerするLambdaだっけ?については、build.sbtで固定化して忘れないようにしておけます。

build.sbt
lazy val sample = (project in file("modules/sample")).
  enablePlugins(AWSLambdaTriggerKinesisStreamPlugin).
  settings(
...
    eventSourceNames := Seq(s"$KinesisStreamName"),
...
  )

で、このKinesis Streamあるっけ?というのを確認することができます。

> describeStreams [stageName]
===================================================================================================================================================
$name-$stageName
===================================================================================================================================================
| Stream ARN                                                                                                                         | Status     |
|------------------------------------------------------------------------------------------------------------------------------------|------------|
| arn:aws:kinesis:$region:$awsAccount:stream/$eventSourceNames-$stageName                                                            | ACTIVE     |

stageName は、テストとか、プロダクションとか環境を指定する感じです。

うちは、環境なんかわけてねーよって方は、何も入力しなくても大丈夫なよーにしてます。

Kinesis StreamとLambdaをtriggerします。

> syncEventSourceMappings [stageName]
[success]

triggerできているか確認します。

> listEventSourceMappings [stageName]
===================================================================================================================================================================================================
arn:aws:lambda:$region:$awsAccount:function:$name:$stageName
===================================================================================================================================================================================================
| Last modified                  | State        | UUID                                     | Event Source Arn                                                                                     |
|--------------------------------|--------------|------------------------------------------|------------------------------------------------------------------------------------------------------|
| Fri Dec 09 12:45:00 JST 2016   | Enabled      | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx     | arn:aws:kinesis:$region:$awsAccount:stream/$eventSourceNames-$stageName                              |

Kinesisにテストデータをputします。

TODO これあると便利っぽい。だがまだない。のでそのうち作ります。

テストデータは、Lambdaがちゃんと動くよねってことであれば、ある程度、固定的な内容でいけるかなーと。

であれば、build.sbtから参照できるどこかに、テストデータを前もって用意しておいて、以下のよーなコマンドでKinesis StreamにRecordがputされて、Lambdaがちゃんと動いたよねっていうのがmonitaringできると良いなって気がしてます。

> putStreams [stageName]
monitoring...

まとめ

ざくっと手順を書きました。

上記の手順は、開発やテストのときに使っていただいて、本番環境にdeployするときは、上の手順が一通り実行されてもいいかなって思っているのですが、そのあたりは、まだできていません。

過去版とか、ブルーグリーンとか、そのあたりをどうやって保持しようかってーのがけっこー微妙なので、もちょい練ります。

以上です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1