📲
stepfunctionsのCallAwsServiceでdynamoのgetItemの数値が文字列として扱われてしまう
stepfunctionsをcdkで書いており、dynamoからNumber型の値を参照したいことがあった。
いちいちlambda書くほどの処理でもないためCallAwsServiceを利用して、
Number型なのでN: 0のように出力して欲しいのだが、N: "0"のように文字列として取得されてしまった。
取得される仕様はAPIとかも同様で仕方がないので、これを数値として出力したい。
けっこうハマってしまって
結果、resultSelectorでstringToJsonを使うことで数値に変換すれば
数値として結果出力できるようになった。
サンプルコード
const getItem = new tasks.CallAwsService(scope, 'GetItem', {
service: 'dynamodb',
action: 'getItem',
parameters: {
TableName: dynamoTable.tableName,
Key: {
keyId: {
S: sfn.JsonPath.stringAt(`$.${keyIdPath}`),
},
},
},
iamResources: [dynamoTable.tableArn],
inputPath: '$',
resultPath: '$.GetItem',
resultSelector: {
// CallAwsServiceの結果がAttributeValue形式であり文字列で取得されてしまうため数値に変換
Item: {
<項目名>: {
N: sfn.JsonPath.stringToJson(sfn.JsonPath.stringAt('$.Item.<項目名>.N')),
},
},
},
});
resultSelector利用する時って
いつもどうやるんだっけってなるから
将来の自分のためにもコード残しておく
Discussion