Amazon HoneycodeのテーブルをAWS CLIで操作してみる

2022.01.16

いわさです。

ここしばらくアップデートのなかったHoneycodeですが、先日APIの更新が行われていましたので眺めていました。
そこで気づいたのですが、そもそもHoneycodeをAPIで操作したことがなかったです。

そこで、本日はAWS CLIからHoneycodeに対して何が出来るかを確認してみました。

AWS CLI

Honeycodeコンソールの全ての操作が出来るわけではありません。
本日時点では主にテーブルデータの参照と操作、オートメーションの実行が可能です。

つかってみる

まず、CLIで操作するにあたりリソースを特定する必要があります。
必要な情報はHoneycodeのURLから取得することが出来ます。

このURLをデコードすると以下の形式となっています。

https://app.honeycode.aws/arn:aws:sheets:us-west-2:123456789012:mobileapp:7b71a9cb-3cce-40bd-8c22-0968b8a264d3/3b1eb03f-8156-4a73-9464-f4a6d2b3d3f1/d9d3b56d-7984-4fe7-9f71-197e9b977afd?ref=app_list

このURLで指定されているパラメータはそれぞれ以下を示しています。

パラメータ
Workbook ID 7b71a9cb-3cce-40bd-8c22-0968b8a264d3
Application ID 3b1eb03f-8156-4a73-9464-f4a6d2b3d3f1
Screen ID d9d3b56d-7984-4fe7-9f71-197e9b977afd

テーブルの取得

まずは、Workbook IDとlist-tablesサブコマンドを使ってテーブル情報を取得してみましょう。
本日時点でオレゴンリージョン(us-west-2)でのみHoneycodeは利用出来ますのでリージョンの指定を行います。

iwasa.takahito@hoge ~ % aws honeycode list-tables --workbook-id 7b71a9cb-3cce-40bd-8c22-0968b8a264d3 --region us-west-2
{
    "tables": [
        {
            "tableId": "361a16b6-5281-4e5c-89c6-914fb5cf4c4b",
            "tableName": "Dashboard"
        },
        {
            "tableId": "9755e17e-ee00-4fc4-a3e2-fe88f8759e20",
            "tableName": "Done"
        },
        {
            "tableId": "5c39507d-4725-434f-8fce-16fbfa0b55e5",
            "tableName": "ReminderOptions"
        },
        {
            "tableId": "84f67907-5a33-4183-b9aa-71d2813ffe5b",
            "tableName": "Tasks"
        },
        {
            "tableId": "d6e43ec9-76fc-442a-8844-65c76ad961a7",
            "tableName": "_README"
        }
    ],
    "workbookCursor": 483253581
}

今回はTasksテーブルのレコードを操作してみたいと思いますので、TasksテーブルのテーブルIDを取得しておきます。

データの取得

次に先程取得したテーブルIDとlist-table-rowsサブコマンドを使って、テーブルデータを取得してみたいと思います。

