この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、臼田です。
皆さん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での開発が捗りそうです!
ぜひ活用していきましょう!