通过具有属性更新的 CloudFormation 部署 AWS UserPool

iss*_*ure 9 amazon-web-services aws-cloudformation amazon-cognito

如果您通过 CloudFormation 部署 UserPool,例如:

Resources:
  UserPool:
    Type: 'AWS::Cognito::UserPool'
    Properties:
      ...
      Schema:
        - Name: email
          AttributeDataType: String
          Mutable: true
          Required: true
Run Code Online (Sandbox Code Playgroud)

然后更新属性以使其成为name必需的:

Schema:
  - Name: email
    AttributeDataType: String
    Mutable: true
    Required: true
  - Name: name
    AttributeDataType: String
    Mutable: true
    Required: true
Run Code Online (Sandbox Code Playgroud)

AWS 认为这name是一个自定义属性并失败:

当前不支持必需的自定义属性。(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:InvalidParameterException;请求 ID:...)

这只是失败的更新,部署干净的堆栈正确地将属性emailname标准属性都设置为必需。

有没有办法让更新成功?

Tan*_*Boy 7

不幸的是,这是来自 CloudFormation 的某种错误。与其他问题非常相似,例如更新具有多个索引的 DynamoDB 表。

进行更新的唯一可行方法是分两步完成:

  1. 删除必须更改的属性(在您的情况下name),部署 CloudFormation
  2. 添加具有正确值的属性(因此Require: true在您的情况下添加),部署 CloudFormation

如前所述,有很多与该案例类似的问题,您最好将您的问题告知 AWS,以获得支持并修复错误。

  • 谢谢,在这种情况下,似乎在首次部署堆栈后无法配置标准属性,因为任何更新都会产生同名的自定义属性,因此这些步骤会导致相同的错误。 (2认同)