はじめに
AWS Step Functionsを使っている時に、フィールド名にスペースが入っていて困ったので、その際の対応方法を記事にしました。
概要
入力のサブセットにアクセスするパスの表記は以下の2つがあります。
- ドット (.) を使う方法
$.abc.def
- フィールド名にスペースがある場合はうまく動きません
- 角括弧 ([ ]) を使う方法
$['abc']['def']
- フィールド名にスペースがある場合は、こちらが使えます
参考
やってみた
入力イベント
ステートマシンの入力に、スケールアウト成功のイベントを使います。
{
"version": "0",
"id": "12345678-1234-1234-1234-123456789012",
"detail-type": "EC2 Instance Launch Successful",
"source": "aws.autoscaling",
"account": "123456789012",
"time": "yyyy-mm-ddThh:mm:ssZ",
"region": "us-west-2",
"resources": [
"auto-scaling-group-arn",
"instance-arn"
],
"detail": {
"StatusCode": "InProgress",
"Description": "Launching a new EC2 instance: i-12345678",
"AutoScalingGroupName": "my-asg",
"ActivityId": "87654321-4321-4321-4321-210987654321",
"Details": {
"Availability Zone": "us-west-2b",
"Subnet ID": "subnet-12345678"
},
"RequestId": "12345678-1234-1234-1234-123456789012",
"StatusMessage": "",
"EndTime": "yyyy-mm-ddThh:mm:ssZ",
"EC2InstanceId": "i-1234567890abcdef0",
"StartTime": "yyyy-mm-ddThh:mm:ssZ",
"Cause": "description-text",
"Origin": "EC2",
"Destination": "AutoScalingGroup"
}
}
ここから、Availability Zone
を抽出します。
フロー
フローは単純にPassだけ定義します。
ドットを使う方法で記述
OutputPathにドットを使う方法で、$.detail.Details.Availability Zone
と記述してみます。
保存はできるのですが、実行すると失敗します。
An error occurred while executing the state 'Pass' (entered at the event id #2). Invalid path '$.detail.Details.Availability Zone' : com.jayway.jsonpath.InvalidPathException: Space not allowed in path
角括弧を使う方法で記述
OutputPathに角括弧を使う方法で、$['detail']['Details']['Availability Zone']
と記述してみます。
両方を使って記述
ドットと角括弧を両方とも使うこともできるようで、$.detail.Details.['Availability Zone']
と記述してみました。
おわりに
AWS Step Functionsの記述方法 Amazon States Language で、スペースが入っている場合に使える記法を記事にしました。
公式を読んでいればわかる内容ですが、私のように知らないでしばらく途方に暮れる方もいるかと思い書いてみました。
この記事がどなたかのお役に立てれば幸いです。