/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

2019/02/25 AWS サーバレスアーキテクチャ諸々

先週から調べていたことの簡単なまとめです。

AWS SAM

サーバレスアーキテクチャに適した形で CloudFormation を使えるようにする拡張です。SAM = Serverless Application Model。サンプルを動かしていたのですが、IAM の設定がどうしてもうまくいかずにひとまず調査終了。Lambda を deploy する時に、Lambda の中で利用する S3 ファイルへの権限チェックが走るのですが、ここで弾かれてしまいました。CloudFormation での deploy が失敗するとロールバックされて IAM も消えてしまうので調査も難しく、S3 バケットへの権限を追加したりしましたがうまくいきませんでした。

CloudFormation の拡張なので、CloudFormation と並行して使えそうです。Lambda や StepFunctions などのコンポーネントが中心になる場合は利用すると良さそうです。

docs.aws.amazon.com

SQS から Lambda を呼ぶ

StepFunctions 間の連携を考えていて、SQS はどうかということで調べていました。去年から、SQS が発火させるイベントとして Lambda が使えるのでこれが便利そう。ただ、イベントドリブンにしようとするのは難しいようです。例えば「イベントA が完了したあとにイベントB, C を動かしたい」という一対多のグラフが考えられますが、SQS はあくまでもキューなので、B か C どちらかがキューから取り出すとそのイベントは消えてしまいます。イベント B, C どちらも呼び出すような Lambda を間に挟むとか、ちょっと工夫が必要です。

aws.amazon.com

https://forums.aws.amazon.com/message.jspa?messageID=857349

NoSQL まとめ

今まで見てきた資料で一番詳しくまとまっていました。Amazon DynamoDB がなんなのか調べていました。

www.slideshare.net

StepFunctions のアクティビティステート

StepFunctions はタスクを実行するものではなくて、あくまでステートの管理をするだけ、とどこかで読みましたが、StepFunctions から直接 Lambda をキックすることができるので忘れていました。しかし「アクティビティステート」という機能を経由して、StepFunctions に記述されているタスクをワーカーに処理させることができます。

docs.aws.amazon.com

例えば Athena のクエリを発行して結果を利用する場合、Lambda 自体に実行時間制限があるので実行待機することはできません。これをアクティビティステートを経由して定期的にワーカーを動かしてAthena クエリの実行結果をチェックすることができます。

Lambda を使う場合はアクティビティステートではなく、状態遷移図側でループを書いて仕舞えばよいのですが、Athena クエリを発行するたびに状態遷移図にループが挟まるのが残念ですね。。まだ実際に書いていないので、実際に使ってみます。