【问题标题】:How can I use a file from the local disk in Pulumi?如何在 Pulumi 中使用本地磁盘中的文件?
【发布时间】:2021-12-05 17:50:32
【问题描述】:

我正在尝试使用位于磁盘上的 Pulumi 中 AWS 的长策略文档。

const policyDocument = new pulumi.asset.FileAsset("./policy.json");

但是,当我稍后尝试像这样使用该变量时:

export const jobPolicy = new aws.iam.Policy(`${ jobName }-policy`, {
  path: `/${ stage }`,
  description: `Policy for ETL job ${ jobName }`,
  policy: JSON.stringify(policyDocument)
});

我得到以下信息:

 + policy     : "{\"__pulumiAsset\":true,\"path\":{}}"

有没有办法在 Pulumi + TypeScript 中以某种方式使用 JSON 文件?

我也试过了:

import * as fs from 'fs';
const policyDocument  = fs.readFileSync('policy.json', 'utf8');

结果是:

错误:ENOENT:没有这样的文件或目录,打开“policy.json”
在 Object.openSync (node:fs:585:3)

【问题讨论】:

    标签: typescript pulumi


    【解决方案1】:

    pulumi.asset.FileAsset 创建新资源,包括输入和输出。它通常用于创建 lambda 函数。

    policy 参数采用标准的 TypeScript 字符串,因此您使用 fs.readFileSync 在正确的行上,但我认为您忘记添加 json 文件的路径。你可能会这样做:

    const policyDocument  = fs.readFileSync('./policy.json','utf8');
    

    请注意那里的./。但是,更安全的方法是使用path 解析目录。试试这样的

    import * as pulumi from "@pulumi/pulumi";
    import * as aws from "@pulumi/aws";
    import * as fs from 'fs';
    const path = require('path');
    
    const policyDocument = fs.readFileSync(path.resolve(__dirname, 'policy.json'), 'utf8');
    
    const jobPolicy = new aws.iam.Policy('file-policy', {
        policy: policyDocument
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多