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で固定化して忘れないようにしておけます。
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するときは、上の手順が一通り実行されてもいいかなって思っているのですが、そのあたりは、まだできていません。
過去版とか、ブルーグリーンとか、そのあたりをどうやって保持しようかってーのがけっこー微妙なので、もちょい練ります。
以上です。