iwasa.takahito@hoge ~ % aws honeycode list-table-rows --workbook-id 7b71a9cb-3cce-40bd-8c22-0968b8a264d3 --table-id 84f67907-5a33-4183-b9aa-71d2813ffe5b --region us-west-2 --max-items 2
{
    "rows": [
        {
            "rowId": "row:84f67907-5a33-4183-b9aa-71d2813ffe5b/78480e11-9369-4e80-b6c1-b07ed8e8d0fb",
            "cells": [
                {
                    "format": "AUTO",
                    "rawValue": "Try a template app",
                    "formattedValue": "Try a template app"
                },
                {
                    "format": "CONTACT",
                    "rawValue": "iwasa.takahito@exmaple.com",
                    "formattedValue": "Takahito Iwasa"
                },
                {
                    "formula": "=IFERROR([Assignee][First Name],\"\")",
                    "format": "AUTO",
                    "rawValue": "Takahito",
                    "formattedValue": "Takahito"
                },
                {
                    "format": "DATE",
                    "rawValue": "43985",
                    "formattedValue": "6/3/20"
                },
                {
                    "format": "ROWLINK",
                    "rawValue": "row:9755e17e-ee00-4fc4-a3e2-fe88f8759e20/45adb115-a216-440f-9e36-7fe94c8ff861",
                    "formattedValue": "Yes"
                },
                {
                    "format": "ROWLINK",
                    "rawValue": "row:5c39507d-4725-434f-8fce-16fbfa0b55e5/5bffe141-b456-43b0-8554-730bc6601b94",
                    "formattedValue": "Due Date"
                },
                {
                    "formula": "=IFERROR([Due]-[Remind On][Duration],\"\")",
                    "format": "DATE",
                    "rawValue": "43985",
                    "formattedValue": "6/3/20"
                }
            ]
        },
        {
            "rowId": "row:84f67907-5a33-4183-b9aa-71d2813ffe5b/e5f45544-24f6-4db5-b0f7-da0337c8f9cc",
            "cells": [
                {
                    "format": "AUTO",
                    "rawValue": "Create a new app",
                    "formattedValue": "Create a new app"
                },
                {
                    "format": "CONTACT",
                    "rawValue": "iwasa.takahito@example.com",
                    "formattedValue": "Takahito Iwasa"
                },
                {
                    "formula": "=IFERROR([Assignee][First Name],\"\")",
                    "format": "AUTO",
                    "rawValue": "Takahito",
                    "formattedValue": "Takahito"
                },
                {
                    "format": "DATE",
                    "rawValue": "44018",
                    "formattedValue": "7/6/20"
                },
                {
                    "format": "ROWLINK",
                    "rawValue": "row:9755e17e-ee00-4fc4-a3e2-fe88f8759e20/27f6b60c-8c5a-4a37-873b-436c86d6e858",
                    "formattedValue": "No"
                },
                {
                    "format": "ROWLINK",
                    "rawValue": "row:5c39507d-4725-434f-8fce-16fbfa0b55e5/5bffe141-b456-43b0-8554-730bc6601b94",
                    "formattedValue": "Due Date"
                },
                {
                    "formula": "=IFERROR([Due]-[Remind On][Duration],\"\")",
                    "format": "DATE",
                    "rawValue": "44018",
                    "formattedValue": "7/6/20"
                }
            ]
        }
    ],
    "workbookCursor": 483253581,
    "columnIds": [
        "e5682856-1bc3-454e-bf0d-e7ddf107ecbd",
        "f675872a-8b18-4ab0-b959-47c4fe4a0a0f",
        "5fbf22cc-00a9-4a0a-bacb-cd00164e5002",
        "62ad12e2-376c-4074-8143-31c549f8757a",
        "54ba1b96-90b9-47d5-bd16-9fa62506f189",
        "01f1f8f4-b7bd-4c48-9f88-2a637b25f681",
        "3b61275d-d827-477c-a96f-bbb1c527e1cb"
    ],
    "rowIdsNotFound": null
}

タスクテーブルのデータが取得出来ていますね。

データの作成・更新・削除

データの参照だけでなく、作成・更新・削除も可能です。
ここではbatch-create-table-rowsサブコマンドを使ってレコードを追加してみましょう。

先程取得したテーブルデータにcolumnIdsが含まれていますのでタスク名に該当するカラムIDを取得しておきます。list-table-columnsサブコマンドを使っての取得も可能です。

iwasa.takahito@hoge ~ % aws honeycode batch-create-table-rows --workbook-id 7b71a9cb-3cce-40bd-8c22-0968b8a264d3 --table-id 84f67907-5a33-4183-b9aa-71d2813ffe5b --region us-west-2 --rows-to-create batchItemId=aaaaaa,cellsToCreate={e5682856-1bc3-454e-bf0d-e7ddf107ecbd={fact=CreatedByCLI}}
{
    "workbookCursor": 7603422391881275,
    "createdRows": {
        "aaaaaa": "row:84f67907-5a33-4183-b9aa-71d2813ffe5b/40a3c823-8744-3952-a294-9f92debf1eec"
    }
}

作成レコードがすぐにHoneycode側に反映されました。

CloudTrailを確認

さいごにCloudTrailを確認してみました。
今回CLIから操作した内容はしっかりとCloudTrailに記録されていました。

ここでちょっと思ったのですが、Honeycode上の一般ユーザの操作履歴もCloudTrailで確認出来るのでしょうか?
テーブルにレコードを追加してみます。

どうやらCLIから直接操作したものに限って証跡管理出来るようなので、Honeycodeコンソール上からの操作は管理されないようです。
Honeycodeのオートメーションなどを使って何らかのストリームに連携するなど準備しないといけない気がしますね。

さいごに

本日はHoneycodeをAWS CLIで操作してみました。

提供されているAPIを見ると、Honeycodeアプリケーションの自動構築用ではなく、外部連携用と考えて良いと思います。

これまで、ZapierやAppFlowで設定出来る範囲が外部連携できる範囲かなと思っていたのですが、CLIやAPIでテーブルデータを操作出来るのであればなんでもできそうですね。
外部サービスに依存せずに連携部分を作り込むことも出来るので活用の幅はかなり広がりそうです。