こんにちは。2022年7月からサーバーワークスにジョインしましたIE課の小菅です。
IE課はInternal Education課の略称で2022年3月に新設され、中途採用で入社した方向けの養成所になっていて私がその課の第一号らしいです。
当社は全国どこに住んでいても仕事ができるということから、せっかくなので入社のタイミングで東京から地元宮城に移住しました。
前職ではデータ分析基盤をAWSのマネージドサービスを使って開発してました。 当時はCloudFormationをフルに活用して構築しており、今回のテーマでもあるStepfunctionsもコード、AWS CLIでの開発が主でした。
Stepfunctions workflow studioなる便利そうな機能が追加されていたのは知っていましたが触ったことがなく、開発においてGUIとはほぼ無縁な技術者の方もいらっしゃると思いますので本日はこちらを触っていきたいと思います。
Stepfunctions workflow studioってなに?
Step Functions は、AWS Lambda 関数およびその他のビジネスクリティカルなアプリケーションを構築するための AWS のサービスを組み合わせることができるサーバーレスオーケストレーションサービスです。
AWS Step Functions とは? - AWS Step Functions
Stepfunctionsは主にETL処理や機械学習のワークフローなどに利用されることが多いです。
そのStepfunctionsにおいてワークフローを構築する際に、視覚化してかつ短時間でワークフローを作成できる機能がStepfunctions workflow studioになります。従来ではAmazon State Languageを学習する必要がありましたがローコードで構築可能なので開発のハードルもかなり低くなったと思います。
より詳しい詳細につきましては以下公式ブログを参照ください。
新機能 – AWS Step Functions ワークフロースタジオ – ステートマシンを構築するためのローコードのビジュアルツール | Amazon Web Services ブログ
設定
さっそくステートマシンを作成していきます。
新規と付いてますね。「ワークフローを視覚的に設計」を選択。
タイプは今回は「標準」を選択。
workflowの設計の画面になりました。
左側をスクロールするといろんなAWSのサービスがでてきます。
今回は、Athenaでクエリを実行した結果がcsv形式でS3に出力されるのでLambdaでtsv形式に変換してS3に格納するワークフローを作成してみます。
よってワークフロー上で使用するAWSサービスは、AthenaとLambdaになります。
※今回の検証では、極めて小さなデータを扱うためLambdaでのデータ処理を採用しました。
※事前準備として、クエリを実行するまでのテーブル用意やLambdaの関数の用意がありますが本稿では割愛させていただきます。
画面左上にある検索ボックスに「Athena」と入力して「StartQueryExecution」をドラッグ&ドロップします。
StepfunctionsにAthenaが統合される前は、Lambdaでうまい具合に実装していたので非常に便利になりましたね。
次にステートマシン実行時に任意のSQLの入力を受け付け、どのS3のロケーションに出力させたいか設定する必要があるので画面右側の設定タブのAPIパラメータを修正します。
加えて「タスクが完了するまで待機 - 省略可能」にチェックを入れることでクエリが完了するまで待機するようにします。これにチェックがないと非同期実行になるのでクエリの完了を待機せず次の処理に進みます。
{ "QueryString.$": "$.sql", "WorkGroup": "primary", "ResultConfiguration": { "OutputLocation": "s3://<バケット名>/<任意のキー>" } }
次にLambdaを配置します。画面左上の検索ボックスでなにも入力しないと人気の高い順で5つAWSのサービスのアクションが表示されます。
一番上に「AWS Lambda Invoke」とあるのでこちらを画面の通りAthenaの後続処理となる位置にドラッグ&ドロップします。
画面右側の設定タブのAPIパラメータのFunction nameで今回実行するLambda関数を選択します。その他はデフォルトのままです。
このLambdaの処理では、前段に実行したクエリIDが必要となりますので入力タブで「InputPathで入力をフィルタリング - 省略可能」にチェックを入れた後、次の処理に渡せるように絞り込みます。
ここでの設定は完了なので画面右上の「次へ」をクリック。
この画面ではworkflow studioにより生成されたコードの確認になります。ここでもコードで設定の追加/修正が可能ですが今回はこのまま「次へ」をクリック。
ステートマシン名は今回はわかりやすいように「athena-result-convert-csv-to-tsv」とします。
アクセス許可でこのステートマシンの実行ロールを定義しますが、今回は「新しいロールの作成」とします。設定詳細に基づいて、必要な権限を用意してくれます。
それ以外はデフォルトのままでページ最下部の「ステートマシンの作成」をクリック。
実行
ステートマシンが正常に作成されたので早速「実行の開始」から実行してみます。
事前に定義した通りにSQLを入力し、「実行の開始」をクリック。
実行中になりました。
無事成功しました。tsv形式のオブジェクトも無事生成されてました。
おわりに
視覚的にワークフローを作成できるのは非常にわかりやすくて便利だなと思いました。 Stepfunctions初心者の方から「これ使えるかサクッと確認したい!」という経験者の方までシステム開発業務の助けになると思います。
私のように存在は知っているがどんな感じだろうと思っている方に、この記事が少しでも参考になれば幸いです。
小菅 信幸(執筆記事の一覧)
仙台在住/サウナをこよなく愛するエンジニア
2024 Japan AWS All Certifications Engineers