先にまとめ
- Step functionsのCFn内で使用するIntegerの値をstringに変更したい場合は
States.JsonToString
を使う(参考: 組み込み関数 – AWS Step Functions)
背景
Step Functionsのstate machineをCFnで作成するために、yamlに色々定義してました。下記のようにGlue Job実行時にArguments
として、別設定ファイルに定義したIntegerの値を埋め込んでいます。
...
run-glue-job:
Type: Task
Resource: arn:aws:states:::glue:startJobRun.sync
Parameters:
JobName: !Ref TestGlueJob
Arguments:
--num: ${self:custom.config.num}
※${self:custom.config.num}
で埋め込まれるのはIntegerである123
するとCFnをdeployする時にエラーが発生
UPDATE_FAILED: StateMachine (AWS::StepFunctions::StateMachine)
Resource handler returned message: "Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: The value for the field ‘—num’ must be a STRING at /States/run-glue-job/Parameters, SCHEMA_VALIDATION_FAILED: The value for the field '--port' must be a STRING at /States/xxxxxxxxxxx/Parameters' (Service: AWSStepFunctions; Status Code: 400; Error Code: InvalidDefinition; Request ID: xxxxxxxxxxxxx; Proxy: null)" (RequestToken: yyyyyyyyyy, HandlerErrorCode: InvalidRequest)
The value for the field '--num' must be a STRING
なので、Argumentsの--num
はStringでなければいけない、だそうです
解決方法
Integerのまま値を渡すことはどうしても無理そうなので、States.JsonToString
を使用してStringに変換する
...
Arguments:
--num.$: States.JsonToString(${self:custom.config.num})
...
この設定だとStringとしてパラメータが渡されるので、渋々後続の処理内でStringの値をIntegerに補正する処理を入れました
ちなみに組み込み関数 – AWS Step Functionsの内容を確認すると、本来の目的に沿った使い方ではなさそう..
また適切な方法が見つかったらこの記事を変更します!なかなかこの方法を見つけるのに時間がかかったので一応備忘録として投稿しました