先週から調べていたことの簡単なまとめです。
AWS SAM
サーバレスアーキテクチャに適した形で CloudFormation を使えるようにする拡張です。SAM = Serverless Application Model。サンプルを動かしていたのですが、IAM の設定がどうしてもうまくいかずにひとまず調査終了。Lambda を deploy する時に、Lambda の中で利用する S3 ファイルへの権限チェックが走るのですが、ここで弾かれてしまいました。CloudFormation での deploy が失敗するとロールバックされて IAM も消えてしまうので調査も難しく、S3 バケットへの権限を追加したりしましたがうまくいきませんでした。
CloudFormation の拡張なので、CloudFormation と並行して使えそうです。Lambda や StepFunctions などのコンポーネントが中心になる場合は利用すると良さそうです。
SQS から Lambda を呼ぶ
StepFunctions 間の連携を考えていて、SQS はどうかということで調べていました。去年から、SQS が発火させるイベントとして Lambda が使えるのでこれが便利そう。ただ、イベントドリブンにしようとするのは難しいようです。例えば「イベントA が完了したあとにイベントB, C を動かしたい」という一対多のグラフが考えられますが、SQS はあくまでもキューなので、B か C どちらかがキューから取り出すとそのイベントは消えてしまいます。イベント B, C どちらも呼び出すような Lambda を間に挟むとか、ちょっと工夫が必要です。
https://forums.aws.amazon.com/message.jspa?messageID=857349
NoSQL まとめ
今まで見てきた資料で一番詳しくまとまっていました。Amazon DynamoDB がなんなのか調べていました。
www.slideshare.net
StepFunctions のアクティビティステート
StepFunctions はタスクを実行するものではなくて、あくまでステートの管理をするだけ、とどこかで読みましたが、StepFunctions から直接 Lambda をキックすることができるので忘れていました。しかし「アクティビティステート」という機能を経由して、StepFunctions に記述されているタスクをワーカーに処理させることができます。
例えば Athena のクエリを発行して結果を利用する場合、Lambda 自体に実行時間制限があるので実行待機することはできません。これをアクティビティステートを経由して定期的にワーカーを動かしてAthena クエリの実行結果をチェックすることができます。
Lambda を使う場合はアクティビティステートではなく、状態遷移図側でループを書いて仕舞えばよいのですが、Athena クエリを発行するたびに状態遷移図にループが挟まるのが残念ですね。。まだ実際に書いていないので、実際に使ってみます。