将相同的 Cognito 用户池与 Lambda 函数和资源一起使用?
Use same Cognito UserPool with Lamda Function and Resources?
我正在使用无服务器框架,我需要为由 Lambda 函数创建的 UserPool 覆盖一些默认值。正确的做法是什么?
我的 serverless.yml
正在创建两个 user-pool
(同名),一个用于 lambda 函数,另一个用于 UserPool
资源:
service: userpool
custom:
stage: dev
poolName: user-pool
provider:
name: aws
runtime: nodejs6.10
stage: ${opt:stage, self:custom.stage}
functions:
preSignUp:
handler: handler.preSignUp
events:
- cognitoUserPool:
pool: ${self:custom.poolName}
trigger: PreSignUp
resources:
Resources:
UserPool:
Type: "AWS::Cognito::UserPool"
Properties:
UserPoolName: ${self:custom.poolName}
AliasAttributes:
- email
AutoVerifiedAttributes:
- email
Schema:
- Name: name
AttributeDataType: String
Mutable: true
Required: true
- Name: email
AttributeDataType: String
Mutable: false
Required: true
现在可以使用了,但是有人可以向我解释如何操作吗?下面的代码如何知道事件创建的 Cognito 资源和池是相同的?
service: userpool
custom:
stage: dev
environment:
USER_POOL: userPool
provider:
name: aws
runtime: nodejs6.10
stage: ${opt:stage, self:custom.stage}
functions:
preSignUp:
handler: handler.preSignUp
events:
- cognitoUserPool:
pool: TestPool
trigger: PreSignUp
resources:
Resources:
CognitoUserPoolTestPool:
Type: "AWS::Cognito::UserPool"
Properties:
AliasAttributes:
- email
AutoVerifiedAttributes:
- email
Schema:
- Name: name
AttributeDataType: String
Mutable: true
Required: true
- Name: email
AttributeDataType: String
Mutable: false
Required: true
根据 https://serverless.com/framework/docs/providers/aws/guide/resources/#aws---resources
中的无服务器文档
如果您创建了遵循此格式 CognitoUserPool{normalizedPoolId} 的 Cognito 用户池资源,您可以为每个资源提供 normalizedPoolId你的 lambda 函数。
在您的情况下,您已将 Cognito 用户池定义为“CognitoUserPoolTestPool”,这允许您在 lambda 中使用 TestPool。
这个问题在新版本中得到了更好的解决:
Add support for existing Cognito User Pools
您的函数事件应如下所示:
functions:
preSignUp:
handler: handler.preSignUp
events:
- cognitoUserPool:
pool: ${self:custom.poolName}
trigger: PreSignUp
existing: true
无需在资源定义前额外添加"CognitoUserPool"。
我正在使用无服务器框架,我需要为由 Lambda 函数创建的 UserPool 覆盖一些默认值。正确的做法是什么?
我的 serverless.yml
正在创建两个 user-pool
(同名),一个用于 lambda 函数,另一个用于 UserPool
资源:
service: userpool
custom:
stage: dev
poolName: user-pool
provider:
name: aws
runtime: nodejs6.10
stage: ${opt:stage, self:custom.stage}
functions:
preSignUp:
handler: handler.preSignUp
events:
- cognitoUserPool:
pool: ${self:custom.poolName}
trigger: PreSignUp
resources:
Resources:
UserPool:
Type: "AWS::Cognito::UserPool"
Properties:
UserPoolName: ${self:custom.poolName}
AliasAttributes:
- email
AutoVerifiedAttributes:
- email
Schema:
- Name: name
AttributeDataType: String
Mutable: true
Required: true
- Name: email
AttributeDataType: String
Mutable: false
Required: true
现在可以使用了,但是有人可以向我解释如何操作吗?下面的代码如何知道事件创建的 Cognito 资源和池是相同的?
service: userpool
custom:
stage: dev
environment:
USER_POOL: userPool
provider:
name: aws
runtime: nodejs6.10
stage: ${opt:stage, self:custom.stage}
functions:
preSignUp:
handler: handler.preSignUp
events:
- cognitoUserPool:
pool: TestPool
trigger: PreSignUp
resources:
Resources:
CognitoUserPoolTestPool:
Type: "AWS::Cognito::UserPool"
Properties:
AliasAttributes:
- email
AutoVerifiedAttributes:
- email
Schema:
- Name: name
AttributeDataType: String
Mutable: true
Required: true
- Name: email
AttributeDataType: String
Mutable: false
Required: true
根据 https://serverless.com/framework/docs/providers/aws/guide/resources/#aws---resources
中的无服务器文档如果您创建了遵循此格式 CognitoUserPool{normalizedPoolId} 的 Cognito 用户池资源,您可以为每个资源提供 normalizedPoolId你的 lambda 函数。
在您的情况下,您已将 Cognito 用户池定义为“CognitoUserPoolTestPool”,这允许您在 lambda 中使用 TestPool。
这个问题在新版本中得到了更好的解决:
Add support for existing Cognito User Pools
您的函数事件应如下所示:
functions:
preSignUp:
handler: handler.preSignUp
events:
- cognitoUserPool:
pool: ${self:custom.poolName}
trigger: PreSignUp
existing: true
无需在资源定义前额外添加"CognitoUserPool"。