微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

输出类型的对象不是 JSON 可序列化的

如何解决输出类型的对象不是 JSON 可序列化的

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:输出类型的对象不是 JSON 可序列化的

如果我让 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。