best-lifeguard-91445
05/21/2020, 4:48 PMaws.sqs.QueuePolicy
with a dynamic list of statements? I'm getting: Calling [toString] on an [Output<T>] is not supported.
function createQueuePolicyStatement(inboundSqs: aws.sqs.Queue, topicData: TopicData[]): pulumi.Input<string> {
const statement = (queueArn: Output<string>, topicArn: Output<string>) => {
return queueArn.apply((qarn) => {
return topicArn.apply((tarn) => {
return `
{
"Effect": "Allow",
"Principal": "*",
"Action": "SQS:SendMessage",
"Resource": "${qarn}",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "${tarn}"
}
}`
});
});
}
const policyStatement = `
"Version": "2012-10-17",
"Id": "sqspolicy",
"Statement": [
${topicData.map((data) => statement(inboundSqs.arn, data.topic.arn)).join(`,`)}
]
}`;
return policyStatement;
}
wonderful-dog-9045
05/21/2020, 4:53 PM${topicData.map((data) => statement(inboundSqs.arn, data.topic.arn)).join(`,`)}
pulumi.output({quarn: queueArn, tarn: topicArn}).apply(({quern, tarn}) => { ... })
best-lifeguard-91445
05/21/2020, 4:56 PMDiagnostics:
pulumi:pulumi:Stack (aws-prod):
"Version": "2012-10-17",
"Id": "sqspolicy",
"Statement": [
Calling [toString] on an [Output<T>] is not supported.
To get the value of an Output<T> as an Output<string> consider either:
1: o.apply(v => `prefix${v}suffix`)
2: pulumi.interpolate `prefix${v}suffix`
See <https://pulumi.io/help/outputs> for more details.
This function may throw in a future version of @pulumi/pulumi.
]
}
function createQueuePolicyStatement(inboundSqs: aws.sqs.Queue, topicData: TopicData[]): pulumi.Output<string> {
const statement = (queueArn: Output<string>, topicArn: Output<string>) => {
return pulumi.interpolate`
{
"Effect": "Allow",
"Principal": "*",
"Action": "SQS:SendMessage",
"Resource": "${queueArn}",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "${topicArn}"
}
}
}`;
}
const policyStatement = pulumi.interpolate`
{
"Version": "2012-10-17",
"Id": "sqspolicy",
"Statement": [
${topicData.map((data) => statement(inboundSqs.arn, data.topic.arn))}
]
}`;
policyStatement.apply((p) => {
console.log('policy', p.toString());
});
return policyStatement;
}
wonderful-dog-9045
05/21/2020, 7:00 PMinterpolate
is new to me.best-lifeguard-91445
05/21/2020, 7:06 PM"Statement": [
${topicData.map((data) => statement(inboundSqs.arn, data.topic.arn))}
]
the map returns an array of strings like: `[{ ... }
,`{...}]`` the final output includes commas between each { .. }, {...}, {...}${x}
)
blah,blah
toString()
method which by default joins the returned array by map
with a ,
.wonderful-dog-9045
05/21/2020, 7:29 PMPolicyDocument
object instead.PolicyArgs
and RolePolicyArgs
accept inputs string
or PolicyDocument
s . All the documetnation examples use strings.PolicyDocument
s are much easier to deal withbest-lifeguard-91445
05/21/2020, 7:31 PMwonderful-dog-9045
05/21/2020, 7:32 PMbest-lifeguard-91445
05/21/2020, 7:33 PMwonderful-dog-9045
05/21/2020, 7:34 PMimport { PolicyDocument } from "@pulumi/aws/iam"
or
import { iam } from "@pulumi/aws"
-> iam.PolicyDocument
best-lifeguard-91445
05/21/2020, 7:36 PMwonderful-dog-9045
05/21/2020, 8:06 PMJSON.stringify
should do the jobpulumi.output(policyDocument).apply((doc) => JSON.stringify(doc, null, 2))
best-lifeguard-91445
05/21/2020, 8:10 PM