Lambda 함수로 기존 Amazon Cognito 사용자 자동 마이그레이션하기
Lambda 함수로 기존 Amazon Cognito 사용자 자동 마이그레이션하기 (Automatically migrate known Amazon Cognito users with a Lambda function)
Amazon Cognito 사용자 풀(user pool)에 아직 가입되지 않은 사용자가 로그인하면 MigrateUser 트리거로 Lambda 함수를 호출할 수 있어요. 이 함수가 별도 테이블(예: DynamoDB)에서 기존 사용자를 찾아 사용자 풀로 자동 마이그레이션하는 시나리오를 이 예제가 보여줘요.
본문
다음 코드 예제는 Lambda 함수로 기존 Amazon Cognito 사용자를 자동 마이그레이션하는 방법을 보여줘요.
이 시나리오는 다음 단계를 수행해요:
- 사용자 풀이
MigrateUser트리거에 대해 Lambda 함수를 호출하도록 구성한다. - 사용자 풀에 없는 사용자 이름과 이메일로 Amazon Cognito에 로그인한다.
- Lambda 함수가 DynamoDB 테이블을 검색해 기존 사용자를 자동으로 사용자 풀로 마이그레이션한다.
- 마이그레이션된 사용자의 암호를 재설정하기 위해 forgot password 흐름을 수행한다.
- 새 사용자로 로그인한 다음 리소스를 정리한다.
구성 단계별로 Lambda 함수를 추가하고, 사용자 풀에 사용자를 등록·로그인·마이그레이션하는 전체 흐름을 코드로 구현해요.
Go (SDK for Go V2)
MigrateUser 는 이 시나리오의 각 단계를 개별 함수로 분리해 읽고 이해하기 쉽게 만든 타입이에요.
import (
"context"
"errors"
"fmt"
"log"
"strings"
"user_pools_and_lambda_triggers/actions"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider"
"github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types"
"github.com/awsdocs/aws-doc-sdk-examples/gov2/demotools"
)
// AddMigrateUserTrigger adds a Lambda handler as an invocation target for the MigrateUser trigger.
func (runner *MigrateUser) AddMigrateUserTrigger(ctx context.Context, userPoolId string, functionArn string) {
log.Printf("Let's add a Lambda function to handle the MigrateUser trigger from Cognito.\n" +
"This trigger happens when an unknown user signs in, and lets your function take action before Cognito\n" +
"rejects the user.\n\n")
err := runner.cognitoActor.UpdateTriggers(
ctx, userPoolId,
actions.TriggerInfo{Trigger: actions.UserMigration, HandlerArn: aws.String(functionArn)})
if err != nil {
panic(err)
}
log.Printf("Lambda function %v added to user pool %v to handle the MigrateUser trigger.\n",
functionArn, userPoolId)
log.Println(strings.Repeat("-", 88))
}
전체 예제와 실행 방법은 AWS Code Examples Repository 의 user_pools_and_lambda_triggers 에서 확인할 수 있어요.