[新機能]Step Functionsでステートマシンのアップデートが可能になりました
こんにちは、臼田です。
皆さんLambdaしていますか?
今回はStep Functionsでステートマシンのアップデートが可能になったので使ってみたいと思います。
アップデート内容
Step Functionsが新しくUpdateStateMachine API
をサポートしました。
これまでは、一度作成したステートマシンは内容を変更することができず、ターゲットのLambdaの変更やロジックの変更を行う場合には、ステートマシンをコピーして変更する必要がありました。
その際、ステートマシンのARNも変更されるため、ステートマシンをターゲットとしているシステム側も変更が必須でした。
このAPIのサポートにより、ステートマシンのコードやRoleを変更でき、ARNを変更せずにアップデートすることが可能になりました!
コンソールでの操作
今回は事前にステートマシンを用意しています。
ダッシュボードでは右上のボタンに「Edit」が追加されていることが確認できます。
また、ステートマシンの詳細画面でも「Edit state machine」が表示されました。こちらから変更してみます。
IAM Roleとコードを変更することができます。ここではState名とResultを変更し、合わせて開始するState名も変更しました。反映は右上の「Update」か、実行も伴う「Update and start execution」でできます。今回はついでに実行してみます。
「新しい実行」の画面に来ましたが、この段階で既にUpdateは完了しているようです。続けて実行します。
実行結果から、ステートマシンが更新されていることが確認できました。
なお、引き続き古い実行結果の履歴を確認することもできました。
AWSCLIでの操作
AWSCLIでも今回のアップデートに対応しています。
確認しているバージョンは以下のとおりです。
$ aws --version aws-cli/1.11.187 Python/2.7.10 Darwin/16.7.0 botocore/1.7.45
ヘルプを見てみます。
$ aws stepfunctions update-state-machine help ...中略... SYNOPSIS update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]
update-state-machineでは--state-machine-arnが必須パラメータになります。
変更するために、元のコード(definition)を取得します。
$ aws stepfunctions describe-state-machine --state-machine-arn arn:aws:states:ap-northeast-1:000000000000:stateMachine:update_test | jq -r ".definition" $ cat definition.json { "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "Updated", "States": { "Updated": { "Type": "Pass", "Result": "You can update states!", "End": true } } }
取得した内容を更新し、update-state-machineで更新します。
# 現状のdefinitionの取得 $ aws stepfunctions describe-state-machine --state-machine-arn arn:aws:states:ap-northeast-1:000000000000:stateMachine:update_test | jq -r ".definition" > definition.json $ vi definition.json $ cat definition.json { "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "Updated", "States": { "Updated": { "Type": "Pass", "Result": "You can update states!", "End": true } } } # definitionの変更 $ cp definition.json definition_update.json $ vi definition_update.json $ diff -u definition.json definition_update.json --- definition.json 2017-11-16 11:54:08.000000000 +0900 +++ definition_update.json 2017-11-16 11:59:45.000000000 +0900 @@ -4,7 +4,7 @@ "States": { "Updated": { "Type": "Pass", - "Result": "You can update states!", + "Result": "You can update states by AWSCLI!", "End": true } } # アップデート $ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:ap-northeast-1:000000000000:stateMachine:update_test --definition file://definition_update.json { "updateDate": 1510804243.433 } # 実行 $ aws stepfunctions start-execution --state-machine-arn arn:aws:states:ap-northeast-1:000000000000:stateMachine:update_test { "startDate": 1510804300.9, "executionArn": "arn:aws:states:ap-northeast-1:000000000000:execution:update_test:7607d910-b59a-46ee-b885-c7f227824249" } # 結果 $ aws stepfunctions describe-execution --execution-arn arn:aws:states:ap-northeast-1:000000000000:execution:update_test:7607d910-b59a-46ee-b885-c7f227824249 { "status": "SUCCEEDED", "startDate": 1510804300.9, "name": "7607d910-b59a-46ee-b885-c7f227824249", "executionArn": "arn:aws:states:ap-northeast-1:000000000000:execution:update_test:7607d910-b59a-46ee-b885-c7f227824249", "stateMachineArn": "arn:aws:states:ap-northeast-1:000000000000:stateMachine:update_test", "stopDate": 1510804300.959, "output": "\"You can update states by AWSCLI!\"", "input": "{}" }
update-state-machineから更新でき、実行結果が更新されていることが確認できました。
おわりに
今回のアップデートにより、StepFunctionsでの開発が捗りそうです!
ぜひ活用していきましょう!