λ²κ·Έ μ κ³ :
cognito-user-pool.yml
Resources:
CognitoUserPool:
Type: AWS::Cognito::UserPool
Properties:
# Generate a name based on the stage
UserPoolName: ${self:provider.stage}MyUserPool
serverless.yml
functions:
preSignUp:
handler: presignup.handler
events:
- cognitoUserPool:
pool: ${self:provider.stage}MyUserPool
trigger: PreSignUp
resources:
- ${file(resources/cognito-user-pool.yml)}
λμΌν μ΄λ¦μ κ°μ§ λ κ°μ UserPoolsμ μ°κ²°λ νΈλ¦¬κ±° κΈ°λ₯μ΄μλ νλ, λ€λ₯Έ νλλ μ°κ²°λ μ μ± λ° λ΄κ° cognito-user-poolμμ μ μν λ€λ₯Έ κ²λ€κ³Ό ν¨κ» μμ±λ©λλ€.
μ μ¬νκ±°λ μ’ μ λ λ¬Έμ :
"μλ²λ¦¬μ€": "1.30.3"
κ°μ λ¬Έμ κ° μμ΅λλ€. μΈμ ν΄κ²°μ± μ λλ¬ ν μ μλμ§ κΆκΈνμλκΉ?
λλ λνμ΄ λ¬Έμ κ° μμΌλ©° λ¬Έμμ μ λλ κΈ°ν λ«ν λ¬Έμ λ₯Ό λ°λΌ ν΄κ²°ν μ μμ΅λλ€.
@ Ccastillo06 κ·Έλ κ²ν¨μΌλ‘μ¨ λ¬Έμ λ₯Ό ν΄κ²°ν μμμμ΅λλ€ ... (κ΅΅μ λΆλΆμ΄ μ€μν λΆλΆμ λλ€. λͺ¨λ λ¬Έμ λ₯Ό
CognitoUserPoolMyUserPool :
μ ν : AWS :: Cognito :: UserPool
μμ± :
UserPoolName : mypool _ $ { self : provider.stage } _auth_pool
UsernameAttributes :
-μ΄λ©μΌ
κ°μ:
-μ΄λ¦ : given_name
AttributeDataType : λ¬Έμμ΄
λ³κ²½ κ°λ₯ : μ°Έ
νμ : true
-μ΄λ¦ : family_name
AttributeDataType : λ¬Έμμ΄
λ³κ²½ κ°λ₯ : μ°Έ
νμ : true
-μ΄λ¦ : μ΄λ©μΌ
AttributeDataType : λ¬Έμμ΄
λ³κ²½ κ°λ₯ : κ±°μ§
νμ : true
-μ΄λ¦ : phone_number
AttributeDataType : λ¬Έμμ΄
λ³κ²½ κ°λ₯ : μ°Έ
νμ : true
AutoVerifiedAttributes :
-μ΄λ©μΌ
postConfirmation :
νΈλ€λ¬ : ..
memorySize : ...
μ΄λ²€νΈ :
-http :
κ²½λ‘ : ...
λ°©λ² : λ£μ΄
ν΅ν© : λλ€
cors : μ°Έ
κΆν λΆ μ¬μ :
μ ν : COGNITO_USER_POOLS
authorizerId :
μ°Έμ‘° : ApiGatewayAuthorizer
-cognitoUserPool :ν : MyUserPoolνΈλ¦¬κ±° : PostConfirmation
κ·νμ μ루μ μ 맀λ ₯ @robotlemons μ²λΌ μλνμ΅λλ€! π 곡μ ν΄ μ£Όμ μ λλ¨ν κ°μ¬ν©λλ€!
μ μκ² μ λ§ νΌλ μ€λ¬μ λ λΆλΆμ λ¬Έμκ° νμ CognitoUserPool
λ₯Ό MyUserPool
λ‘ λΆλ₯΄κ³ μ λ UserPoolName: ${self:provider.stage}-user-pool
νκ³ μμκΈ° λλ¬Έμ λλ€λ₯Ό μ μΈ ν λ , μ°λ¦¬λ λ€μμ μνν΄μΌν©λλ€.
- cognitoUserPool:
pool: ${self:provider.stage}-user-pool
trigger: PostConfirmation
λλ μ΄λ° μμΌλ‘ λ κ°μ§ λͺ¨λμ λν΄ λμΌν μ΄λ¦μ μ€μ νκ³ μλ€κ³ μκ°νμ§λ§ μ¬κΈ°μ ν΅μ¬μ pool
μμ±μ CognitoUserPoolκ³Ό λμΌν κ°μ λΆμ¬νλ κ²μ΄λ―λ‘ λ¬Έμκ° MyUserPool
λ‘ μ€μ ν μ΄μ λ 무μμ
λκΉ?
κ·Έλμ λ§μΉ¨λ΄ cognito-user-pool.yml
μμ λ΄ μ¬μ©μ νμ λ€μκ³Ό κ°μ΄ μ μΈνμ΅λλ€.
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
κ·Έλ¦¬κ³ serverless.yml
μμ λλ€λ λ€μκ³Ό κ°μ΄ μ μΈλ©λλ€.
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MyUserPool // Notice that this one is the declared name of my pool CognitoUserPoolMyUserPool but without the CognitoUserPool part.
trigger: PostConfirmation
μ΄κ²μ΄ μμΌλ‘ λ€λ₯Έ μ¬λμκ² λμμ΄λκΈ°λ₯Ό λ°λλλ€!
λμ μ£Όμ μ λ€μ νλ² κ°μ¬λ립λλ€! π―
λΏ‘ λΉ΅λ¨
μ£μ‘ν©λλ€. λ§€μ° νΌλμ€λ½κ³ λμμ΄ νμν©λλ€.
λ°λΌμ PostConfirmation μ μΈμμ cognitoUserPool μ΄λ²€νΈ μΉμ μ μμ΅λλ€. 'ν'μ κ°μΉλ 무μμ λκΉ? μ¬μ©μ νμ μ€μ μ΄λ¦μ μλν΄ λ³΄μκ³ μ μ¬μ©μ νμ κ³μ μμ±ν©λλ€. λν 'Resources'(κ·νμ κ²½μ° 'CognitoUserPoolMyUserPool')μμ μ§μ κ°μ μλνμ΅λλ€.
μ΄μ 'ν'κ°μμ CognitoUserPool λΆλΆμμ΄ 'MyUserPool'μ μ λ ₯νλ€κ³ λ§νμ§λ§ λ΄ λ¦¬μμ€ μ΄λ¦μ΄ λ€λ¦ λλ€. κ·ΈλΌ λ΄ μ΄λ¦μ λμΌ? λλ μ 체 μ΄λ¦μ μλνμ§λ§ μλνμ§ μμ΅λλ€.
λΏ‘ λΉ΅λ¨
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
μ΄ μμμλ CognitoUserPool λ€μμλ κ²μ ν κ°μΌλ‘ μ¬μ©ν©λλ€. μ΄ κ²½μ° MyUserPoolμ΄λ©λλ€.
@robotlemons μ μν μλ΅μ κ°μ¬λ립λλ€!
λ°λΌμ 리μμ€ μ΄λ¦μ λ³κ²½ν΄μΌν©λλ€. νμ¬λ CognitoUserPoolλ‘ μμνμ§ μμ΅λλ€. νμ¬ μ΄λ¦μ MycompanyUserPoolμ λλ€. λ€μκ³Ό κ°μ΄ λ³κ²½νκ² μ΅λλ€. CognitoUserPoolMyCompanyUserPool ... λ§μ΅λκΉ?
μ
λ΄ iPhoneμμ 보λ
2019 λ 4 μ 11 μΌ μ€ν 12μ 33 λΆμ Studio2133 [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@robotlemons μ μν μλ΅μ κ°μ¬λ립λλ€!
λ°λΌμ 리μμ€ μ΄λ¦μ λ³κ²½ν΄μΌν©λλ€. νμ¬λ CognitoUserPoolλ‘ μμνμ§ μμ΅λλ€. νμ¬ μ΄λ¦μ MycompanyUserPoolμ λλ€. λ€μκ³Ό κ°μ΄ λ³κ²½νκ² μ΅λλ€. CognitoUserPoolMyCompanyUserPool ... λ§μ΅λκΉ?
β
λΉμ μ΄ μΈκΈ λμκΈ° λλ¬Έμ μ΄κ²μ λ°κ³ μμ΅λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ 보거λ μ€λ λλ₯Ό μμκ±°νμμμ€.
@ Studio2133 κ·νμ κ²½μ° @robotlemonsκ° λ§νλλ‘ν΄μΌν©λλ€. μ€μ μ¬μ©μ ν MycompanyUserPool
μμ CognitoUserPool
λ₯Ό μΆκ°νλ©΄λ©λλ€.
λ°λΌμ κ²°κ΅ ν΄λΉ ν μ΄λ¦μ λν΄ CognitoUserPoolMycompanyUserPool
κ° μμ΄μΌν©λλ€.
λ°λΌμ cognito-user-pool.yml
μ μ¬μ©μ ν μ μλ λ€μκ³Ό κ°μμΌν©λλ€.
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
κ·Έλ¦¬κ³ serverless.yml
μ λλ€ νΈλ¦¬κ±° μ μλ λ€μκ³Ό κ°μμΌν©λλ€.
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
μ΅μ νλ‘μ νΈ ( PostConfirmation
νΈλ¦¬κ±°λ₯Ό μ¬μ©νμ¬ AWSμμ λ€λ₯Έ λλ€ λ° μλΉμ€ νΈμΆ)μμμ΄ μμ
μ΄ μ λλ‘ μλνμΌλ©° μ ν λ¬Έμ κ° μμμ΅λλ€.
κ³ μ νμ μμ±νκΈ° μ μ 볡μ λ λͺ¨λ νμ μ κ±°νμ¬ AWS μ μ΄νμμ νΌλμ μΌμΌν€μ§ μλλ‘νμμμ€.
μ΄κ²μ΄ μ μ©νκ³ λ¬Έμ κ° ν΄κ²°λκΈ°λ₯Ό λ°λλλ€!
λΏ‘ λΉ΅λ¨
cognitoUserPool μ΄λ²€νΈλ₯Ό λλ€μ μΆκ°νλ©΄ μλ²λ¦¬μ€λ μλμΌλ‘ μ Cognito μ¬μ©μ νμ μμ±νκ³ μμ± λ CloudFormation ν
νλ¦Ώμ μΆκ°ν©λλ€. μ΄ νμ CloudFormation λ
Όλ¦¬μ 리μμ€ μ΄λ¦μ CognitoUserPool {normalizedPoolId}μ΄λ©°, μ¬κΈ°μ normalizedPoolIdλ cognitoUserPool μ΄λ²€νΈμμ νμ μ 곡νλ μ΄λ¦μ
λλ€. νΈλ¦¬κ±°κ° μ°κ²°λ νμ
λλ€. 리μμ€μμ μ μΈ ν μ체 νμ νΈλ¦¬κ±°λ₯Ό μ°κ²°νλ €λ©΄μ΄ λͺ
λͺ
κ·μΉμ νμ©νμ¬ cognitoUserPool μ΄λ²€νΈλ₯Ό μΆκ°νμ¬ μμ± λ νμ μ¬μ μ ν μ μμ΅λλ€. μ΄λ κ²νλ €λ©΄ 리μμ€ μΉμ
μμ νμ λ
Όλ¦¬μ 리μμ€ μ΄λ¦μΌλ‘ CognitoUserPool {normalizedPoolId}λ₯Ό μ¬μ©ν΄μΌν©λλ€. μ΄λ κ²νλ©΄ μλ²λ¦¬μ€λ μ νμ μμ±νλ λμ μ΄ νμ μ¬μ©νμ¬ νΈλ¦¬κ±°λ₯Ό μ°κ²°ν©λλ€.
μ΄ λ°©λ²μ λν μμΈν λ΄μ©μ μ΄ κΈ°μ¬μμ νμΈν μ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
κ·νμ μ루μ μ 맀λ ₯ @robotlemons μ²λΌ μλνμ΅λλ€! π 곡μ ν΄ μ£Όμ μ λλ¨ν κ°μ¬ν©λλ€!
μ μκ² μ λ§ νΌλ μ€λ¬μ λ λΆλΆμ λ¬Έμκ° νμ
CognitoUserPool
λ₯ΌMyUserPool
λ‘ λΆλ₯΄κ³ μ λUserPoolName: ${self:provider.stage}-user-pool
νκ³ μμκΈ° λλ¬Έμ λλ€λ₯Ό μ μΈ ν λ , μ°λ¦¬λ λ€μμ μνν΄μΌν©λλ€.λλ μ΄λ° μμΌλ‘ λ κ°μ§ λͺ¨λμ λν΄ λμΌν μ΄λ¦μ μ€μ νκ³ μλ€κ³ μκ°νμ§λ§ μ¬κΈ°μ ν΅μ¬μ
pool
μμ±μ CognitoUserPoolκ³Ό λμΌν κ°μ λΆμ¬νλ κ²μ΄λ―λ‘ λ¬Έμκ°MyUserPool
λ‘ μ€μ ν μ΄μ λ 무μμ λκΉ?κ·Έλμ λ§μΉ¨λ΄
cognito-user-pool.yml
μμ λ΄ μ¬μ©μ νμ λ€μκ³Ό κ°μ΄ μ μΈνμ΅λλ€.그리κ³
serverless.yml
μμ λλ€λ λ€μκ³Ό κ°μ΄ μ μΈλ©λλ€.μ΄κ²μ΄ μμΌλ‘ λ€λ₯Έ μ¬λμκ² λμμ΄λκΈ°λ₯Ό λ°λλλ€!
λμ μ£Όμ μ λ€μ νλ² κ°μ¬λ립λλ€! π―