Amazon Cognito から CSV でユーザーリストを取得する
はじめに
業務にて、AWS Cognito のユーザープールからユーザーの一覧を取得する必要があり、
自作のスクリプトを作成してみました。
張りぼてに近い完成度ですが、どなたかのお役に立てれば大変嬉しいです!👍
サンプルリポジトリ
以下の github にソースコードがございますので、こちらからクローンください。
Node.js のインストール
初めに、今回作成したスクリプトは JavaScript で書かれていますので、
Node.js をインストールし、npm も一緒にインストールしてくださいませ。
Node.js がインストールされているか分からない方は、
PowerShell や ターミナル等のコマンドラインで以下を実行してください。
バージョンが表示されればOKです。
$ node -v
私は 18 系のバージョンを利用しています。
パッケージのインストール
ソースコードをクローンし、プロジェクト配下で以下のコマンドを実行します。
$ npm install
各種パッケージがインストールされますので、確認してみてください。
.env の準備
.env ファイルを作成し、必要な情報を入れます。
ご自身のリージョン、アクセスキー等シビアな情報を入れておきます。
AWS_REGION = ap-northeast-1
USER_POOL_ID = ap-northeast-1_xxxxxx
AWS_ACCESS_KEY_ID = xxxxxxx
AWS_AWS_SECRET_ACCESS_KEY = xxxxxxx
Cognito のカスタム属性等の追加
カスタム属性を出力したい場合、
サンプルのコードの以下の記述箇所を修正ください。
例えば、custom:userId
等の属性があれば、キーと値を必要に応じて変更頂ければと思います。
// 初回のリクエスト
(async () => {
const users = await paginateUsers({ UserPoolId: userPoolId });
if (users) {
const userData = users.map(user => {
const emailAttribute = user.Attributes.find(attr => attr.Name === 'email');
const emailVerified = user.Attributes.find(attr => attr.Name === 'email_verified');
return {
email: emailAttribute ? emailAttribute.Value : '',
email_verified: emailVerified ? emailVerified.Value : false,
// カスタム属性等があれば追加
};
});
csv
.write(userData, { headers: true })
.pipe(writeStream);
}
})();
スクリプトの実行
以下のコマンドを実行し、CSV ファイルを作成します。
$ node script.js
最終的に以下のように表示されていればOKです。
プロジェクト直下に user-list.csv
ファイルが完成しているはずです🎉
CSVファイルのエクスポートが完了しました。
Cognito への CSV ファイルのインポート
以下の公式ドキュメントにインポート手順について記載があります。
簡単にインポートをすることができますので、こちらも試してみる価値ありです。
おわりに
自作スクリプトを作ってみて、楽しみながら実装できました。
Cognito のユーザーのエクスポートについて書かれている記事をあまり見かけなかったので、
もしかしたら、本記事が誰かのお役に立てる日が来るかもしれません。
今回は Cognito に限った話ですが、
Auth0 等の他の認証サービスもエクスポート、インポートは簡単にできるものなのでしょうか。。
色々調べつつアウトプットしていければと思います。
Discussion