python - Output 类型的对象不可 JSON 序列化

标签 python output pulumi

stack_name = "test-stack"
bucket = aws.s3.Bucket(
    f"{stack_name}",
    acl="private",
)
firehose_s3_policy = aws.iam.Policy(
    f"{stack_name}-firehose-s3-access-policy",
    policy=json.dumps(
        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "s3:*",
                    ],
                    "Resource": [
                        bucket.arn,
                    ]
                }
            ]
        }
    ))

我得到的错误:

TypeError: Object of type Output is not JSON serializable

如果我做bucket.arn一个字符串 (str(bucket.arn)) 我得到 \"Resource\": [\"<pulumi.output.Output object at 0x7f404d2ebed0>\"]

我尝试使用apply,但它也不起作用。怎么解决?

最佳答案

您需要使用apply将字符串输出转换为JSON输出:

def public_read_policy_for_bucket(arn):
    return json.dumps({
        "Version": "2012-10-17",
        "Statement": [{
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                arn,
            ]
        }]
    })

firehose_s3_policy = aws.iam.Policy(
    f"{stack_name}-firehose-s3-access-policy",
    policy=bucket.arn.apply(public_read_policy_for_bucket))

查看full example .

关于python - Output 类型的对象不可 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68274170/

相关文章:

python - djangorest_framework自定义异常错误

python - 属性错误 : 'DisabledBackend' object has no attribute '_get_task_meta_for'

python - pandas DataFrame 中最大值对应的列名

java - 如何从右对齐java中的输出?

c# - 为什么 Process.Start 会产生 ANSI 转义码

azure - Pulumi 正在创建一个具有不同名称的 azure 资源组

python - VS Code 无法识别 Pulumi 和 Pulumi Azure Native

python - 使用 Python 查找第 N 个素数的枚举

python - 只要不输入空就打印数字