Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@yoshiyoshifujii

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

More than 3 years have passed since last update.

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するときは、上の手順が一通り実行されてもいいかなって思っているのですが、そのあたりは、まだできていません。

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

以上です。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yoshiyoshifujii
Software Engineer Scala,Python... Agile,Scrum DevOps,Microservices,Serverless DDD, IDDD 投稿内容は所属組織と関係ありません

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?