[AWS Step Functions] Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました

Workflow Studioでのワークフロー編集中がちょっと便利になりました
2022.08.29

キミはWorkflow Studioでワークフロー編集中にセッションが切れる恐怖を感じたことはあるか

こんにちは、のんピ(@non____97)です。

皆さんはAWS Step FunctionsのWorkflow Studioでワークフロー編集中にセッションが切れる恐怖を感じたことはありますか? 私はあります。

Step Functionsのワークフローの編集はWorkflow Studioがとてつもなく便利です。

しかし、Workflow Studioでワークフロー編集中にリロードなどで離脱してしまうと編集中の内容が全て消えてしまうという性質がありました。

これは恐ろしいですね。

私もスイッチロールしてWorkflow Studioでワークフロー編集する場合は、セッションが途中で切れないかビクビクしながら作業していました。

そんなある日、いつものようにWorkflow Studioでワークフロー編集しているとセッションが切れてしまいました。

「やってしまった...」と天を仰ぎながら、ブラウザをリロードすると保存されていないワークフローが見つかりました。復元しますか?と表示されるではありませんか。

保存されていないワークフローが見つかりました

以降、私の身に何が起こったのか紹介します。

いきなりまとめ

  • Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました
  • 復元できるパターンは以下の2パターン
    1. Workflow Studioのタブをリロードする
    2. Workflow Studioのタブを、Ctrl + Shit + Tでタブを復元する
  • 別のタブやウィンドウでは復元できないので注意

結論

結論から言うと、Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました。

Workflow Studioでワークフロー編集中にセッション切れで怯える心配がなくなりました。

これはありがたい。

実際に試してみましょう。

適当にWorkflow Studioでワークフローを作ってみます。

リロード前のワークフロー

右上にワークフローが保存されいませんと表示されていますね。

この状態でブラウザをリロードします。

行った変更が保存されない可能性があります。と脅されますが、問答無用で再読み込みをクリックします。

リロード

リロードすると、保存されていないワークフローが見つかりました。復元しますか?と表示されました。復元をクリックします。

復元

すると、リロード前のワークフローが表示されました。やったぜ。

復元されたことを確認

復元できるパターンを確認してみた

どのような場合に復元できるのか確認します。

以下4パターンでも編集途中のワークフローを復元できるか確認しました。

パターン 結果
Workflow Studioのタブを閉じて、Ctrl + Shit + Tでタブを復元する 復元できる
タブを閉じて、別のタブでWorkflow Studioを開く 復元するか聞かれるが、復元をクリックしても復元されない
タブを閉じて、別のウィンドウでWorkflow Studioを開く 復元するか聞かれるが、復元をクリックしても復元されない
Workflow Studioのタブを2回連続リロードする 復元するか聞かれるが、復元をクリックしても復元されない

どうやら復元するのは同じタブで、直前のワークフローのようですね。

参考までにブラウザのSession Storageを確認すると、編集中のワークフローの定義が保存されていました。

具体的には、Google Chromeの開発者ツールからApplication-Storage-Session Storageを開くと、https://us-east-1.console.aws.amazon.comがあり、Keyがstates-unsaved_workでValueが以下のようなアイテムが保存されていました。

{
  "create:us-east-1:<AWSアカウントID>": {
    "mode": "polymath",
    "definitionString": "{\"Comment\":\"A description of my state machine\",\"StartAt\":\"Choice\",\"States\":{\"Choice\":{\"Type\":\"Choice\",\"Choices\":[{\"Next\":\"ListPolicies\"}],\"Default\":\"Map\"},\"ListPolicies\":{\"Type\":\"Task\",\"Next\":\"Parallel\",\"Parameters\":{},\"Resource\":\"arn:aws:states:::aws-sdk:iam:listPolicies\"},\"Parallel\":{\"Type\":\"Parallel\",\"Branches\":[{\"StartAt\":\"Pass\",\"States\":{\"Pass\":{\"Type\":\"Pass\",\"End\":true}}},{\"StartAt\":\"Wait\",\"States\":{\"Wait\":{\"Type\":\"Wait\",\"Seconds\":5,\"End\":true}}}],\"Next\":\"Success\"},\"Success\":{\"Type\":\"Succeed\"},\"Map\":{\"Type\":\"Map\",\"End\":true,\"Iterator\":{\"StartAt\":\"Map (1)\",\"States\":{\"Map (1)\":{\"Type\":\"Map\",\"End\":true,\"Iterator\":{\"StartAt\":\"Pass (1)\",\"States\":{\"Pass (1)\":{\"Type\":\"Pass\",\"Next\":\"ListKeys\"},\"ListKeys\":{\"Type\":\"Task\",\"End\":true,\"Parameters\":{},\"Resource\":\"arn:aws:states:::aws-sdk:kms:listKeys\"}}}}}}}}}"
  }
}

Session Storageの確認

色々動作確認をすると、このアイテムが更新されるのはWorkflow Studioでステートを追加したり、削除したりするなどワークフローを編集したタイミングであることが分かりました。

Session Storageのこのアイテムを使って復元するのかとも思ったのですが、リロードしたタイミングでは以下のようにStartAtが空でした。

{
  "create:us-east-1:<AWSアカウントID>":
    {
      "mode": "polymath",
      "definitionString": '{"Comment":"A description of my state machine","StartAt":"","States":{}}',
    },
}

Local StorageやCookieも確認してみましたが、関係ありそうなアイテムは見つかりませんでした。

また、Workflow StudioのJavasScriptもザッと読んでみたのですが、私のJavaScript力では該当の箇所を見つけることはできませんでした。

ただ、復元もしくは破棄をクリックした時に以下のリクエストが発生していました。

https://us-east-1.console.aws.amazon.com/p/log/1/states/1/OP/&k0=workLossPreventionRestored&m0=1&p0=visual_editor&cb=<何らかの数字 十数桁>&proxy-rid=<何らかの文字列>

workLossPreventionRestoredというのが非常に怪しいですね。どこかに編集中のワークフローの情報を適宜送信しており、復元するときはそこから取得してくるような感じなのでしょうか。

Workflow Studioでのワークフロー編集中がちょっと便利になりました

Workflow Studioでワークフロー編集中に離脱しても復元できるようになりました。

「Workflow Studio怖い..」となっていた方も、これを機に触ってみるのはいかがでしょうか。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!