使用Cognito池更新CloudFormation堆栈声称我们在不使用属性时添加属性

时间:2018-11-09 13:23:08

标签: amazon-cloudformation amazon-cognito

从2018年11月7日开始,我们在更新CloudFormation堆栈时开始出现以下错误:

Updating user pool schema is not allowed from cloudformation. Use the
AddCustomAttributes API or the AWS Cognito Console to update user pool
schema.

我们的CF堆栈对Cognito池的自定义属性没有任何更改。他们仅对PostConfirmationCustomMessage触发器进行了更改,并添加了API网关响应。

有人知道为什么我们会看到这个吗?我们如何避免此错误消息?

3 个答案:

答案 0 :(得分:1)

我们在部署时遇到了同样的问题。现在,我们将在不使用CustomMessage触发器的情况下进行部署,并在部署后手动设置CustomMessage触发器。

答案 1 :(得分:0)

我们从模板中删除了CustomMessage更改,看来可以解决问题。

答案 2 :(得分:0)

主要是靠运气,我找到了一个答案,可以让我以自动化的方式解决此问题。

我们的脚本过去如何工作

首先,让我解释一下这是如何工作的。我曾经有以下一组cloudFormation脚本:

cognitoSetup.template  --> <Serverless Framework> --> <cognitoSetup.template updated with triggers>

因此,我们将设置Cognito池,运行无服务器框架以添加Cognito Lambda函数,然后使用无服务器框架运行时导出的Lambda的ARN更新cognitoSetup.template文件。

修复

现在,我们在cognitoSetup.template中包含Lambda的ARN。因此,cognitoSetup.template现在看起来像这样:

   "CognitoUserPool": {
     "Type": "AWS::Cognito::UserPool"
     ...
     "Properties": {
     ...
     "LambdaConfig": {
        "CustomMessage": "arn:aws:lambda:<our aws region>:<our account#>:function:main-<our stage>-onCognitoCustomMessage"
      }
    }

注意,我们正在 之前设置此触发器,甚至存在lambda。触发器只需要一个ARN,似乎并不在乎它是否还没有。然后,我们运行sls deploy,它会创建实际的Lambda函数,并且一切正常。

现在我们的脚本如下:

cognitoSetup.template  --> <Serverless Framework>

为什么可以解决此错误?我真的不知道进行此修改后,CloudFormation似乎很好,但是在我们的过程中稍后修改同一文件时,是不可行的。但这有效。