🤖

CognitoからユーザのリストをサクッとCSVで取得してみた

2021/06/10に公開

はじめに

CognitoのユーザリストをCSV化するのを自動化したかったので、CLIとかを組み合わせてできないか検討していました。
形式はUsernameとEmailのペアで取得しようとしていました。
ドキュメントを見ると list-usersjqを利用して簡単にできそうだったので、実際にやってみました。

前提

AWS CLIはv2系を利用しました

$ aws --version
aws-cli/2.1.1 Python/3.7.4 Darwin/19.6.0 exe/x86_64

やってみたこと

  1. 事前準備
  2. list-usersでリストを取得
  3. jqと組み合わせてCSV形式で取得

事前準備

ユーザプールを作成して、ユーザを登録した上で以下の値を控えておきます

  • ユーザプールID

list-usersでリストを取得

まずはcognito-idpのlist-usersだけで情報を取得してみました。
今回は、「email」の情報が欲しかったので attributes-to-getemail をセットしています。
メールアドレスを取得する場合には以下のコマンドでできました。

$ aws cognito-idp list-users \
--user-pool-id <ユーザプールID> \
--attributes-to-get "email"
{
    "Users": [
        {
            "Username": "1e509176-0c15-440f-87d0-ca83fa1df877",
            "Attributes": [
                {
                    "Name": "email",
                    "Value": "kato@katoaki.com"
                }
            ],
            "UserCreateDate": "2020-06-16T06:00:00.255000+09:00",
            "UserLastModifiedDate": "2020-06-16T06:00:00.255000+09:00",
            "Enabled": true,
            "UserStatus": "FORCE_CHANGE_PASSWORD"
        },
                ︙

jqと組み合わせてCSV形式で取得

jqと組み合わせることで、必要な情報だけに絞り、かつCSV形式で取得することができました。

$ aws cognito-idp list-users \
--user-pool-id <ユーザプールID> \
--attributes-to-get "email" \
| jq -r '.Users[] | [.Username, .Attributes[].Value] | @csv' \
| tr -d '"' \
> result.csv
$ cat result.csv
1e509176-0c15-440f-87d0-ca83fa1df877,kato@katoaki.com
445b38d1-dca9-40d1-9c9d-1cd628d4b03c,***@gmail.com
e772bc62-b2ca-4a09-9b34-cd5de8901a13,***@gmail.com
f5baef95-5bf8-46df-83de-855447ea7eff,***@somecompany.jp

まとめ

  • Cognito CLIとjqを組み合わせると、CSV形式でデータが取得できる
  • cognito-idpでattributes-to-getに指定した属性が取得できる

参考

Discussion