Slide 1

Slide 1 text

2024/12/11 リテールアプリ共創部 岩田智哉 これでLambdaが不要に?! Step FunctionsのJSONata対応について

Slide 2

Slide 2 text

自己紹介 ● 産業支援グループ リテールアプリ共創部 ● 2018年5月入社 ● 普段は主にサーバーサイドの開発に従事 ● 前十字靭帯再建手術リハビリ中のためre:Invent不参加 岩田 智哉

Slide 3

Slide 3 text

re:Invent直前にStep Functionsのアップデート ● 変数のサポート ● JSONataのサポート https://aws.amazon.com/about-aws/whats-new/2024/11/aws-step-functions-variables-jsonata-transformations/

Slide 4

Slide 4 text

JSONata(じぇいそなーた) JSONをクエリ・変換するための言語 今後Step FunctionsではJSONataが推奨に

Slide 5

Slide 5 text

JSONata Exerciserでサクッと動作確認可能 https://try.jsonata.org/

Slide 6

Slide 6 text

Step Functionsのマネコンでもテスト可能

Slide 7

Slide 7 text

LocalStackでもテスト可能 Step Functions Made Easy in AWS and LocalStack https://blog.localstack.cloud/aws-step-functions-made-easy/ LocalStack V4.0.1からJSONataに対応

Slide 8

Slide 8 text

何が嬉しいのか?? 従来はLambdaが必要だった整形処理が JSONataだけで実現可能に!!

Slide 9

Slide 9 text

従来のStep Functionss組み込み関数 組み込み関数 説明 States.Array 配列を生成する States.ArrayPartition 配列を配列の配列に分割する States.ArrayContains 特定の値が配列に存在するかどうか返す States.ArrayRange 特定の範囲の要素を含む配列を作成する States.ArrayGetItem 配列の指定されたインデックスの値を返す States.ArrayLength 配列の長さを返す States.ArrayUnique 配列から重複する値を削除して一意の要素のみを含む配列を返す States.Base64Encode MIME Base64でをエンコードする States.Base64Decode MIME Base64でデコードする States.Format 文字列のフォーマット States.Hash ハッシュ値を計算する States.JsonMerge 2 つの JSON オブジェクトを 1 つのオブジェクトにマージする States.MathRandom 指定された開始番号と終了番号の間の乱数を返す States.MathAdd 2 つの数値の合計を返す States.StringSplit 文字列を配列に分割する States.StringToJson JSON文字列をオブジェクトにパース States.UUID UUID v4 を返す https://docs.aws.amazon.com/step-functions/latest/dg/intrinsic-functions.html

Slide 10

Slide 10 text

従来の組み込み関数だけで対応できないケースも Lambda無しで乗算を実現しようと思うと… AWS Step Functionsで組み込み関数だけを使って整数の乗算を実装してみた(AWS CDK) https://dev.classmethod.jp/articles/aws-step-functions-14-new-intrinsic-features-process-data-workflows/

Slide 11

Slide 11 text

JSONataを使うと乗算も楽々

Slide 12

Slide 12 text

JSONataでできること概要 ● クエリ ● 正規表現 ● 文字列操作 ● 日付操作 ● 四則演算 ● 簡易なプログラミング …etc

Slide 13

Slide 13 text

JSONataによるプログラミング

Slide 14

Slide 14 text

変数が使える

Slide 15

Slide 15 text

条件分岐も可能 三項演算子で条件分岐可能

Slide 16

Slide 16 text

自分で関数も定義できる functionで独自に関数を定義可能

Slide 17

Slide 17 text

関数のチェイン ~> を使って関数をチェインできる

Slide 18

Slide 18 text

豊富な関数群 ● String : $string(),$length(), $substring()…etc ● Numeric : $number(),$abs(), $floor(), $ceil()…etc ● Aggregation : $sum(),$max(),$min(),$average() ● Boolean : $boolean(),$not(),$exists() ● Array : $count(),$append(),$sort(),$reverse(),$shuffule(),$distinct(),$zip() ● Object : $keys(),$lookup(),$spread(),$merge(),$sift(),$each()…etc ● Date/Time: $now(),$millis(), $fromMillis(), $toMillis(), ● Higher Order : $map(), $filter(), $single(), $reduce(), $sift()

Slide 19

Slide 19 text

Step Functionsで使える追加の関数-1 ● $partition ○ 指定したチャンクサイズで配列を分割して配列の配列を作る ○ $partition([1,2,3,4,5,6,7,8,9,10],2) → [[1,2],[3,4],[5,6],[7,8],[9,10]] ● $range ○ 指定した範囲を含む配列を生成する ○ $range(1, 10, 2) → [1,3,5,7,9] ● $hash ○ ハッシュ値を計算する ○ $hash("hoge", "MD5") → "ea703e7aa1efda0064eaa507d9e8ab7e"

Slide 20

Slide 20 text

Step Functionsで使える追加の関数-2 ● $random ○ 指定された範囲の乱数を生成 ○ $random() → 0.29852901560666767 ● $uuid ○ UUIDV4を生成 ○ $uuid() → "7d3f8238-5326-4072-aba6-732b8e9632f3" ● $parse ○ JSON文字列をパースする ○ $parse("{∖"key∖": ∖"val∖"}") → {"key": "val"}

Slide 21

Slide 21 text

実装例

Slide 22

Slide 22 text

JSONataでできること SlackへのAWS料金通知を(ほぼ)Step Functionsの機能だけで作ってみた https://dev.classmethod.jp/articles/step-functions-cost-notify/ 同僚の小倉さんによるJSONata活用例

Slide 23

Slide 23 text

前月の末日を計算

Slide 24

Slide 24 text

AWSアカウントIDでグルーピング

Slide 25

Slide 25 text

まとめ

Slide 26

Slide 26 text

まとめ ● JSONataによってLambda無しでできることの 幅が大きく広がった ● 曲芸的な使い方もできるのでやりすぎ注意 ● JSONata曲芸選手権みたいなのも面白そう

Slide 27

Slide 27 text

No content