LoginSignup
2
1

More than 1 year has passed since last update.

QuickSightのデータセットの更新をStep Functionsでノーコードで出来なかった話

Last updated at Posted at 2022-01-30

追記(2022.09.04)

Step Functionsで組み込み関数が追加されるアップデートにより、本記事の内容ができるようになりました。
以下にて記事にしておりますので、ご参照ください。

はじめに

以下のような経緯で、タイトルのことができなそうなのがわかったので、記事にしました。
(出来ることがわかる方いらっしゃいましたら、教えてください)

経緯

  1. QuickSightのデータセットの更新を、S3のファイル作成/削除をトリガーにして自動実行する構成を検討していた。
  2. データセット更新の際のCreateIngestionが、Step Functionsで実行できることを見つけた。
  3. ノーコードで構築できると期待して試してみたが、CreateIngestionに、一意のIdを生成して渡す必要があった。
  4. 「一意のId生成部分をLambdaで実装」とすると、ノーコードにはならない。
  5. Lambdaで作るなら、CreateIngestionもLambdaで実装すればよいため、Step Functionsも不要と判断。

(想定していた)構成

赤点線で囲んである部分が、今回の内容です。

image.png

わかったこと

QuickSightのデータセット更新指示

create-ingestionを使います。
こことかここを見ても、Ingestionについては、cancelcreatedescribelistしかなく、再実行的なものが見当たりませんでした。
都度IngestionをCreateする必要があります。

Step Functionsの、CreateIngestion

[ステートマシーンの作成]から、「ワークフローを視覚的に設計」でWorkflow Studioを開きます。
ingestionで検索するとQuickSightの処理が4つ出てきますので、CreateIngestionをドラッグします。
image.png

右ペインでパラメータを指定します。
image.png

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パス

前の処理でIdを生成し、それを渡せばできそうです。
が、Id生成のLambda関数を作る時点でノーコードではなくなってしまいます。。。

コンテキストより

ワークフローの状態に関する情報にアクセスする方法もありました。

  • "<セット対象のkey>**.\$**": "**\$$.**<セットさせたい入力値のJsonパス>"
    • key名の末尾に.$
    • 値に、$$.から始めたJsonパス

コンテキストの中に、Idに使えそうな文字列があればよいのですが。。。

日時などは:が混じっているため、使えなさそうでした。

結論

  • Step Functionsを用いて、ノーコードでQuickSightのデータセット更新はできない模様。
    • そのため、Lambda関数を自作することとしました。

おわりに

ノーコードに憧れてQuickSightを操作しようと調べていましたが、無理そうでした。
Step Functionsにて入力値をパラメータへ渡す方法など知ることができたので、使う際にはスムーズに構築できそうです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1