Pulumi中使用F-string拼接存储连接字符串出现对象占位错误如何解决
问题原因
Pulumi 中所有云端资源的返回属性都是 Output[T] 类型对象,而非普通Python字符串。这类对象用于承载异步生成的云资源属性:Pulumi需要先调用云厂商API完成资源创建/查询操作后,才能拿到实际的属性值,代码同步运行阶段这些值还未生成,直接放入原生F-string中只会打印对象本身的内存地址。
你之前单独调用pulumi.export可以正常输出,是因为export方法原生兼容Output类型,会自动等待值生成后再打印结果。
正确解决方法
有两种常用的实现方案:
方案1:使用Output.apply拼接
如果拼接内容依赖多个Output对象,可以先用pulumi.Output.all将所有依赖的Output打包,再通过apply方法在回调函数中完成拼接,回调执行时所有值都已生成,为普通字符串类型。
示例代码:
conn_str = pulumi.Output.all(storage_name, storage_primary_key).apply( lambda args: f"DefaultEndpointsProtocol=https;AccountName={args[0]};AccountKey={args[1]};EndpointSuffix=core.windows.net" ) # 直接导出即可,export原生支持Output类型 pulumi.export('storage connection string is', conn_str)
方案2:使用Pulumi内置Output.concat方法
Pulumi提供了内置的concat方法,专门用于拼接Output对象与普通字符串,无需手动编写apply回调:
conn_str = pulumi.Output.concat( "DefaultEndpointsProtocol=https;AccountName=", storage_name, ";AccountKey=", storage_primary_key, ";EndpointSuffix=core.windows.net" ) pulumi.export('storage connection string is', conn_str)
内容的提问来源于stack exchange,提问作者Shadi
相关产品推荐
相关产品推荐

