はじめに
StepFunctionsを使っていて、パラメーターを指定する際、フィールド名にAPIリファレンスの文字列を使うように指示されます。しかしそれでは動かない場合もあるため、個人的に分かりづらい点を備忘録的にまとめました。
概要
-
.N
の場合は複数形にする - ネストしている構造でも、同様に指定
- 指定したパラメーターがエラーになる場合、CLIやSDKのリファレンスのフィールド名を試す
指定の仕方
パラメーターが配列".N"の場合
公式の解説にあるように、APIリファレンスのパラメーター名を複数形にします。
例として、DescribeSnapshots
のSnapshotId.N
を指定してみます。
パラメーターには、フィールド名をSnapshotIds
として指定します。
"DescribeSnapshots": {
"Type": "Task",
"Parameters": {
"SnapshotIds": [
"snap-xxxxxxxxxx",
"snap-yyyyyyyyyy"
]
},
"Resource": "arn:aws:states:::aws-sdk:ec2:describeSnapshots",
"End": true
}
配列の中がすべて固定であれば、['hoge','moge']
で指定します。
$
マークを使ってパスを指定する場合は、States.Array($.hoge,$.moge)
で指定します。
パラメーターがネストしている場合
パラメーターがネストしている場合でも、落ち着いて作っていきます。
ここでは、ModifyNetworkInterfaceAttribute
のAttachment
を指定して、(EC2の)終了時にENI削除のON/OFFの設定を変更します。
Attachment
に指定する内容は、以下を使います。
"ModifyNetworkInterfaceAttribute": {
"Type": "Task",
"End": true,
"Parameters": {
"NetworkInterfaceId": "eni-xxxxxxxxxx",
"Attachment": {
"AttachmentId": "eni-attach-yyyyyyyyyyyy",
"DeleteOnTermination": "true/false"
}
},
"Resource": "arn:aws:states:::aws-sdk:ec2:modifyNetworkInterfaceAttribute"
}
フィールド名がない、とエラーになる場合
APIリファレンスにあるパラメーターを指定しても、The field hogehoge is not supported by Step Functions.
とエラーになってしまう場合があります。
例として、CreateNetworkInterface
のSecurityGroupId.N
を指定してみます。ENIの作成の際にSecurityGroupを指定するパラメーターです。
最初の例のように、複数形にしてSecurityGroupIds
を指定しようとします。
"CreateNetworkInterface": {
"Type": "Task",
"End": true,
"Parameters": {
"SubnetId": "subnet-xxxxxxxxxx",
"SecurityGroupIds": [
"sg-yyyyyyyyyy"
]
},
"Resource": "arn:aws:states:::aws-sdk:ec2:createNetworkInterface"
}
正しいパラメーター名は、CLIリファレンスにあるGroups
(キャメルケースで表記する模様)になります。
"CreateNetworkInterface": {
"Type": "Task",
"End": true,
"Parameters": {
"SubnetId": "subnet-xxxxxxxxxx",
"Groups": [
"sg-yyyyyyyyyy"
]
},
"Resource": "arn:aws:states:::aws-sdk:ec2:createNetworkInterface"
}
そのため、APIリファレンスでうまくいかない場合は、CLIやSDKのリファレンスのフィールド名を試してみてください。
おわりに
フィールド名でわかりづらい点をまとめてみました。これがわかっておけば、StepFunctionsは色々な場面で使っていけるかと思います。
この記事がどなたかのお役に立てれば幸いです。