目次
こんにちは。ma2k8です。
今回のre:Inventで発表された新サービスの中で、個人的に一番テンションがあがったAWS Step Functionsについて紹介させていただきます。なお、本記事内のスライド画像は以下セッションものです。
CMP319 – NEW LAUNCH! Building Distributed Applications with AWS Step Functions
AWS Step Functionsとは?
![]()
ビジュアルワークフローを使用して分散アプリケーションを構築するツールです。TaskにLambda関数を定義できる点がすごく良いと思いました。
AWS Step functionsの利点
![]()
| 生産性 | 分散コンポーネントとMicroServiceを接続して連携させることにより、 簡単にアプリケーションを作成できる |
|---|---|
| 俊敏性 | 問題の切り分けとデバッグの迅速化により、変化に適応することができる |
| 弾性 | サービス調整のインフラとオペレーションを管理することにより、 スケール時や異常終了時の可用性を確保できる |
指定できるStep
![]()
| Task | 実行単位 ここでLambda関数やActivity ( 後述 ) を指定する |
|---|---|
| Choice | 条件分岐 |
| Parallel | 並列処理 |
| Wait | 待ち ( 秒、日時での指定が可能 ) |
| Fail | 異常終了 |
| Succeed | 正常終了 |
| Pass | 処理をパス InputのデータはOutputへそのまま渡される |
条件分岐、並列処理もサポートしているようです。また、TaskではRetryとCatchも定義できました。Serverlessを組む際に悩みがちな制御をStep Functionsへ委譲できそうです。
Activity
TaskではLambda関数以外にActivityと呼ばれるものが指定可能でした。Step Functions用の長時間実行用のWorkerを用意して実行するというものです。
セッションではTaskは Poll(Activity) or Push(Lambda) という紹介がされていました。ActivityはAWSへ接続できればどこでも良いので、オンプレにおけるのも大きな利点になりそうです。
![]()
Worker上で実行するコードは以下の流れを無限ループで常駐させていました。
- ActivityのARNを指定して
getActivityTaskでStep Functions上のActivityを捕捉 - 行いたい処理を実行
sendTaskSuccess|sendTaskFailureで処理結果をActivityへ送信
基本的にStep Functions側からActivityを実行する方法は用意されていないようなので、Wokerは常時実行が想定されているようです。LambdaでECSのコンテナを立ち上げるようなコードを書いてActivityの前のTaskとして定義してあげれば都度実行も可能でしょう。
例えば、Lambdaには実行時間が短いという制限があることからSQSのポーリングなどには不向きでしたが、Activityであれば行うことができます。
- Taskの最大実行時間は 1年
- Lambdaの最大実行時間は 300秒
Activityの作成手順はチュートリアルが公式ドキュメントにあったのでそちらをご参照ください。

上記作成手順を基にWokerを起動しない状態でActivityのタイムアウトを指定して試してみました。StateMachineのステータスがTimeoutとなり、やがて起動するとSuccessになることが確認できました。
制限
アカウント制限
| アカウントごとのStateMachine及びActivity数 | 10,000 |
|---|---|
| APIコールリミット | スパイクが頻繁に発生したときや、あまりに短時間での多数の実行の場合は制限される場合がある1)ドキュメント上では明確な数値の定義はされていませんでした。 |
| リクエスト最大容量 | 1MB |
実行制限
| 最大同時実行数 | 1,000,000 |
|---|---|
| 最大実行時間 | 1年 |
| 実行履歴の最大サイズ | 25,000イベント |
| 最大idle時間 | 1年 (実行時間によって制御される) |
| 実行履歴の保持期限 | 90日 |
Taskの実行制限
| Taskの最大実行時間 | 1年 (実行時間によって制御される) |
|---|---|
| Taskをキューに保持する最大時間 | 1年 |
| オープンなActivity数 | 1,000 per execution(実行予定、実行中の数) |
| 最大input/outputのデータサイズ | 32,000 characters |
スロットリング制限
前述のサービス制限に加え、Step Functionの特定のAPIコールはトークンバケット方式を使用してサービス帯域幅を維持するために抑制されます。なお、スロットリング制限はアカウント/地域ごととなります。
![]()
料金
- 毎月4,000回の状態遷移まで無料
- その後は1,000回の状態遷移ごとに$0.025
利用可能リージョン
| us-east-1 | 米国東部(バージニア北部) |
|---|---|
| us-west-2 | 米国西部(オレゴン) |
| eu-west-1 | EU(アイルランド) |
| ap-northeast-1 | アジアパシフィック東京 |
東京が対応しているのはうれしいですね。
試してみた
Lambda関数作成からStep Functions実行までの手順はAWSブログをご参照ください。
まとめ
Serverlessでサクッとやれることの幅がかなり広がりそうですね!このサービスは以下の点において最高だと思いました2)他にもまだまだあると思いますが。
- 単純なwait時に発生する実行時間の問題を
WaitStepで解決 - ポーリング系処理をはさむ際の実行時間の問題をServerありきな
Activityで解決 - フロー制御をInput/Outputをつなぐ処理をjsonで定義できるようにして解決
- 並列処理制御を
ParallelStepで解決 - それぞれのMicroServiceが接続先を意識しないといけない問題を
ChoiceStepで解決
Serverless Architectureを加速させてくれる存在になってくれそうで楽しみです!