追記(2022.09.04)
Step Functionsで組み込み関数が追加されるアップデートにより、本記事の内容ができるようになりました。
以下にて記事にしておりますので、ご参照ください。
はじめに
以下のような経緯で、タイトルのことができなそうなのがわかったので、記事にしました。
(出来ることがわかる方いらっしゃいましたら、教えてください)
経緯
- QuickSightのデータセットの更新を、S3のファイル作成/削除をトリガーにして自動実行する構成を検討していた。
- データセット更新の際の
CreateIngestion
が、Step Functionsで実行できることを見つけた。 - ノーコードで構築できると期待して試してみたが、
CreateIngestion
に、一意のIdを生成して渡す必要があった。 - 「一意のId生成部分をLambdaで実装」とすると、ノーコードにはならない。
- Lambdaで作るなら、
CreateIngestion
もLambdaで実装すればよいため、Step Functionsも不要と判断。
(想定していた)構成
赤点線で囲んである部分が、今回の内容です。
わかったこと
QuickSightのデータセット更新指示
create-ingestionを使います。
こことかここを見ても、Ingestionについては、cancel
、create
、describe
、list
しかなく、再実行的なものが見当たりませんでした。
都度IngestionをCreateする必要があります。
Step Functionsの、CreateIngestion
[ステートマシーンの作成]から、「ワークフローを視覚的に設計」でWorkflow Studioを開きます。
ingestionで検索するとQuickSightの処理が4つ出てきますので、CreateIngestionをドラッグします。
DataSetId
DataSetIdは、CloudShellで、以下のコマンドで分かります。
$ aws quicksight list-data-sets --aws-account-id <AWSアカウントID>
{
"DataSetSummaries": [
{
"Arn": "arn:aws:quicksight:<リージョン>:<AWSアカウントID>:dataset/<DataSetId>",
"DataSetId": "<DataSetId>",
"Name": "<DataSet名>",
"CreatedTime": "2021-01-13T00:35:28.982000+00:00",
"LastUpdatedTime": "2021-01-13T00:35:29.208000+00:00",
"ImportMode": "SPICE",
"RowLevelPermissionTagConfigurationApplied": false,
"ColumnLevelPermissionRulesApplied": false
},
{
...
IngestionId
IngestionIdは公式の説明によると必須で、^[a-zA-Z0-9-_]+$
の制限があるようです、「未指定だと自動でId付与」などはしてくれないです。
1234567890 と入れておきました。
実行
実行結果は以下のようになりました。
IngestionId | Step Functionsのステータス | QuickSightのデータセット更新 | |
---|---|---|---|
初回 | 1234567890 | 成功 | 更新される |
2回目 | 1234567890 | 成功 | 反応なし |
3回目 | 2234567890 | 成功 | 更新される |
IngestionIdが同じ場合、Step Functionsで実行するCreateIngestion
は成功扱いですが、QuickSight側では2回目以降は無視されるようです。IngestionIdを変えれば更新されました。
IngestionIdを変えられるような方法がないか調べてみました。
IngestionId変更方法
引数より
前の処理から渡された内容をパラメータに指定する方法が公式にありました。
- "<セット対象のkey>**.\$**": "**\$.**<セットさせたい入力値のJsonパス>"
- key名の末尾に
.$
- 値に、
$.
から始めたJsonパス
- key名の末尾に
前の処理でIdを生成し、それを渡せばできそうです。
が、Id生成のLambda関数を作る時点でノーコードではなくなってしまいます。。。
コンテキストより
ワークフローの状態に関する情報にアクセスする方法もありました。
- "<セット対象のkey>**.\$**": "**\$$.**<セットさせたい入力値のJsonパス>"
- key名の末尾に
.$
- 値に、
$$.
から始めたJsonパス
- key名の末尾に
コンテキストの中に、Idに使えそうな文字列があればよいのですが。。。
日時などは:
が混じっているため、使えなさそうでした。
結論
- Step Functionsを用いて、ノーコードでQuickSightのデータセット更新はできない模様。
- そのため、Lambda関数を自作することとしました。
おわりに
ノーコードに憧れてQuickSightを操作しようと調べていましたが、無理そうでした。
Step Functionsにて入力値をパラメータへ渡す方法など知ることができたので、使う際にはスムーズに構築できそうです。