无服务器复制用户池而不是按名称重用

时间:2018-03-16 12:15:39

标签: amazon-web-services amazon-cloudformation serverless-framework serverless

我正在使用无服务器部署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个具有相同名称的用户池。

enter image description here

这是一个错误还是我错过了什么?

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月发布。