Python注册AWS CDK region_info Fact未生效问题
问题定位
你的代码注册失败的核心原因是类属性赋值时末尾多余的逗号,Python会把带尾逗号的赋值自动转为单元素元组,和IFact接口要求的属性类型完全不匹配,导致Fact注册后匹配规则失效。
具体错误点:
self.region = region_name,实际赋值为元组("rando-region-east-1",),而非你预期的字符串类型区域名self.name = region_info.FactName.ELBV2_ACCOUNT,实际赋值为包含枚举值的单元素元组,而非FactName类型的枚举值- 上述两个属性的类型和你调用
Fact.find()时传入的字符串、枚举值完全无法匹配,因此查询始终返回None
修正后代码
import jsii from aws_cdk import region_info region_name = "rando-region-east-1" elbv2_account = region_info.Fact.find(region_name, region_info.FactName.ELBV2_ACCOUNT) print(elbv2_account) # None @jsii.implements(region_info.IFact) class MyElbv2Fact: def __init__(self) -> None: # 去掉所有属性赋值末尾的多余逗号 self.region = region_name self.name = region_info.FactName.ELBV2_ACCOUNT self.value = "111111111111" region_info.Fact.register( fact=MyElbv2Fact(), allow_replacing=True ) elbv2_account = region_info.Fact.find(region_name, region_info.FactName.ELBV2_ACCOUNT) print(elbv2_account) # 输出 111111111111
额外提示:如果后续注册其他Fact,也可以直接用
region_info.Fact.register_fact()静态方法,不需要手动实现IFact类,写法更简洁:region_info.Fact.register_fact( region=region_name, name=region_info.FactName.ELBV2_ACCOUNT, value="111111111111", allow_replacing=True )
内容的提问来源于stack exchange,提问作者maafk
相关产品推荐
相关产品推荐

