はじめに
フューチャー Advent Calendar 2024の8日目です。
GlueやDynamoDBを用いたデータ分析のためのワークフローを、Step Functionsで構築しようとしていたところ、どうやらちょうどアプデが来ていて色々便利になっていました。
アップデートについて
主に2つのアップデートがあったようで、
- 変数が使えるようになった
- JSONataが使えるようになった
今回は、2つ目について取り扱います。
1つ目に関しては他の方の記事を参考にしてください。かなり便利になったみたいです。
本題
今回は、Step FunctionsでDynamoDBのS3エクスポートを行う際に、出力先のS3パスに日付情報をつける場合を想定します。
このステートに対して、日付情報を渡してあげたいわけです。
JSONateで日付を取得
JSONataで日付を取得するには
$fromMillis($millis())
$millis()
が現在の経過ミリ秒で、$fromMillis()
で日時に変換しています。これはUTC時刻なので注意してください。
$fromMillis($millis(), '[Y0001][M01][D01]', '+0900')
これで、時差を考慮したうえでかつYYYYMMDD
の形式になります。
JSONataの日時関数に関する公式ドキュメント
JSONataの出力が確認できるページ
Step Functionsに導入
これを、Step Functionsで書いてステートに渡してあげます。
目的のステートの手前に、日付を渡してあげるためのpassステートを置いて"出力"に定義してあげます。
JSONateを扱うには、"{% %}"
で囲ってあげる必要があります。
S3エクスポートの引数に、"S3Prefix": "{% $states.input.date_prefix %}"
と定義してあげるとpassステートの出力で定義した値を受け取ることができます。
実際に実行してみた結果です。
ステートの入力のS3Prefixの値が、想定通りYYYYMMDD
形式の日付になっています。
(テーブル名が架空なので、実行自体は失敗しています。)
おわりに
今回はたまたまアップデートが来ていた内容に触れる機会があったので記事にすることができました。
以前まではここまで柔軟に日時を扱えずLambdaを使うケースが多かったようで、今回僕はちょうど恩恵を受けることができてラッキーでした。
最初アップデートに気づかず作業していた時は、他の記事の通りやっても変数の受け渡しがうまくいかず苦労していました。
自分が使うAWSサービスのアップデート情報はキャッチアップしておかないといけませんね。
参考にした記事