首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pulumi:如何将Output<string>[]序列化为JSON

Pulumi:如何将Output<string>[]序列化为JSON
EN

Stack Overflow用户
提问于 2019-10-11 20:47:32
回答 1查看 1.7K关注 0票数 6

我希望允许Lambda服务在我的私有网络内创建部署,因此我有一个Output<string>[]类型的子网I数组,我想将其放入角色策略中,如下所示:

代码语言:javascript
复制
export const createNetworkInterfacePolicy = new aws.iam.RolePolicy(
  "network-interface-policy-2",
  {
    policy: pulumi.interpolate `{
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["ec2:CreateNetworkInterfacePermission"],
          "Resource": [
            "arn:aws:ec2:${region}:${callerIdentity.accountId}:network-interface/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:Subnet": ${JSON.stringify(vpc.vpcPrivateSubnetIds.map(item => item.apply(JSON.stringify)))},
              "ec2:AuthorizedService": "lambda.amazonaws.com"
            }
          }
        }
      ]
    }`,
    role: deploymentRole
  }
);

不幸的是,我最终得到的结论是:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterfacePermission"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-2:removedAccountId:network-interface/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:Subnet": [
                        "Calling [toJSON] on an [Output<T>] is not supported.\n\nTo get the value of an Output as a JSON value or JSON string consider either:\n    1: o.apply(v => v.toJSON())\n    2: o.apply(v => JSON.stringify(v))\n\nSee https://pulumi.io/help/outputs for more details.\nThis function may throw in a future version of @pulumi/pulumi.",
                        "Calling [toJSON] on an [Output<T>] is not supported.\n\nTo get the value of an Output as a JSON value or JSON string consider either:\n    1: o.apply(v => v.toJSON())\n    2: o.apply(v => JSON.stringify(v))\n\nSee https://pulumi.io/help/outputs for more details.\nThis function may throw in a future version of @pulumi/pulumi."
                    ],
                    "ec2:AuthorizedService": "lambda.amazonaws.com"
                }
            }
        }
    ]
}

我尝试了许多组合,但都不起作用。如何从Output<string>[]生成JSON数组

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-12 03:27:37

有时,在创建另一个资源的整个过程中包装一个应用程序是最容易的。在这种情况下,appTaskPolicy变成了一个OutputInstance<aws.iam.Policy>,然后您可以使用它自己的输出将它提供给程序的其他部分。

如果您尚未使用import * as pulumi from '@pulumi/pulumi';命令,则需要对其执行此命令

代码语言:javascript
复制
const vpc = awsx.Network.getDefault();
const appTaskPolicyName = named('app-task-policy');

const appTaskPolicy = pulumi.all(vpc.publicSubnetIds).apply(([...subnetIds]) => {
    return new aws.iam.Policy(appTaskPolicyName, {
        policy: {
            Version: '2012-10-17',
            Statement: [
                {
                    Action: ['sqs:GetQueueUrl', 'sqs:SendMessage'],
                    Resource: [
                        'someresourcearn'
                    ],
                    Effect: 'Allow',
                    Condition: {
                        StringEquals: {
                            'ec2:Subnet': subnetIds,
                            'ec2:AuthorizedService': 'lambda.amazonaws.com'
                        }
                    }
                }
            ]
        }
    });
});
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58341593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档