如何在 Pulumi 中使用本地磁盘中的文件?

How can I use a file from the local disk in Pulumi?

我正在尝试使用位于磁盘上的 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');

结果是:

Error: ENOENT: no such file or directory, open 'policy.json'
at Object.openSync (node:fs:585:3)

A 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
});