通过 CloudFormation 部署 AWS UserPool 并更新属性
Posted
技术标签:
【中文标题】通过 CloudFormation 部署 AWS UserPool 并更新属性【英文标题】:Deploy AWS UserPool via CloudFormation with attribute update 【发布时间】:2020-04-10 18:36:34 【问题描述】:如果您通过 CloudFormation 部署 UserPool,例如:
Resources:
UserPool:
Type: 'AWS::Cognito::UserPool'
Properties:
...
Schema:
- Name: email
AttributeDataType: String
Mutable: true
Required: true
然后更新属性以使 name
成为必需:
Schema:
- Name: email
AttributeDataType: String
Mutable: true
Required: true
- Name: name
AttributeDataType: String
Mutable: true
Required: true
AWS 认为 name
是自定义属性并失败:
当前不支持必需的自定义属性。 (服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:InvalidParameterException;请求 ID:...)
这只是一个失败的更新,部署一个干净的堆栈正确地将email
和name
标准属性设置为必需。
有什么方法可以更新成功吗?
【问题讨论】:
【参考方案1】:不幸的是,这是来自 CloudFormation 的某种错误。与其他问题非常相似,例如更新具有多个索引的 DynamoDB 表。
进行更新的唯一可行方法是分两步进行:
-
删除必须更改的属性(在您的情况下为
name
),部署 CloudFormation
添加具有正确值的属性(因此在您的情况下添加 Require: true
),部署 CloudFormation
如前所述,与该案例类似的问题非常多,您最好将您的问题告知 AWS,以获得支持并修复错误。
【讨论】:
谢谢,在这种情况下,似乎在首次部署堆栈后无法配置标准属性,因为任何更新都会导致同名的自定义属性,因此这些步骤会导致相同的错误。 DynamoDB GSI 更新行为在这里稍微解释一下:github.com/aws-cloudformation/…以上是关于通过 CloudFormation 部署 AWS UserPool 并更新属性的主要内容,如果未能解决你的问题,请参考以下文章
通过 Cloudformation、CodeBuild 和 CodePipeline 将 python 包部署到 AWS Lambda
AWS CloudFormation + Elastic Beanstalk 错误