Serverless에서 Cognito 사용자 풀 설정하기

이제 serverless.yml을 통해 Cognito 사용자 풀을 설정하는 방법을 살펴보겠습니다. 이 과정은 Cognito 사용자 풀 생성하기 챕터에서 수동으로 진행했던 것과 매우 유사할 것입니다.

리소스 생성

Change indicator resources/cognito-user-pool.yml에 다음 내용을 추가합니다.

Resources:
  CognitoUserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      # 스테이지 기반으로 이름 생성
      UserPoolName: ${self:custom.stage}-user-pool
      # 이메일을 별칭으로 설정
      UsernameAttributes:
        - email
      AutoVerifiedAttributes:
        - email

  CognitoUserPoolClient:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      # 스테이지 기반으로 앱 클라이언트 이름 생성
      ClientName: ${self:custom.stage}-user-pool-client
      UserPoolId:
        Ref: CognitoUserPool
      ExplicitAuthFlows:
        - ADMIN_NO_SRP_AUTH
      GenerateSecret: false

# 생성된 User Pool의 ID 출력
Outputs:
  UserPoolId:
    Value:
      Ref: CognitoUserPool

  UserPoolClientId:
    Value:
      Ref: CognitoUserPoolClient

여기서 수행하는 작업을 간단히 살펴보겠습니다:

  • 커스텀 변수 ${self:custom.stage}를 사용해 User Pool(및 User Pool 앱 클라이언트)의 이름을 스테이지 기반으로 지정합니다.

  • UsernameAttributes를 이메일로 설정합니다. 이는 User Pool에 사용자가 이메일을 사용자명으로 로그인할 수 있도록 지시합니다.

  • S3 버킷과 마찬가지로, CloudFormation이 생성된 User Pool ID와 User Pool Client ID를 알려주도록 합니다. 이를 위해 Outputs: 블록을 마지막에 추가합니다.

리소스 추가하기

Change indicator serverless.yml에서 리소스를 참조해 보겠습니다. resources: 블록을 다음 코드로 교체하세요.

# 별도의 CloudFormation 템플릿으로 리소스 생성
resources:
  # DynamoDB
  - ${file(resources/dynamodb-table.yml)}
  # S3
  - ${file(resources/s3-bucket.yml)}
  # Cognito
  - ${file(resources/cognito-user-pool.yml)}

이제 Cognito Identity Pool을 구성하여 모든 것을 연결해 보겠습니다.