使用Pulumi Python为GCP存储桶分配生命周期规则报错及解决方案
问题原理说明
你的猜测完全正确,报错的本质是参数类型不匹配,和Pulumi的类型校验机制、GCP存储桶API的设计有关,具体原理拆解如下:
- 首先看类型定义要求:从Pulumi的Bucket构造函数可以看到,
lifecycle参数接收的是BucketLifecycleArgs类型,其中rule字段的类型标注是typing.Sequence[BucketLifecycleRuleItemArgs]。Python的typing.Sequence是泛型类型,指代所有有序、可迭代的集合类型(最常见的是列表、元组),设计上是为了支持同时配置多条生命周期规则,哪怕你只需要1条规则,也必须用序列格式传递。 - 原写法错误原因:你之前直接把单个
myrule对象传给rule参数,不属于序列类型,Pulumi的静态类型校验不通过,底层序列化时会把单个规则对象直接转为字典,就触发了报错里的「期望Sequence类型但得到dict」的错误提示。 - 修复逻辑说明:你给
myrule加方括号写成[myrule],就是把单个规则对象包装成了只有1个元素的列表,列表属于标准的Sequence类型,完全匹配参数的类型要求,所以校验可以通过,Pulumi会把这个列表序列化为GCP API要求的规则数组格式,就能正常创建资源了。
额外优化建议
你当前用storage.outputs.BucketLifecycleResponse来构造参数其实不是最规范的写法,xxxResponse类是Pulumi用来接收资源创建成功后的返回结果的,构造入参更推荐用对应的xxxArgs类,写法如下,兼容性更好:
# 推荐写法:用Args类构造入参 mycustomlifecycle = storage.BucketLifecycleArgs( rule=[myrule] )
内容的提问来源于stack exchange,提问作者MrThompson
相关产品推荐
相关产品推荐

