我正在使用无服务器部署AWS CloudFormation模板和一些功能,这是我的serverless.yml文件的一部分:
resources:
Resources:
MyUserPool: #An inline comment
Type: "AWS::Cognito::UserPool"
Properties:
UserPoolName: "MyUserPool"
Policies:
PasswordPolicy:
MinimumLength: 7
RequireLowercase: false
RequireNumbers: true
RequireSymbols: false
RequireUppercase: false
functions:
preSignUp:
handler: presignup.validate
events:
- cognitoUserPool:
pool: "MyUserPool"
trigger: PreSignUp
如您所见,两个用户池名称相同,但是当我运行无服务器部署时,会创建2个具有相同名称的用户池。
这是一个错误还是我错过了什么?
答案 0 :(得分:3)
我还发现这首先是反直觉和令人困惑的。但是, 实际上是预期的(并记录在案)行为。
当您将Cognito事件作为触发器附加到某个功能时,无服务器将为您创建一个用户池,甚至不会被询问。 Source:
这将创建具有指定名称的Cognito用户池。
因此,在您的情况下,cognitoUserPool
事件正在创建一个用户池,另一个用户池由Resources
部分创建。由Resources
创建的那个是正确的(具有自定义密码策略),并且由lambda触发器创建的那个具有默认配置。该修复程序在"Overriding a generated User Pool"标题下描述。
您在参考资料部分中的用户池密钥前缀为CognitoUserPool
,这将导致您的触发器和资源在生成的CloudFormation模板中引用相同的用户池。
在您的情况下,这意味着只需更改此内容:
resources:
Resources:
MyUserPool:
Type: "AWS::Cognito::UserPool"
到此:
resources:
Resources:
CognitoUserPoolMyUserPool:
Type: "AWS::Cognito::UserPool"
使用无服务器1.26.0进行测试
答案 1 :(得分:3)
正确的方法是在函数的cognitoUserPool属性上设置func calcButton() {
var testWord = ""
var wordScore = 0
let alphaDict = ["P": 3, "U": 1, "B": 3, "M": 3, "A": 1, "C": 2, "V": 4, "L": 1, "Q": 10, "D": 2, "H": 4, "K": 5, "N": 1, "J": 8, "T": 1, "E": 1, "X": 8, "R": 1, "O": 1, "I": 1, "G": 2, "F": 4, "Y": 4, "Z": 10, "W": 4, "S": 1]
for character in showLetters {
if let value = alphaDict[character] {
wordScore += value
}
}
print(wordScore)
}
,例如...
existing: true
Serverless added support将于2019年7月发布。