Pour les rapports de bogue:
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)}
Il finit par créer deux UserPools avec le même nom et un avec une fonction de déclenchement attachée, l'autre avec des politiques attachées et d'autres choses que je définis dans cognito-user-pool
Problèmes similaires ou dépendants:
"sans serveur": "1.30.3"
Avoir le même problème. Curieux de savoir quand une résolution peut être trouvée?
J'ai également ce problème et je ne parviens pas à le résoudre en suivant les exemples dans la documentation ou d'autres problèmes fermés
@ Ccastillo06 J'ai pu corriger le problème en le faisant ... (les parties en gras sont la pièce importante. Cela a fonctionné pour moi même après avoir rencontré tous les problèmes.
CognitoUserPoolMyUserPool:
Type: AWS :: Cognito :: UserPool
Propriétés:
UserPoolName: mypool _ $ { self: provider.stage } _auth_pool
Nom d'utilisateur
- email
Schéma:
- Nom: nom_donné
AttributeDataType: Chaîne
Mutable: vrai
Obligatoire: vrai
- Nom: nom_famille
AttributeDataType: Chaîne
Mutable: vrai
Obligatoire: vrai
- Nom: email
AttributeDataType: Chaîne
Mutable: faux
Obligatoire: vrai
- Nom: phone_number
AttributeDataType: Chaîne
Mutable: vrai
Obligatoire: vrai
Attributs AutoVerified:
- email
postConfirmation:
gestionnaire: ..
taille mémoire: ...
événements:
- http:
chemin: ...
méthode: mettre
intégration: lambda
cors: vrai
autorisateur:
type: COGNITO_USER_POOLS
authorizerId:
Réf: ApiGatewayAuthorizer
- cognitoUserPool:pool: MyUserPooldéclencheur: PostConfirmation
Votre solution a fonctionné comme un charme @robotlemons !! 🎉 Merci beaucoup de l'avoir partagé!
La partie qui était vraiment déroutante pour moi était que les documents appellent le CognitoUserPool
comme MyUserPool
tout le temps, et je définissais UserPoolName: ${self:provider.stage}-user-pool
, alors j'ai pensé que lors de la déclaration du lambda , nous devrions faire:
- cognitoUserPool:
pool: ${self:provider.stage}-user-pool
trigger: PostConfirmation
Je pensais que de cette façon, je définissais le même nom pour les deux, mais la clé ici est de donner à l'attribut pool
la même valeur que votre CognitoUserPool, d'où la raison pour laquelle la documentation le définit comme MyUserPool
.
Je viens donc de déclarer mon pool d'utilisateurs dans cognito-user-pool.yml
comme:
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Et dans serverless.yml
le lambda est déclaré comme:
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
J'espère que cela aidera quelqu'un d'autre à l'avenir!
Un grand merci encore pour votre aide! 💯
@ Ccastillo06
Je suis désolé, je suis super confus et j'aimerais beaucoup d'aide.
Donc, dans la déclaration PostConfirmation, dans la section des événements cognitoUserPool. Quelle devrait être la valeur de «pool»? J'ai essayé le nom réel du pool d'utilisateurs et il continue de créer de nouveaux pools d'utilisateurs. J'ai également essayé la valeur directement sous «Resources» (dans votre cas «CognitoUserPoolMyUserPool»).
Maintenant, dans la valeur de votre «pool», vous avez dit que vous saisissez «MyUserPool» sans la partie CognitoUserPool, mais mon nom de ressource est différent. Alors, quel doit être mon nom? J'ai essayé le nom complet et cela ne fonctionne pas.
@ Studio2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Dans cet exemple, vous utiliseriez ce qui se trouve après CognitoUserPool comme valeur de pool. Dans ce cas, ce serait MyUserPool
@robotlemons Merci pour la réponse rapide!
Je devrais donc renommer ma ressource. Actuellement, je ne l'ai pas démarré avec CognitoUserPool. Actuellement, il s'appelle simplement: MycompanyUserPool. Je vais le changer en: CognitoUserPoolMyCompanyUserPool ... Est-ce correct?
Oui
Envoyé de mon iPhone
Le 11 avril 2019 à 12 h 33, Studio2133 [email protected] a écrit:
@robotlemons Merci pour la réponse rapide!
Je devrais donc renommer ma ressource. Actuellement, je ne l'ai pas démarré avec CognitoUserPool. Actuellement, il s'appelle simplement: MycompanyUserPool. Je vais le changer en: CognitoUserPoolMyCompanyUserPool ... Est-ce correct?
-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub ou désactivez le fil de discussion.
@ Studio2133 Dans votre cas, vous devriez faire ce que @robotlemons a dit, ajoutez simplement CognitoUserPool
avant le nom de votre pool d'utilisateurs réel MycompanyUserPool
.
Donc, à la fin, vous devriez avoir: CognitoUserPoolMycompanyUserPool
pour ce nom de pool.
La définition de votre pool d'utilisateurs dans cognito-user-pool.yml
doit donc être:
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Et puis la définition du déclencheur lambda dans serverless.yml
devrait être:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
Cela fonctionnait bien pour nous dans notre dernier projet (appelant d'autres lambdas et services à partir d'AWS à l'aide du déclencheur PostConfirmation
) et je n'ai eu aucun problème.
N'oubliez pas de supprimer chaque pool dupliqué avant de créer les pools fixes afin qu'il n'y ait rien de déroutant dans le panneau de configuration AWS.
J'espère que cela est utile et résout le problème!
@ Studio2133
Lorsque vous ajoutez un événement cognitoUserPool à un lambda, Serverless génère automatiquement un nouveau pool d'utilisateurs Cognito et l'ajoute à votre modèle CloudFormation généré. Le nom de ressource logique CloudFormation de ce pool est CognitoUserPool {normalizedPoolId}, où normalizedPoolId est le nom que vous indiquez pour le pool dans votre événement cognitoUserPool. Il s'agit du pool auquel le déclencheur sera connecté. Afin de connecter le déclencheur à votre propre pool que vous déclarez dans Resources, vous pouvez profiter de cette convention de dénomination pour remplacer le pool généré en ajoutant l'événement cognitoUserPool. Pour ce faire, vous devez utiliser CognitoUserPool {normalizedPoolId} comme nom de ressource logique de votre pool dans votre section Ressources. Cela obligera Serverless à utiliser ce pool pour connecter votre déclencheur, au lieu d'en générer un nouveau.
Plus de détails sur cette approche peuvent être trouvés dans cet article.
Commentaire le plus utile
Votre solution a fonctionné comme un charme @robotlemons !! 🎉 Merci beaucoup de l'avoir partagé!
La partie qui était vraiment déroutante pour moi était que les documents appellent le
CognitoUserPool
commeMyUserPool
tout le temps, et je définissaisUserPoolName: ${self:provider.stage}-user-pool
, alors j'ai pensé que lors de la déclaration du lambda , nous devrions faire:Je pensais que de cette façon, je définissais le même nom pour les deux, mais la clé ici est de donner à l'attribut
pool
la même valeur que votre CognitoUserPool, d'où la raison pour laquelle la documentation le définit commeMyUserPool
.Je viens donc de déclarer mon pool d'utilisateurs dans
cognito-user-pool.yml
comme:Et dans
serverless.yml
le lambda est déclaré comme:J'espère que cela aidera quelqu'un d'autre à l'avenir!
Un grand merci encore pour votre aide! 💯