Для отчетов об ошибках:
когнито-пользователь-пул.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 с тем же именем и один с присоединенной функцией триггера, другой с присоединенными политиками и другими вещами, которые я определяю в когнитивном пуле пользователей.
Похожие или зависимые вопросы:
"serverless": "1.30.3"
Имея ту же проблему. Интересно, когда можно будет достичь разрешения?
У меня тоже есть эта проблема, и я не могу ее решить, следуя примерам в документации или другим закрытым вопросам.
@ Ccastillo06 Я смог исправить проблему, сделав это ... (выделенные жирным шрифтом части - важная часть. Это сработало для меня даже после того, как у меня возникли все проблемы.
CognitoUserPoolMyUserPool:
Тип: AWS :: Cognito :: UserPool
Свойства:
UserPoolName: mypool _ $ { self: provider.stage } _auth_pool
Атрибуты имени пользователя:
- Эл. адрес
Схема:
- Имя: given_name
AttributeDataType: String
Мутабельный: правда
Обязательно: true
- Имя: family_name
AttributeDataType: String
Мутабельный: правда
Обязательно: true
- Имя: электронная почта
AttributeDataType: String
Изменяемый: ложь
Обязательно: true
- Имя: phone_number
AttributeDataType: String
Мутабельный: правда
Обязательно: true
AutoVerifiedAttributes:
- Эл. адрес
postConfirmation:
обработчик: ..
объем памяти: ...
События:
- http:
путь: ...
метод: положить
интеграция: лямбда
корс: правда
авторизатор:
тип: 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
Надеюсь, это поможет кому-то еще в будущем!
Еще раз большое спасибо за вашу помощь! 💯
@ Ccastillo06
Извините, я очень запутался и хотел бы получить помощь.
Итак, в объявлении PostConfirmation в разделе событий cognitoUserPool. Каким должно быть значение «пул»? Я пробовал настоящее имя пользовательского пула, и он продолжает создавать новые пользовательские пулы. Я также пробовал значение прямо в разделе «Ресурсы» (в вашем случае «CognitoUserPoolMyUserPool»).
Теперь в вашем значении «пул» вы сказали, что вводите «MyUserPool» без части CognitoUserPool, но мое имя ресурса другое. Так как меня зовут? Я пробовал использовать полное имя, но это не сработало.
@ Studio2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
В этом примере вы должны использовать все, что находится после CognitoUserPool, в качестве значения пула. В этом случае это будет MyUserPool
@robotlemons Спасибо за оперативный ответ!
Поэтому я должен переименовать свой ресурс. В настоящее время у меня его нет, начиная с CognitoUserPool. В настоящее время он называется просто MycompanyUserPool. Я поменяю его на: CognitoUserPoolMyCompanyUserPool ... Это правильно?
да
отправлено из моего Айфона
11 апреля 2019 г. в 12:33 Studio2133 [email protected] написал:
@robotlemons Спасибо за оперативный ответ!
Поэтому я должен переименовать свой ресурс. В настоящее время у меня его нет, начиная с CognitoUserPool. В настоящее время он называется просто MycompanyUserPool. Я поменяю его на: CognitoUserPoolMyCompanyUserPool ... Это правильно?
-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.
@ Studio2133 В вашем случае вы должны сделать то, что сказал @robotlemons , просто добавьте CognitoUserPool
перед именем вашего фактического пользовательского пула MycompanyUserPool
.
Итак, в итоге у вас должно быть: 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
У меня это отлично работало в нашем последнем проекте (вызов других лямбда-выражений и сервисов из AWS с использованием триггера PostConfirmation
), и вообще не было никаких проблем.
Не забудьте удалить каждый дублированный пул перед созданием фиксированных пулов, чтобы в панели управления AWS не было ничего запутанного.
Надеюсь, это полезно и решит проблему!
@ Studio2133
Когда вы добавляете событиеognitoUserPool в лямбда-выражение, Serverless автоматически создает новый пул пользователей Cognito и добавляет его в созданный вами шаблон CloudFormation. Имя логического ресурса CloudFormation для этого пула - CognitoUserPool {normalizedPoolId}, где normalizedPoolId - это имя, которое вы указываете для пула в событииognitoUserPool. Это пул, к которому будет подключен триггер. Чтобы подключить триггер к вашему собственному пулу, который вы объявляете в Ресурсах, вы можете воспользоваться этим соглашением об именовании, чтобы переопределить пул, созданный путем добавления события cognitoUserPool. Для этого вам необходимо использовать CognitoUserPool {normalizedPoolId} в качестве логического имени ресурса вашего пула в разделе ресурсов. Это приведет к тому, что Serverless будет использовать этот пул для подключения вашего триггера вместо создания нового.
Подробнее об этом подходе можно прочитать в этой статье.
Самый полезный комментарий
Ваше решение сработало как шарм @robotlemons !! 🎉 Большое спасибо, что поделились этим!
Что действительно сбивало меня с толку, так это то, что документы все время вызывают
CognitoUserPool
какMyUserPool
, а я устанавливалUserPoolName: ${self:provider.stage}-user-pool
, поэтому я подумал, что при объявлении лямбда , мы должны делать:Я думал, что таким образом я установил одно и то же имя для обоих, но ключ здесь состоит в том, чтобы присвоить атрибуту
pool
то же значение, что и вашему CognitoUserPool, поэтому в документации он установлен какMyUserPool
.Итак, я наконец только что объявил свой пул пользователей в
cognito-user-pool.yml
как:А в
serverless.yml
лямбда объявлена как:Надеюсь, это поможет кому-то еще в будущем!
Еще раз большое спасибо за вашу помощь! 💯