Para informes de errores:
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)}
Terminó con dos UserPools creados con el mismo nombre y uno con la función de activación adjunta, otro con políticas adjuntas y otras cosas que defino en cognito-user-pool
Problemas similares o dependientes:
"sin servidor": "1.30.3"
Tener el mismo problema. ¿Tiene curiosidad por saber cuándo se puede llegar a una resolución?
También tengo este problema y no puedo resolverlo siguiendo los ejemplos en los documentos u otros problemas cerrados
@ Ccastillo06 Pude corregir el problema al hacerlo ... (las partes en negrita son la pieza importante. Esto funcionó para mí incluso después de experimentar todos los problemas.
CognitoUserPoolMyUserPool:
Tipo: AWS :: Cognito :: UserPool
Propiedades:
UserPoolName: mypool _ $ { self: provider.stage } _auth_pool
Nombre de usuario Atributos:
- correo electrónico
Esquema:
- Nombre: given_name
AttributeDataType: String
Mutable: verdadero
Requerido: verdadero
- Nombre: family_name
AttributeDataType: String
Mutable: verdadero
Requerido: verdadero
- Nombre Correo Electronico
AttributeDataType: String
Mutable: falso
Requerido: verdadero
- Nombre: número de teléfono
AttributeDataType: String
Mutable: verdadero
Requerido: verdadero
AutoVerifiedAttributes:
- correo electrónico
postConfirmation:
manipulador: ..
tamaño de la memoria: ...
eventos:
- http:
camino: ...
método: poner
integración: lambda
cors: cierto
autorizador:
tipo: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
- cognitoUserPool:grupo: MyUserPooldisparador: PostConfirmation
¡¡Tu solución funcionó a las mil maravillas @robotlemons !! 🎉 ¡Muchas gracias por compartirlo!
La parte que fue realmente confusa para mí fue que los documentos llaman al CognitoUserPool
como MyUserPool
todo el tiempo, y yo estaba configurando UserPoolName: ${self:provider.stage}-user-pool
, así que pensé que al declarar el lambda , deberíamos estar haciendo:
- cognitoUserPool:
pool: ${self:provider.stage}-user-pool
trigger: PostConfirmation
Pensé que de esta manera estaba configurando el mismo nombre para ambos, pero la clave aquí es darle al atributo pool
el mismo valor que su CognitoUserPool, de ahí que los documentos lo establezcan como MyUserPool
.
Así que finalmente declaré mi grupo de usuarios en cognito-user-pool.yml
como:
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Y en serverless.yml
la lambda se declara como:
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
¡Espero que esto ayude a alguien más en el futuro!
¡Muchas gracias de nuevo por tu ayuda! 💯
@ Ccastillo06
Lo siento, estoy muy confundido y me encantaría recibir ayuda.
Así que en la declaración PostConfirmation, en la sección de eventos cognitoUserPool. ¿Cuál debería ser el valor de 'piscina'? Probé el nombre real del grupo de usuarios y sigue creando nuevos grupos de usuarios. También probé el valor directamente en 'Recursos' (en su caso, 'CognitoUserPoolMyUserPool').
Ahora, en su valor de 'grupo', dijo que ingresó 'MyUserPool' sin la parte CognitoUserPool, pero el nombre de mi recurso es diferente. Entonces, ¿cuál debería ser mi nombre? Probé el nombre completo y no funciona.
@ Studio2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
En este ejemplo, usaría lo que esté después de CognitoUserPool como valor de su grupo. En este caso, sería MyUserPool
@robotlemons ¡ Gracias por la pronta respuesta!
Entonces debería cambiar el nombre de mi recurso. Actualmente no lo tengo comenzando con CognitoUserPool. Actualmente solo se llama: MycompanyUserPool. Lo cambiaré a: CognitoUserPoolMyCompanyUserPool ... ¿Es correcto?
si
Enviado desde mi iPhone
El 11 de abril de 2019, a las 12:33 p.m., Studio2133 [email protected] escribió:
@robotlemons ¡ Gracias por la pronta respuesta!
Entonces debería cambiar el nombre de mi recurso. Actualmente no lo tengo comenzando con CognitoUserPool. Actualmente solo se llama: MycompanyUserPool. Lo cambiaré a: CognitoUserPoolMyCompanyUserPool ... ¿Es correcto?
-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub o silencia el hilo.
@ Studio2133 En su caso, debe hacer lo que dijo @robotlemons , simplemente agregue CognitoUserPool
antes del nombre de su grupo de usuarios actual MycompanyUserPool
.
Entonces, al final, debería tener: CognitoUserPoolMycompanyUserPool
para ese nombre de grupo.
Entonces, su definición de grupo de usuarios en cognito-user-pool.yml
debería ser:
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Y luego la definición del disparador lambda en serverless.yml
debería ser:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
He tenido esto funcionando bien para nosotros en nuestro último proyecto (llamando a otras lambdas y servicios de AWS usando el disparador PostConfirmation
) y no tuve ningún problema en absoluto.
Recuerde eliminar todos los grupos duplicados antes de crear los grupos fijos para que no haya nada confuso en el panel de control de AWS.
¡Espero que esto sea útil y resuelva el problema!
@ Studio2133
Cuando agrega un evento cognitoUserPool a una lambda, Serverless genera automáticamente un nuevo grupo de usuarios de Cognito y lo agrega a su plantilla de CloudFormation generada. El nombre de recurso lógico de CloudFormation de este grupo es CognitoUserPool {normalizedPoolId}, donde normalizedPoolId es el nombre que proporciona para el grupo en su evento cognitoUserPool. Este es el grupo al que se conectará el disparador. Para conectar el disparador a su propio grupo que declara en Recursos, puede aprovechar esta convención de nomenclatura para anular el grupo generado al agregar el evento cognitoUserPool. Para hacer esto, necesitas usar CognitoUserPool {normalizedPoolId} como el nombre de recurso lógico de tu grupo en tu sección de Recursos. Esto hará que Serverless use este grupo para conectar su disparador, en lugar de generar uno nuevo.
En este artículo se pueden encontrar más detalles sobre este enfoque.
Comentario más útil
¡¡Tu solución funcionó a las mil maravillas @robotlemons !! 🎉 ¡Muchas gracias por compartirlo!
La parte que fue realmente confusa para mí fue que los documentos llaman al
CognitoUserPool
comoMyUserPool
todo el tiempo, y yo estaba configurandoUserPoolName: ${self:provider.stage}-user-pool
, así que pensé que al declarar el lambda , deberíamos estar haciendo:Pensé que de esta manera estaba configurando el mismo nombre para ambos, pero la clave aquí es darle al atributo
pool
el mismo valor que su CognitoUserPool, de ahí que los documentos lo establezcan comoMyUserPool
.Así que finalmente declaré mi grupo de usuarios en
cognito-user-pool.yml
como:Y en
serverless.yml
la lambda se declara como:¡Espero que esto ayude a alguien más en el futuro!
¡Muchas gracias de nuevo por tu ayuda! 💯