generated at
CognitoのUserPoolを移行する
Cognito UserPoolに新しい認証方法を追加したいが、
そのためには既存のものを修正することはできず、新しいUserPoolを作らないといけない

移行の方法は2つ
Lambdaを使用して漸進的に移行する
こっちについて見るmrsekut
CSVで全移行する
パスワードリセットされる

Lambdaを使用する方の大まかなアーキテクチャ
プロダクトPはリリース後、新しいUserPool(以下NP)を見る
あるユーザーがリリース後に初めてPでログインしようとする
しかしNPを見ているのでそこにユーザー情報はない
このタイミングでLambdaを起動して、古いUserPool(以下OP)を見て、NPに移行させる

Lambda関数
型ってなんかのLibraryで提供されてないんか #??
サンプルコード見つけての定数でgrepして型特定したりした

大まかな手順 ref
新しいUserPoolを作成
Lambda関数を作成
関数のdocsとかも
これ微妙に中途半端でわからない
authenticateUser lookupUser はどうすればいいんだ #??
Pythonのコードと型を参照してなんとかたどりついた
ts
import * as AWS from "aws-sdk"; const client = new AWS.CognitoIdentityServiceProvider(); ... const user = client.adminInitiateAuth({ UserPoolId: "**************, ClientId: "**************, AuthFlow: "**************, AuthParameters: { USERNAME: event.userName, PASSWORD: event.request.password, }, }); ... const user = client.adminGetUser({ UserPoolId: "*******", Username: event.userName, });
結局これにした
tsの方での、emailの取得の仕方がわからなかった
Cognitoのコンソール画面でLambdaをトリガーとして設定
クライアント側のAmplifyの設定に1行加える
amplify.js
Auth: { identityPoolId: '*******', region: 'ap-northeast-1', userPoolId: '*******', userPoolWebClientId: '*******', authenticationFlowType: 'USER_PASSWORD_AUTH' // これ },
テスト