CognitoのUserPoolを移行する
そのためには既存のものを修正することはできず、新しいUserPoolを作らないといけない
移行の方法は2つ
Lambdaを使用して漸進的に移行する
こっちについて見るmrsekut.icon
CSVで全移行する
パスワードリセットされる
Lambdaを使用する方の大まかなアーキテクチャ
プロダクトPはリリース後、新しいUserPool(以下NP)を見る
あるユーザーがリリース後に初めてPでログインしようとする
しかしNPを見ているのでそこにユーザー情報はない
このタイミングでLambdaを起動して、古いUserPool(以下OP)を見て、NPに移行させる
Lambda関数
型ってなんかのLibraryで提供されてないんか #?? サンプルコード見つけての定数でgrepして型特定したりした
新しいUserPoolを作成
Lambda関数を作成
関数のdocsとかも
これ微妙に中途半端でわからない
authenticateUserとlookupUserはどうすればいいんだ #?? Pythonのコードと型を参照してなんとかたどりついた
code: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行加える
code:amplify.js
Auth: {
identityPoolId: '*******',
region: 'ap-northeast-1',
userPoolId: '*******',
userPoolWebClientId: '*******',
authenticationFlowType: 'USER_PASSWORD_AUTH' // これ
},
テスト