Für Fehlerberichte:
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)}
Am Ende wurden zwei UserPools mit demselben Namen und einer mit angehängter Triggerfunktion erstellt, andere mit angehängten Richtlinien und anderen Dingen, die ich im cognito-user-pool definiere
Ähnliche oder abhängige Probleme:
"serverlos": "1.30.3"
Das gleiche Problem haben. Neugierig, wann eine Lösung gefunden werden kann?
Ich habe auch dieses Problem und kann es nicht lösen, indem ich den Beispielen in den Dokumenten oder anderen geschlossenen Problemen folge
@ Ccastillo06 Ich konnte das Problem dadurch beheben ... (Fettgedruckte Teile sind das wichtige Element. Dies hat bei mir funktioniert, auch nachdem ich alle Probleme hatte.
CognitoUserPoolMyUserPool:
Typ: AWS :: Cognito :: UserPool
Eigenschaften:
UserPoolName: mypool _ $ { self: provider.stage } _auth_pool
BenutzernameAttribute:
- Email
Schema:
- Name: Vorname
AttributeDataType: String
Veränderlich: wahr
Erforderlich: wahr
- Name: Familienname
AttributeDataType: String
Veränderlich: wahr
Erforderlich: wahr
- Name: E-Mail
AttributeDataType: String
Veränderlich: falsch
Erforderlich: wahr
- Name: Telefonnummer
AttributeDataType: String
Veränderlich: wahr
Erforderlich: wahr
AutoVerifiedAttributes:
- Email
Nachbestätigung:
Handler: ..
Speichergröße: ...
Veranstaltungen:
- http:
Pfad: ...
Methode: setzen
Integration: Lambda
cors: wahr
Autorisierer:
Typ: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
- cognitoUserPool:Pool: MyUserPoolAuslöser: PostConfirmation
Ihre Lösung hat wie ein Zauber @robotlemons funktioniert !! 🎉 Vielen Dank für das Teilen!
Der Teil, der für mich wirklich verwirrend war, war, dass die Dokumente die CognitoUserPool
ganze Zeit als MyUserPool
und ich UserPoolName: ${self:provider.stage}-user-pool
einstellte, also dachte ich das, als ich das Lambda deklarierte sollten wir tun:
- cognitoUserPool:
pool: ${self:provider.stage}-user-pool
trigger: PostConfirmation
Ich dachte, dass ich auf diese Weise für beide den gleichen Namen festgelegt habe, aber der Schlüssel hier ist, dem Attribut pool
den gleichen Wert wie Ihrem CognitoUserPool zu geben, weshalb die Dokumente ihn als MyUserPool
festlegen.
Also habe ich meinen Benutzerpool in cognito-user-pool.yml
wie folgt deklariert:
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Und in serverless.yml
das Lambda wie folgt deklariert:
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
Hoffe das hilft jemand anderem in der Zukunft!
Nochmals vielen Dank für Ihre Hilfe! 💯
@ Ccastillo06
Es tut mir leid, ich bin super verwirrt und würde gerne Hilfe bekommen.
Also in der PostConfirmation-Deklaration im Abschnitt cognitoUserPool-Ereignisse. Was sollte der Wert für "Pool" sein? Ich habe den tatsächlichen Namen des Benutzerpools ausprobiert und er erstellt ständig neue Benutzerpools. Ich habe den Wert auch direkt unter 'Ressourcen' ausprobiert (in Ihrem Fall 'CognitoUserPoolMyUserPool').
Jetzt haben Sie in Ihrem 'Pool'-Wert angegeben, dass Sie' MyUserPool 'ohne den CognitoUserPool-Teil eingegeben haben, aber mein Ressourcenname ist anders. Wie sollte mein Name sein? Ich habe den vollständigen Namen ausprobiert und das funktioniert nicht.
@ Studio2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
In diesem Beispiel würden Sie alles verwenden, was nach CognitoUserPool als Poolwert steht. In diesem Fall wäre es MyUserPool
@robotlemons Danke für die prompte Antwort!
Also sollte ich meine Ressource umbenennen. Derzeit habe ich es nicht mit CognitoUserPool beginnen. Derzeit heißt es nur: MycompanyUserPool. Ich werde es ändern in: CognitoUserPoolMyCompanyUserPool ... Ist das richtig?
Ja
von meinem Iphone gesendet
Am 11. April 2019, um 12:33 Uhr, schrieb Studio2133 [email protected] :
@robotlemons Danke für die prompte Antwort!
Also sollte ich meine Ressource umbenennen. Derzeit habe ich es nicht mit CognitoUserPool beginnen. Derzeit heißt es nur: MycompanyUserPool. Ich werde es ändern in: CognitoUserPoolMyCompanyUserPool ... Ist das richtig?
- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an oder schalten Sie den Thread stumm.
@ Studio2133 In Ihrem Fall sollten Sie das tun, was @robotlemons gesagt hat. CognitoUserPool
vor dem Namen Ihres tatsächlichen Benutzerpools MycompanyUserPool
.
Am Ende sollten Sie also haben: CognitoUserPoolMycompanyUserPool
für diesen Poolnamen.
Ihre Benutzerpooldefinition in cognito-user-pool.yml
sollte also lauten:
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Und dann sollte die Lambda-Trigger-Definition in serverless.yml
lauten:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
Ich hatte dies in unserem neuesten Projekt (das Aufrufen anderer Lambdas und Dienste von AWS mit dem PostConfirmation
-Auslöser) in Ordnung und hatte überhaupt keine Probleme.
Denken Sie daran, jeden duplizierten Pool zu entfernen, bevor Sie die festen Pools erstellen, damit das AWS-Kontrollfeld keine Verwirrung stiftet.
Hoffe das ist nützlich und löst das Problem!
@ Studio2133
Wenn Sie einem Lambda ein cognitoUserPool-Ereignis hinzufügen, generiert Serverless automatisch einen neuen Cognito-Benutzerpool und fügt ihn Ihrer generierten CloudFormation-Vorlage hinzu. Der logische CloudFormation-Ressourcenname dieses Pools lautet CognitoUserPool {normalizedPoolId}, wobei normalizedPoolId der Name ist, den Sie für den Pool in Ihrem cognitoUserPool-Ereignis angeben. Dies ist der Pool, mit dem der Trigger verbunden wird. Um den Trigger mit Ihrem eigenen Pool zu verbinden, den Sie in Resources deklarieren, können Sie diese Namenskonvention nutzen, um den durch das Hinzufügen des Ereignisses cognitoUserPool generierten Pool zu überschreiben. Dazu müssen Sie CognitoUserPool {normalizedPoolId} als logischen Ressourcennamen Ihres Pools in Ihrem Ressourcenbereich verwenden. Dies führt dazu, dass Serverless diesen Pool verwendet, um Ihren Trigger zu verbinden, anstatt einen neuen zu generieren.
Weitere Details zu diesem Ansatz finden Sie in diesem Artikel.
Hilfreichster Kommentar
Ihre Lösung hat wie ein Zauber @robotlemons funktioniert !! 🎉 Vielen Dank für das Teilen!
Der Teil, der für mich wirklich verwirrend war, war, dass die Dokumente die
CognitoUserPool
ganze Zeit alsMyUserPool
und ichUserPoolName: ${self:provider.stage}-user-pool
einstellte, also dachte ich das, als ich das Lambda deklarierte sollten wir tun:Ich dachte, dass ich auf diese Weise für beide den gleichen Namen festgelegt habe, aber der Schlüssel hier ist, dem Attribut
pool
den gleichen Wert wie Ihrem CognitoUserPool zu geben, weshalb die Dokumente ihn alsMyUserPool
festlegen.Also habe ich meinen Benutzerpool in
cognito-user-pool.yml
wie folgt deklariert:Und in
serverless.yml
das Lambda wie folgt deklariert:Hoffe das hilft jemand anderem in der Zukunft!
Nochmals vielen Dank für Ihre Hilfe! 💯