问题描述
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。