开发者社区 问答 正文

出现“ AttributeError:'CfnUserPool'对象没有属性'user_pool_i

我想创建“ CfnUserPoolClient使用AWS文档”对象- https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_cognito/CfnUserPoolClient.html

我创建了这样的“ CfnUserPool ”对象-

_cognito_user_pool = _cognito.CfnUserPool(stack, id="pool-id", user_pool_name="user-auth-pool")

要创建“ CfnUserPoolClient ”对象,我需要“ CfnUserPool ”对象的ID 。我正在使用下面的代码来创建“ CfnUserPoolClient ”对象-

_user_pool_id = _cognito_user_pool.user_pool_id
_cognito_userpool_clients = _cognito.CfnUserPoolClient(stack, id="client-id", user_pool_id=_user_pool_id, client_name="client-name")

我正在此代码下面的错误-

AttributeError: 'CfnUserPool' object has no attribute 'user_pool_id'.

我认为“ CfnUserPool”对象没有属性“ user_pool_id”。我尝试使用“ id”来获取用户池ID,如下所示:

_```js user_pool_id = _cognito_user_pool.id

但是我仍然遇到相同的错误,这次是“ id”。

那么,如何从CfnUserPool资源获取CfnUserPoolClient的“ user_pool_id”值?

展开
收起
几许相思几点泪 2019-12-24 09:59:37 719 分享 版权
阿里云 AI 助理回答

在AWS CDK中,CfnUserPool 是一个CloudFormation的直接资源映射,它代表了AWS Cognito User Pool的低级定义。当你创建一个 CfnUserPool 实例时,它的属性并不会立即包含像 user_pool_id 这样的值,因为这个ID是在实际部署到AWS CloudFormation并创建资源后生成的。

对于你的需求,如果你想要从一个 CfnUserPool 对象直接引用其ID来创建 CfnUserPoolClient,你实际上不需要显式地获取 user_pool_id。在CDK中,当你构造其他资源(如 CfnUserPoolClient)并需要引用之前创建的资源ID时,通常通过对象引用而非直接属性来实现。

正确的做法是直接使用 _cognito_user_pool.ref 来引用 CfnUserPool 的ID,而不是尝试访问一个不存在的 user_pool_id 属性。修改你的代码如下:

_cognito_user_pool = _cognito.CfnUserPool(stack, "pool-id", user_pool_name="user-auth-pool")

# 使用.ref而不是.user_pool_id或.id
_cognito_userpool_client = _cognito.CfnUserPoolClient(
    stack, 
    "client-id", 
    user_pool_id=_cognito_user_pool.ref, # 这里用ref
    client_name="client-name"
)

这里,_cognito_user_pool.ref 会返回一个Token,该Token在CloudFormation模板部署时会被解析为实际的User Pool ID。这样,你就可以成功地将新创建的User Pool与User Pool Client关联起来,而无需预先知道User Pool的具体ID。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: