5一般的なステップ機能問題


Step Functions , AWSからの無セル有限状態機械サービスダイナモ、ラムダ、およびAPIゲートウェイで、それはServerless AWSサービスの核心を形成します.あなたが複数のステップでタスクを持っていて、彼らが適切な順序で実行されることを確実にしたいならば、ステップ関数は選択のあなたのサービスです.
これは多くのAWSサービスとの直接的な統合を提供していますので、接着剤としてラムダ関数を使用する必要はありません.これはあなたの状態機械の性能*を改善し、コストを下げることができます.
しかし、ラムダはあなたのコードを実行します.そして、本質的にブラックボックスの管理されたサービスを実行することよりはるかに簡単にデバッグをします.これが私がこの記事を書いている理由です.ここでは、特にサービスで始まるとき、ステップ関数で働くとき、最も一般的な問題を見つけます.

1タスクは、最大数の文字サービス制限を超えるサイズで結果を返した


それはかなり不可解なエラーメッセージです、しかし、それはあなたが州の間を通過している1キログラムのペイロードが256 KB以上であることを意味します.複数の並列状態をマージするときに、この制限を超えないようにしてください.
AWSでの多くのサービスは、彼らが処理できるデータにいくつかの厳しい制限を持っています.これにより、AWSエンジニアはこれらのサービスを最適化して、Serverlessなもののためにオンデマンド支払いを提供することができます.しかし、ユーザーの欠点は、それらの制限がサービスを多くのユースケースに不適当にするということです.畝
最高のケースのシナリオでは、それらの限界を右の計画に沿って取得します.したがって、状態マシンとしてワークフローを実装するときは、ペイロードを渡すとき、256 KBの限界内にいることを確認してください.

2 .エラーなしでキャンセルされる状態機械


状態機械が取り消されるかもしれないいろいろな理由があります、そして、時々、あなたは直接誤りを得ません.すべての出力を見つけることができる状態マシンの残りの実行履歴をチェックしてください.
エラーは気まぐれな話題です、そして、時々、ものはあなたのコードを実行しているマシン全体がクラッシュするように間違って行くことができます.ログ記録は動作しますが、エラーに応答する時間はありません.しかし、AWSはそれについて知っていて、彼らがそうすることができるすべてを記録し続けます.
実行履歴は,通常,ステップ関数問題を研究する優れた場所である.キャンセルにつながる可能性のある典型的なイベントは実行履歴の25000以上のエントリ、出力の無効なデータ型(すなわち文字列の代わりに数字)、または選択状態の変数を欠落しています.

3 .選択状態の条件パス参照不正な値


選択した状態の変数フィールドに解決不可能なパスを入れます.最も簡単なケースでは、それは単なるタイプミスでしたが、オブジェクトが不完全であるか、関数をコールしようとしていることを意味します.
状態機械定義は静的にタイプされません;特に間違ったパスの定義は、あなたがtypoを持っている頭痛につながることができます.あなたの状態出力は常に入力と
ステップ関数状態機械は単純なシステムであり、基本的な論理を分岐または並列状態に実行することができるが、それらはエンジンを計算していない.あなたが状態機械定義の中で書いている経路はJavaScriptではありませんそれらはVTLテンプレートであるので、オブジェクトまたは配列のためのあなたの通常のJavaScriptメソッドのどれもここで利用できません.選択状態でチェックする前に、ラムダ関数内のパスのターゲットの値を計算する必要があります.また、ブール値、数値、文字列、またはタイムスタンプをする必要があります.
あなたの状態マシンをAWS Step Functions Workflow Studio そして、定義時間で問題を最小にするために.畝

ステートマシンは25000実行後停止


ステートマシンの実行履歴を標準ワークフローで超えました.場合は、ワークフローを表現するに切り替えることができますそれが可能でないならば、あなたはステートマシンとstart as a new execution .
ステップ機能サービスは、実行履歴にあなたの状態機械のすべての実行を記録します;デバッグに適しています.しかし、この歴史は25000のエントリに限られているので、あなたの状態機械が25001番目の状態変化を持つ瞬間、ステップ機能サービスはそれをシャットダウンします.
状態機械を標準として設定し、ワークフローを表現できます.Expressワークフローは実行時間に制限がありますが、25000以上の実行履歴エントリを可能にします.あなたは多くの短命な実行がある場合は、この制限を回避するためにエクスプレスワークフローを使用することができます.
あなたの状態機械が長寿命実行ステップと25000以上の実行ステップを持っているならば、あなたはそれを複数の州機械に分割しなければなりません.このように、これらの状態機械はすべて新しい実行として実行でき、順番に新しい実行履歴を得ることができます.

パラメータの間違った文字列形式


あなたの状態の1つは、間違った形式で結果を送信し、そこから選択することはありません.を使用する必要がありますStates.Format() これを回避するための文字列構造の関数.
多くの場合、単に次の状態のパラメータに渡すために結果からデータの右側の部分を選択することができます.そして、もしそうでなければ、少なくともあなたが利用できる構造を受け入れるように、あなたは目標状態を修正することができるかもしれません.しかし、これは必ずしもケースではないかもしれません.
States.Format() あなたの状態マシン定義では、関数がグローバルに利用可能です.この関数を使用すると、ターゲット状態のパラメーターに合うように、データを連結して再フォーマットできます.畝
以下にパラメータの完全な名前を設定する簡単な例を示します:
{

"Parameters": {

"foo.$":

"States.Format('{} {}', $.firstName, $.lastName)"

}

}
これを避けることができないならば、あなたはより複雑にデータを再フォーマットするラムダ関数を接続しなければなりません.この関数呼び出しは余分なコストと実行を遅くしますが、時には最後の手段です.

結論


AWSステップ機能は、あなたのServerlessな建築のより複雑な仕事を調整するのを助ける強力なサービスです.しかし、すべてのServerlessサービスと同様に、それはあなたが念頭に置いておく必要が厳しい厳しい制限が付属しています.
すべての技術と同様に、スタックをモジュール化してください.小さな状態機械は、ここで、そして、そこで限界を超えるかもしれない一つのモノリシックものより扱いやすいです.
また、AWSクラウドに組み込まれたすべてのServerlessなシステムと同様に、ラムダはここで助けになります.物事が100 %にフィットしない場合は、常にここで、そこに物事をスムーズに機能をスローすることができます.しかし、彼らが自由でないことを心に留めておいてください.

どのようにダッシュ鳥は助けることができる


共通のダイナモ問題についての最後の記事と同様に、dashbirdはまた、状態マシンとその実行にあなたの洞察を与えることができます.それはあなたのAWSのアカウント内のすべての状態のマシン*余分な設定は必要ありません.
すべてのあなたの状態機械はthe Well-Architected Framework , それで、すべてがベストプラクティスに続いているならば、あなたはすぐにわかります.
You can try Dashbird now ; いいえクレジットカードが必要です.第一百万ラムダの呼び出しは私たちにある!私達のプロダクトツアーhere .