Serverless: λ¦¬μ†ŒμŠ€μ™€ ν•¨μˆ˜κ°€ λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ •μ˜ 된 경우 쀑볡 Cognito μ‚¬μš©μž ν’€ 생성

에 λ§Œλ“  2018λ…„ 09μ›” 11일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: serverless/serverless

이것은 (버그 μ‹ κ³ )μž…λ‹ˆλ‹€

기술

버그 μ‹ κ³  :
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μ—μ„œ μ •μ˜ν•œ λ‹€λ₯Έ 것듀과 ν•¨κ»˜ μƒμ„±λ©λ‹ˆλ‹€.

μœ μ‚¬ν•˜κ±°λ‚˜ 쒅속 된 문제 :

  • # 4207

μΆ”κ°€ 자료

"μ„œλ²„λ¦¬μŠ€": "1.30.3"

bug caaws-event-cognito

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ€ 맀λ ₯ @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

이것이 μ•žμœΌλ‘œ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€!

도와 μ£Όμ…”μ„œ λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! πŸ’―

λͺ¨λ“  10 λŒ“κΈ€

같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ–Έμ œ 해결책에 도달 ν•  수 μžˆλŠ”μ§€ κΆκΈˆν•˜μ‹­λ‹ˆκΉŒ?

λ‚˜λŠ” λ˜ν•œμ΄ λ¬Έμ œκ°€ 있으며 λ¬Έμ„œμ˜ 예 λ˜λŠ” 기타 λ‹«νžŒ 문제λ₯Ό 따라 ν•΄κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

@ 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}λ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ μ„œλ²„λ¦¬μŠ€λŠ” μƒˆ 풀을 μƒμ„±ν•˜λŠ” λŒ€μ‹ μ΄ 풀을 μ‚¬μš©ν•˜μ—¬ 트리거λ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€.

이 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 이 κΈ°μ‚¬μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