はじめに
先日、AWS Step Functionsで使える組み込み関数が増えました。
以前、「Step FunctionsでQuickSightのデータセット更新を行う際、ランダム文字列が必要でLambdaを使う必要がある」という内容の記事を書きました。
今回のアップデートで追加された組み込み関数を用いることで、ノーコードでStep FunctionsからQuickSightを更新できるようになりました。
やったこと
States.UUID
を使い、IngestionIdに一意の文字列を渡すだけです。
参考(日本語のページはまだ更新されていません。英語のページで確認ください)
関数だけ使ってみる
Workflow Studioで Pass をドラッグアンドドロップし、入力のParametersの中に以下の様に記載します。
{
"param.$": "States.UUID()"
}
あとは保存して実行するだけです。
UUIDが生成されているのがわかります。
QuickSightデータセット作成
次に正常にデータセット更新が行われることを確認するために、サンプルを作成します。
今回はS3に置いた以下のデータを直接読み込み、表として表示させます。
名前,年齢,誕生日,血液型,身長(cm),好きなもの,嫌いなもの,口癖
青天国 春,16,4月28日,A,160,カレーライス(甘口),長いも,春ちゃんにお任せあれ!
玉城 杏夏,15,1月17日,A,158,チーズバーガー,ヨーグルト,お茶目なジョークです
聖舞 理王,14,9月23日,AB,155,プリン(甘天堂),ピーマン,なぜなら私は、理王様だから!
祇園寺 雪音,16,8月8日,AB,164,カレーライス(激辛),無し,私様にお任せだ!
伊藤 紅葉,14,8月15日,A,146,梨,無し,いとおかし
読み込ませる場所を示すマニフェストファイルのサンプルです。
{
"fileLocations": [
{"URIPrefixes": ["s3://<S3バケット名>/testspace/tings/"]}
]
}
QuickSightから新規でデータソースを作成し、ビジュアルで表を作りました。
この次に使うデータセットIDを取得します。
$ aws quicksight list-data-sets --aws-account-id <AWSアカウントID>
{
"DataSetSummaries": [
{
"Arn": "arn:aws:quicksight:<リージョン>:<AWSアカウントID>:dataset/<DataSetId>",
"DataSetId": "<DataSetId>",
"Name": "tings_members",
"CreatedTime": "2022-09-03T01:51:00.339000+00:00",
"LastUpdatedTime": "2022-09-03T01:51:00.339000+00:00",
"ImportMode": "SPICE",
"RowLevelPermissionTagConfigurationApplied": false,
"ColumnLevelPermissionRulesApplied": false
},
{
...
ステートマシン作成
CreateIngeestionにパーツを変えてパラメータに、アカウントID、先に取得したデータセットIDを設定し、IngestionIdには組み込み関数の結果が渡るようにします。
ステートマシンにアタッチさせているIAMロールに、CreateIngestionの権限を付与しておいてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "quicksight:CreateIngestion",
"Resource": "arn:aws:quicksight:<リージョン>:<AWSアカウントID>:dataset/<DataSetId>/ingestion/*"
}
]
}
実際にファイルから2行を削除し、同名でアップし上書きします。
名前,年齢,誕生日,血液型,身長(cm),好きなもの,嫌いなもの,口癖
青天国 春,16,4月28日,A,160,カレーライス(甘口),長いも,春ちゃんにお任せあれ!
玉城 杏夏,15,1月17日,A,158,チーズバーガー,ヨーグルト,お茶目なジョークです
聖舞 理王,14,9月23日,AB,155,プリン(甘天堂),ピーマン,なぜなら私は、理王様だから!
- 祇園寺 雪音,16,8月8日,AB,164,カレーライス(激辛),無し,私様にお任せだ!
- 伊藤 紅葉,14,8月15日,A,146,梨,無し,いとおかし
結果をみると、IngestionIdに生成されたUUIDが渡り実行されているのが確認できます。
QuickSightの更新履歴から、指示を受け付けたことが確認できます。
2回目以降の実行
以前は都度、IngestionIdに渡すパラメータを変更する必要がありましたが、今回はステートマシンに何も変更を加えず、更新されるか確認してみます。
対象のS3のフォルダに、以下のファイルを置きます。
名前,年齢,誕生日,血液型,身長(cm),好きなもの,嫌いなもの,口癖
祇園寺 雪音,16,8月8日,AB,164,カレーライス(激辛),無し,私様にお任せだ!
伊藤 紅葉,14,8月15日,A,146,梨,無し,いとおかし
再度、ステートマシンを実行します。
結果を確認すると、先ほどと異なるIngestionIdが渡っています。
QuickSightの更新履歴から、更新指示を受け付けたことが確認できます。
変更なしで、データセット更新が確認できました。
おわりに
Step Functionsの新しい組み込み関数を用いて、以前できなかったノーコードでのQuickSightのデータセット更新ができるようになりました。
組み込み関数を駆使すれば、今までLambda等が必要だった処理も、Step Functions単体でできるようになるかもしれず、より使いやすくなったと思います。