Para relatórios de bug:
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)}
Ele acabou com a criação de dois UserPools com o mesmo nome e um com função de gatilho anexado, outro com políticas anexadas e outras coisas que eu defino no cognito-user-pool
Problemas semelhantes ou dependentes:
"sem servidor": "1.30.3"
Tendo o mesmo problema. Curioso para saber quando uma resolução pode ser alcançada?
Também estou tendo esse problema e não consigo resolvê-lo seguindo os exemplos nos documentos ou outros problemas fechados
@ Ccastillo06 Consegui corrigir o problema ao fazer isso ... (as partes em negrito são a parte importante. Isso funcionou para mim mesmo depois de estar enfrentando todos os problemas.
CognitoUserPoolMyUserPool:
Digite: AWS :: Cognito :: UserPool
Propriedades:
UserPoolName: mypool _ $ { self: provider.stage } _auth_pool
Atributos de usuário:
- o email
Esquema:
- Nome: given_name
AttributeDataType: String
Mutável: verdadeiro
Requerido: verdadeiro
- Nome: family_name
AttributeDataType: String
Mutável: verdadeiro
Requerido: verdadeiro
- Nome: email
AttributeDataType: String
Mutável: falso
Requerido: verdadeiro
- Nome: phone_number
AttributeDataType: String
Mutável: verdadeiro
Requerido: verdadeiro
AutoVerifiedAttributes:
- o email
pós-confirmação:
manipulador: ..
Tamanho da memória: ...
eventos:
- http:
caminho: ...
método: colocar
integração: lambda
cors: verdadeiro
autorizador:
tipo: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
- cognitoUserPool:pool: MyUserPoolgatilho: PostConfirmation
Sua solução funcionou perfeitamente @robotlemons !! 🎉 Muito obrigado por compartilhar isso!
A parte que foi realmente confusa para mim foi que os documentos chamam CognitoUserPool
MyUserPool
o tempo todo, e eu estava definindo UserPoolName: ${self:provider.stage}-user-pool
, então pensei que ao declarar o lambda , deveríamos estar fazendo:
- cognitoUserPool:
pool: ${self:provider.stage}-user-pool
trigger: PostConfirmation
Eu pensei que desta forma estava definindo o mesmo nome para ambos, mas a chave aqui é dar ao atributo pool
o mesmo valor que seu CognitoUserPool, por isso que os documentos o definiram como MyUserPool
.
Então, finalmente declarei meu pool de usuários em cognito-user-pool.yml
como:
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
E em serverless.yml
o lambda é declarado 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 isso ajude alguém no futuro!
Muito obrigado novamente por sua ajuda! 💯
@ Ccastillo06
Sinto muito, estou super confuso e adoraria uma ajuda.
Portanto, na declaração PostConfirmation, na seção de eventos cognitoUserPool. Qual deve ser o valor de 'pool'? Tentei o nome real do pool de usuários e ele continua criando novos pools de usuários. Também tentei o valor diretamente em 'Recursos' (no seu caso 'CognitoUserPoolMyUserPool').
Agora, em seu valor de 'pool', você disse que inseriu 'MyUserPool' sem a parte CognitoUserPool, mas meu nome de recurso é diferente. Então, qual deveria ser meu nome? Tentei o nome completo e não funcionou.
@ Studio2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
Neste exemplo, você usaria o que quer que esteja após CognitoUserPool como seu valor de pool. Neste caso, seria MyUserPool
@robotlemons Obrigado pela resposta rápida!
Portanto, devo renomear meu recurso. Atualmente não o tenho começando com CognitoUserPool. Atualmente é chamado apenas de: MycompanyUserPool. Vou mudar para: CognitoUserPoolMyCompanyUserPool ... Correto?
sim
Enviado do meu iPhone
Em 11 de abril de 2019, às 12h33, Studio2133 [email protected] escreveu:
@robotlemons Obrigado pela resposta rápida!
Portanto, devo renomear meu recurso. Atualmente não o tenho começando com CognitoUserPool. Atualmente é chamado apenas de: MycompanyUserPool. Vou mudar para: CognitoUserPoolMyCompanyUserPool ... Correto?
-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.
@ Studio2133 No seu caso, você deve fazer o que @robotlemons disse, apenas adicione CognitoUserPool
antes do nome do seu pool de usuários real MycompanyUserPool
.
Portanto, no final você deve ter: CognitoUserPoolMycompanyUserPool
para esse nome de pool.
Portanto, sua definição de pool de usuários em cognito-user-pool.yml
deve ser:
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
E então a definição do gatilho lambda em serverless.yml
deve ser:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
Isso está funcionando bem para nós em nosso último projeto (chamando outros lambdas e serviços da AWS usando o gatilho PostConfirmation
) e não tive nenhum problema.
Lembre-se de remover todos os pools duplicados antes de criar os pools fixos para que não haja nada confuso no painel de controle da AWS.
Espero que isso seja útil e resolva o problema!
@ Studio2133
Ao adicionar um evento cognitoUserPool a um lambda, o Serverless gera automaticamente um novo Cognito User Pool e o adiciona ao seu modelo CloudFormation gerado. O nome do recurso lógico CloudFormation desse pool é CognitoUserPool {normalizedPoolId}, em que normalizedPoolId é o nome que você fornece para o pool em seu evento cognitoUserPool. Este é o pool ao qual o gatilho será conectado. Para conectar o gatilho ao seu próprio pool declarado em Recursos, você pode aproveitar essa convenção de nomenclatura para substituir o pool gerado adicionando o evento cognitoUserPool. Para fazer isso, você precisa usar CognitoUserPool {normalizedPoolId} como o nome do recurso lógico do seu pool na seção Recursos. Isso fará com que o Serverless use esse pool para conectar seu gatilho, em vez de gerar um novo.
Mais detalhes sobre essa abordagem podem ser encontrados neste artigo.
Comentários muito úteis
Sua solução funcionou perfeitamente @robotlemons !! 🎉 Muito obrigado por compartilhar isso!
A parte que foi realmente confusa para mim foi que os documentos chamam
CognitoUserPool
MyUserPool
o tempo todo, e eu estava definindoUserPoolName: ${self:provider.stage}-user-pool
, então pensei que ao declarar o lambda , deveríamos estar fazendo:Eu pensei que desta forma estava definindo o mesmo nome para ambos, mas a chave aqui é dar ao atributo
pool
o mesmo valor que seu CognitoUserPool, por isso que os documentos o definiram comoMyUserPool
.Então, finalmente declarei meu pool de usuários em
cognito-user-pool.yml
como:E em
serverless.yml
o lambda é declarado como:Espero que isso ajude alguém no futuro!
Muito obrigado novamente por sua ajuda! 💯