You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pulumi + TypeScript中使用本地JSON文件定义AWS IAM策略

错误原因说明
  • FileAsset用法不符合预期的原因:pulumi.asset.FileAsset 是Pulumi专门用于管理需要上传到云存储的文件资源的特殊类型,并非用于读取本地文件内容的工具,直接序列化该类型会输出其内部标识结构,无法得到JSON文件的实际内容。
  • fs读取文件报错的原因:fs.readFileSync 使用相对路径时,路径是相对于执行Pulumi命令时的工作目录,而非当前TypeScript源码文件所在的目录,执行目录和源码目录不一致时就会触发文件找不到的错误。
可行解决方案

方案1:使用fs配合绝对路径读取

通过path模块拼接当前源码文件目录__dirname和JSON文件的相对路径,得到绝对路径后再读取,不受工作目录影响:

import * as fs from 'fs';
import * as path from 'path';

// 生成policy.json的绝对路径
const policyPath = path.join(__dirname, './policy.json');
// 读取结果已经是JSON字符串,可直接传入policy参数
const policyDocument = fs.readFileSync(policyPath, 'utf8');

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

如果需要动态修改JSON文件中的字段,可以先把读取到的字符串转为对象再操作:

const policyObj = JSON.parse(policyDocument);
// 示例:修改策略中的资源字段
policyObj.Statement[0].Resource = `arn:aws:s3:::${bucketName}/*`;
const finalPolicy = JSON.stringify(policyObj);

方案2:直接导入JSON文件(TypeScript原生支持)

先确认项目根目录下的tsconfig.json中开启了如下配置:

{
  "compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true
  }
}

之后就可以直接导入JSON文件,导入结果为解析完成的JS对象:

import * as policyDocument from './policy.json';

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

内容的提问来源于stack exchange,提问作者Istvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:06:03